|
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)
|