1
0
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:
Ulrich Drepper
2005-12-18 06:58:22 +00:00
parent 8292f6fc71
commit 827b70873b
20 changed files with 160 additions and 162 deletions

View File

@ -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 */

View File

@ -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 */