mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
* elf/Versions [GLIBC_PRIVATE]: Export __pointer_chk_guard if defined.
* elf/rtld.c: Define __pointer_chk_guard_local and if necessary __pointer_chk_guard. (_rtld_global_ro): Initialize _dl_pointer_guard. (dl_main): Initialize __pointer_chk_guard_local and either __pointer_chk_guard or TLS value if necessary. (process_envvars): Recognize and handle LD_POINTER_GUARD. * sysdeps/generic/ldsodefs.h (rtld_global_ro): Add _dl_pointer_guard. * sysdeps/i386/__longjmp.S: Use PTR_DEMANGLE for PC if defined. * sysdeps/x86_64/__longjmp.S: Likewise. * sysdeps/i386/bsd-_setjmp.S: Use PTR_MANGLE for PC if defined. * sysdeps/i386/bsd-_setjmp.S: Likewise. * sysdeps/i386/setjmp.S: Likewise. [IS_IN_rtld]: Avoid call to __sigjmp_save. * sysdeps/i386/setjmp.S: Likewise. * sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and PTR_DEMANGLE. * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise. * sysdeps/i386/elf/setjmp.S: Removed. * sysdeps/i386/elf/bsd-setjmp.S: Removed.
This commit is contained in:
@ -558,4 +558,15 @@ asm (".L__X'%ebx = 1\n\t"
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
|
||||
/* Pointer mangling support. */
|
||||
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||
/* We cannot use the thread descriptor because in ld.so we use setjmp
|
||||
earlier than the descriptor is initialized. Using a global variable
|
||||
is too complicated here since we have no PC-relative addressing mode. */
|
||||
#else
|
||||
# define PTR_MANGLE(reg) xorl %gs:POINTER_GUARD, reg
|
||||
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
|
||||
#endif
|
||||
|
||||
#endif /* linux/i386/sysdep.h */
|
||||
|
@ -311,4 +311,16 @@
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
|
||||
/* Pointer mangling support. */
|
||||
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||
/* We cannot use the thread descriptor because in ld.so we use setjmp
|
||||
earlier than the descriptor is initialized. */
|
||||
# define PTR_MANGLE(reg) xorq __pointer_chk_guard_local(%rip), reg
|
||||
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
|
||||
#else
|
||||
# define PTR_MANGLE(reg) xorq %fs:POINTER_GUARD, reg
|
||||
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
|
||||
#endif
|
||||
|
||||
#endif /* linux/x86_64/sysdep.h */
|
||||
|
Reference in New Issue
Block a user