diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/rtld.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/sysdep.h | 4 |
3 files changed, 12 insertions, 3 deletions
@@ -1,5 +1,10 @@ 2005-12-18 Ulrich Drepper <drepper@redhat.com> + * sysdeps/unix/sysv/linux/x86_64/sysdep.h (PTR_MANGLE): Define C + version for inside ld.so. + + * elf/rtld.c (dl_main): Don't use hp timing code unless it's available. + * sysdeps/powerpc/powerpc32/setjmp-common.S [IS_IN_rtld]: Avoid call to __sigjmp_save. * sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise. diff --git a/elf/rtld.c b/elf/rtld.c index 9ef58bb328..aee3ea9a2a 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -1837,10 +1837,12 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", if (GLRO(dl_pointer_guard)) { // XXX If it is cheap, we should use a separate value. - uintptr_t pointer_chk_guard; + uintptr_t pointer_chk_guard = stack_chk_guard; +#ifndef HP_TIMING_NONAVAIL hp_timing_t now; HP_TIMING_NOW (now); - pointer_chk_guard = stack_chk_guard ^ now; + pointer_chk_guard ^= now; +#endif #ifdef THREAD_SET_POINTER_GUARD THREAD_SET_POINTER_GUARD (pointer_chk_guard); #endif diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h index bb0b604aea..5dfffca455 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -320,7 +320,9 @@ # define PTR_MANGLE(reg) xorq __pointer_chk_guard_local(%rip), reg # define PTR_DEMANGLE(reg) PTR_MANGLE (reg) # else -# error "Define these if necessary" +# define PTR_MANGLE(reg) asm ("xorq __pointer_chk_guard_local(%%rip), %0"\ + : "=r" (reg) : "0" (reg)) +# define PTR_DEMANGLE(reg) PTR_MANGLE (reg) # endif #else # ifdef __ASSEMBLER__ |