359472 The Power PC vsubuqm instruction doesn't always give the correct result
359703 s390: wire up separate socketcalls system calls
359724 getsockname might crash - deref_UInt should call safe_to_deref
+359733 amd64 implement ld.so strchr/index override like x86
n-i-bz Fix incorrect (or infinite loop) unwind on RHEL7 x86 and amd64
n-i-bz massif --pages-as-heap=yes does not report peak caused by mmap+munmap
the start, otherwise ld.so makes a lot of noise. */
if (0==VG_(strcmp)("Memcheck", VG_(details).name)) {
+ add_hardwired_spec(
+ "ld-linux-x86-64.so.2", "index",
+ (Addr)&VG_(amd64_linux_REDIR_FOR_index), NULL);
add_hardwired_spec(
"ld-linux-x86-64.so.2", "strlen",
(Addr)&VG_(amd64_linux_REDIR_FOR_strlen),
.LfnE5:
.size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen)
+.global VG_(amd64_linux_REDIR_FOR_index)
+.type VG_(amd64_linux_REDIR_FOR_index), @function
+VG_(amd64_linux_REDIR_FOR_index):
+ movzbl (%rdi), %eax
+ movl %esi, %edx
+ cmpb %sil, %al
+ jne .L4
+ jmp .L5
+.L10:
+ addq $1, %rdi
+ movzbl (%rdi), %eax
+ cmpb %dl, %al
+ je .L5
+.L4:
+ testb %al, %al
+ jne .L10
+ xorl %eax, %eax
+ ret
+.L5:
+ movq %rdi, %rax
+ ret
+.size VG_(amd64_linux_REDIR_FOR_index), .-VG_(amd64_linux_REDIR_FOR_index)
+
+
/* A CIE for the above four functions, followed by their FDEs */
.section .eh_frame,"a",@progbits
extern Addr VG_(amd64_linux_REDIR_FOR_vtime);
extern Addr VG_(amd64_linux_REDIR_FOR_vgetcpu);
extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* );
+extern Char* VG_(amd64_linux_REDIR_FOR_index) ( const Char*, Int );
#endif
#if defined(VGP_ppc32_linux)
STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2)
STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2_no_bsf)
STRCHR(VG_Z_LIBC_SONAME, index)
-# if !defined(VGP_x86_linux)
+# if !defined(VGP_x86_linux) && !defined(VGP_amd64_linux)
STRCHR(VG_Z_LD_LINUX_SO_2, strchr)
STRCHR(VG_Z_LD_LINUX_SO_2, index)
STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, strchr)