mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
Replace strlen on amd64-linux with a simple version that doesn't
generate false positives. Patch from Jakub Jelinek <jakub@redhat.com>. Fixes #190429. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10402
This commit is contained in:
parent
6a98bb7307
commit
3ddeb03e5b
@ -879,6 +879,20 @@ void VG_(redir_initialise) ( void )
|
||||
(Addr)&VG_(amd64_linux_REDIR_FOR_vtime)
|
||||
);
|
||||
|
||||
/* If we're using memcheck, use these intercepts right from
|
||||
the start, otherwise ld.so makes a lot of noise. */
|
||||
if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
|
||||
|
||||
static const HChar croakage[]
|
||||
= "Possible fix: install glibc's debuginfo package on this machine.";
|
||||
|
||||
/* this is mandatory - can't sanely continue without it */
|
||||
add_hardwired_spec(
|
||||
"ld-linux-x86-64.so.2", "strlen",
|
||||
(Addr)&VG_(amd64_linux_REDIR_FOR_strlen),
|
||||
croakage
|
||||
);
|
||||
}
|
||||
# elif defined(VGP_ppc32_linux)
|
||||
{
|
||||
static const HChar croakage[]
|
||||
|
||||
@ -168,7 +168,29 @@ VG_(amd64_linux_REDIR_FOR_vtime):
|
||||
.LfnE3:
|
||||
.size VG_(amd64_linux_REDIR_FOR_vtime), .-.LfnB3
|
||||
|
||||
/* A CIE for the above two functions, followed by their FDEs */
|
||||
/* There's no particular reason that this needs to be handwritten
|
||||
assembly, but since that's what this file contains, here's a
|
||||
simple strlen implementation (written in C and compiled by gcc.)
|
||||
*/
|
||||
.global VG_(amd64_linux_REDIR_FOR_strlen)
|
||||
.type VG_(amd64_linux_REDIR_FOR_strlen), @function
|
||||
VG_(amd64_linux_REDIR_FOR_strlen):
|
||||
.LfnB4:
|
||||
xorl %eax, %eax
|
||||
cmpb $0, (%rdi)
|
||||
movq %rdi, %rdx
|
||||
je .L41
|
||||
.L40: addq $1, %rdx
|
||||
cmpb $0, (%rdx)
|
||||
jne .L40
|
||||
movq %rdx, %rax
|
||||
subq %rdi, %rax
|
||||
.L41: ret
|
||||
.LfnE4:
|
||||
.size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen)
|
||||
|
||||
|
||||
/* A CIE for the above three functions, followed by their FDEs */
|
||||
.section .eh_frame,"a",@progbits
|
||||
.Lframe1:
|
||||
.long .LEcie1-.LScie1
|
||||
@ -206,6 +228,15 @@ VG_(amd64_linux_REDIR_FOR_vtime):
|
||||
.uleb128 0x0
|
||||
.align 8
|
||||
.LEfde3:
|
||||
.LSfde4:
|
||||
.long .LEfde4-.LASfde4
|
||||
.LASfde4:
|
||||
.long .LASfde4-.Lframe1
|
||||
.long .LfnB4
|
||||
.long .LfnE4-.LfnB4
|
||||
.uleb128 0x0
|
||||
.align 8
|
||||
.LEfde4:
|
||||
.previous
|
||||
|
||||
.global VG_(trampoline_stuff_end)
|
||||
|
||||
@ -66,6 +66,7 @@ extern Char* VG_(x86_linux_REDIR_FOR_index) ( const Char*, Int );
|
||||
extern void VG_(amd64_linux_SUBST_FOR_rt_sigreturn);
|
||||
extern void VG_(amd64_linux_REDIR_FOR_vgettimeofday);
|
||||
extern void VG_(amd64_linux_REDIR_FOR_vtime);
|
||||
extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* );
|
||||
#endif
|
||||
|
||||
#if defined(VGP_ppc32_linux)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user