* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and

PTR_DEMANGLE for C code in libc.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
This commit is contained in:
Ulrich Drepper 2005-12-18 16:59:55 +00:00
parent 827b70873b
commit 3467f5c369
3 changed files with 34 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2005-12-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and
PTR_DEMANGLE for C code in libc.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
2005-12-17 Ulrich Drepper <drepper@redhat.com> 2005-12-17 Ulrich Drepper <drepper@redhat.com>
* elf/Versions [GLIBC_PRIVATE]: Export __pointer_chk_guard if defined. * elf/Versions [GLIBC_PRIVATE]: Export __pointer_chk_guard if defined.

View File

@ -565,8 +565,17 @@ asm (".L__X'%ebx = 1\n\t"
earlier than the descriptor is initialized. Using a global variable earlier than the descriptor is initialized. Using a global variable
is too complicated here since we have no PC-relative addressing mode. */ is too complicated here since we have no PC-relative addressing mode. */
#else #else
# define PTR_MANGLE(reg) xorl %gs:POINTER_GUARD, reg # ifdef __ASSEMBLER__
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg) # define PTR_MANGLE(reg) xorl %gs:POINTER_GUARD, reg
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
# else
# define PTR_MANGLE(var) asm ("xorl %%gs:%c2, %0" \
: "=r" (var) \
: "0" (var), \
"i" (offsetof (tcbhead_t, \
pointer_guard)))
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
# endif
#endif #endif
#endif /* linux/i386/sysdep.h */ #endif /* linux/i386/sysdep.h */

View File

@ -316,11 +316,24 @@
#if defined NOT_IN_libc && defined IS_IN_rtld #if defined NOT_IN_libc && defined IS_IN_rtld
/* We cannot use the thread descriptor because in ld.so we use setjmp /* We cannot use the thread descriptor because in ld.so we use setjmp
earlier than the descriptor is initialized. */ earlier than the descriptor is initialized. */
# define PTR_MANGLE(reg) xorq __pointer_chk_guard_local(%rip), reg # ifdef __ASSEMBLER__
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg) # define PTR_MANGLE(reg) xorq __pointer_chk_guard_local(%rip), reg
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
# else
# error "Define these if necessary"
# endif
#else #else
# define PTR_MANGLE(reg) xorq %fs:POINTER_GUARD, reg # ifdef __ASSEMBLER__
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg) # define PTR_MANGLE(reg) xorq %fs:POINTER_GUARD, reg
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
# else
# define PTR_MANGLE(var) asm ("xorq %%fs:%c2, %0" \
: "=r" (var) \
: "0" (var), \
"i" (offsetof (tcbhead_t, \
pointer_guard)))
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
# endif
#endif #endif
#endif /* linux/x86_64/sysdep.h */ #endif /* linux/x86_64/sysdep.h */