Jakub Jelinek 30f486
--- valgrind-3.6.1/coregrind/m_trampoline.S.jj	2011-02-22 15:47:55.000000000 +0100
Jakub Jelinek 30f486
+++ valgrind-3.6.1/coregrind/m_trampoline.S	2011-02-23 11:32:20.923402349 +0100
Jakub Jelinek 30f486
@@ -112,6 +112,27 @@ VG_(x86_linux_REDIR_FOR_index):
Jakub Jelinek 30f486
         ret
Jakub Jelinek 30f486
 .size VG_(x86_linux_REDIR_FOR_index), .-VG_(x86_linux_REDIR_FOR_index)
Jakub Jelinek 30f486
 
Jakub Jelinek 30f486
+/* There's no particular reason that this needs to be handwritten
Jakub Jelinek 30f486
+   assembly, but since that's what this file contains, here's a
Jakub Jelinek 30f486
+   simple strlen implementation (written in C and compiled by gcc.)
Jakub Jelinek 30f486
+*/
Jakub Jelinek 30f486
+.global VG_(x86_linux_REDIR_FOR_strlen)
Jakub Jelinek 30f486
+.type   VG_(x86_linux_REDIR_FOR_strlen), @function
Jakub Jelinek 30f486
+VG_(x86_linux_REDIR_FOR_strlen):
Jakub Jelinek 30f486
+        pushl   %ebp
Jakub Jelinek 30f486
+        movl    %esp, %ebp
Jakub Jelinek 30f486
+        movl    8(%ebp), %edx
Jakub Jelinek 30f486
+        movl    %edx, %eax
Jakub Jelinek 30f486
+        jmp     2f
Jakub Jelinek 30f486
+1:      incl    %eax
Jakub Jelinek 30f486
+2:      cmpb    $0, (%eax)
Jakub Jelinek 30f486
+        jne     1b
Jakub Jelinek 30f486
+        subl    %edx, %eax
Jakub Jelinek 30f486
+        popl    %ebp
Jakub Jelinek 30f486
+        ret
Jakub Jelinek 30f486
+.size VG_(x86_linux_REDIR_FOR_strlen), .-VG_(x86_linux_REDIR_FOR_strlen)
Jakub Jelinek 30f486
+
Jakub Jelinek 30f486
+
Jakub Jelinek 30f486
 .global VG_(trampoline_stuff_end)
Jakub Jelinek 30f486
 VG_(trampoline_stuff_end):
Jakub Jelinek 30f486
 
Jakub Jelinek 30f486
--- valgrind-3.6.1/coregrind/pub_core_trampoline.h.jj	2011-02-22 15:47:55.000000000 +0100
Jakub Jelinek 30f486
+++ valgrind-3.6.1/coregrind/pub_core_trampoline.h	2011-02-23 11:25:40.350402084 +0100
Jakub Jelinek 30f486
@@ -60,6 +60,7 @@ extern Addr VG_(trampoline_stuff_end);
Jakub Jelinek 30f486
 extern Addr VG_(x86_linux_SUBST_FOR_sigreturn);
Jakub Jelinek 30f486
 extern Addr VG_(x86_linux_SUBST_FOR_rt_sigreturn);
Jakub Jelinek 30f486
 extern Char* VG_(x86_linux_REDIR_FOR_index) ( const Char*, Int );
Jakub Jelinek 30f486
+extern UInt VG_(x86_linux_REDIR_FOR_strlen)( void* );
Jakub Jelinek 30f486
 #endif
Jakub Jelinek 30f486
 
Jakub Jelinek 30f486
 #if defined(VGP_amd64_linux)
Jakub Jelinek 30f486
--- valgrind-3.6.1/coregrind/m_redir.c.jj	2011-02-22 15:51:02.000000000 +0100
Jakub Jelinek 30f486
+++ valgrind-3.6.1/coregrind/m_redir.c	2011-02-23 11:24:33.502670646 +0100
Jakub Jelinek 30f486
@@ -924,20 +924,23 @@ void VG_(redir_initialise) ( void )
Jakub Jelinek 30f486
    /* If we're using memcheck, use this intercept right from the
Jakub Jelinek 30f486
       start, otherwise ld.so (glibc-2.3.5) makes a lot of noise. */
Jakub Jelinek 30f486
    if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
Jakub Jelinek 30f486
+      const HChar** mandatory;
Jakub Jelinek 30f486
+#     if defined(GLIBC_2_2) || defined(GLIBC_2_3) || defined(GLIBC_2_4) \
Jakub Jelinek 30f486
+         || defined(GLIBC_2_5) || defined(GLIBC_2_6) || defined(GLIBC_2_7) \
Jakub Jelinek 30f486
+         || defined(GLIBC_2_8) || defined(GLIBC_2_9) \
Jakub Jelinek 30f486
+         || defined(GLIBC_2_10) || defined(GLIBC_2_11)
Jakub Jelinek 30f486
+      mandatory = NULL;
Jakub Jelinek 30f486
+#     else
Jakub Jelinek 30f486
+      /* for glibc-2.12 and later, this is mandatory - can't sanely
Jakub Jelinek 30f486
+         continue without it */
Jakub Jelinek 30f486
+      mandatory = complain_about_stripped_glibc_ldso;
Jakub Jelinek 30f486
+#     endif
Jakub Jelinek 30f486
       add_hardwired_spec(
Jakub Jelinek 30f486
          "ld-linux.so.2", "index",
Jakub Jelinek 30f486
-         (Addr)&VG_(x86_linux_REDIR_FOR_index),
Jakub Jelinek 30f486
-#        if defined(GLIBC_2_2) || defined(GLIBC_2_3) || defined(GLIBC_2_4) \
Jakub Jelinek 30f486
-            || defined(GLIBC_2_5) || defined(GLIBC_2_6) || defined(GLIBC_2_7) \
Jakub Jelinek 30f486
-            || defined(GLIBC_2_8) || defined(GLIBC_2_9) \
Jakub Jelinek 30f486
-            || defined(GLIBC_2_10) || defined(GLIBC_2_11)
Jakub Jelinek 30f486
-         NULL
Jakub Jelinek 30f486
-#        else
Jakub Jelinek 30f486
-         /* for glibc-2.12 and later, this is mandatory - can't sanely
Jakub Jelinek 30f486
-            continue without it */
Jakub Jelinek 30f486
-         complain_about_stripped_glibc_ldso
Jakub Jelinek 30f486
-#        endif
Jakub Jelinek 30f486
-      );
Jakub Jelinek 30f486
+         (Addr)&VG_(x86_linux_REDIR_FOR_index), mandatory);
Jakub Jelinek 30f486
+      add_hardwired_spec(
Jakub Jelinek 30f486
+         "ld-linux.so.2", "strlen",
Jakub Jelinek 30f486
+         (Addr)&VG_(x86_linux_REDIR_FOR_strlen), mandatory);
Jakub Jelinek 30f486
    }
Jakub Jelinek 30f486
 
Jakub Jelinek 30f486
 #  elif defined(VGP_amd64_linux)