mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-30 12:31:53 +08:00
Preserve bound registers in _dl_runtime_resolve
We need to add a BND prefix before indirect branch at the end of _dl_runtime_resolve to preserve bound registers. [BZ #18134] * sysdeps/x86_64/dl-trampoline.S (PRESERVE_BND_REGS_PREFIX): New. (_dl_runtime_resolve): Add a BND prefix before indirect branch.
This commit is contained in:
parent
cb21929049
commit
b97eb2bdb1
@ -1,3 +1,8 @@
|
||||
2015-03-16 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #18134]
|
||||
* sysdeps/x86_64/dl-trampoline.S (PRESERVE_BND_REGS_PREFIX): New.
|
||||
|
||||
2015-03-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* stdlib/setenv.c (__add_to_environ): Revert previous change.
|
||||
|
@ -30,6 +30,7 @@
|
||||
/* X32 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX. */
|
||||
# define REGISTER_SAVE_AREA (8 * 7)
|
||||
# define REGISTER_SAVE_RAX 0
|
||||
# define PRESERVE_BND_REGS_PREFIX
|
||||
#else
|
||||
/* X86-64 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as BND0,
|
||||
BND1, BND2, BND3. */
|
||||
@ -40,6 +41,11 @@
|
||||
# define REGISTER_SAVE_BND2 (REGISTER_SAVE_BND1 + 16)
|
||||
# define REGISTER_SAVE_BND3 (REGISTER_SAVE_BND2 + 16)
|
||||
# define REGISTER_SAVE_RAX (REGISTER_SAVE_BND3 + 16)
|
||||
# ifdef HAVE_MPX_SUPPORT
|
||||
# define PRESERVE_BND_REGS_PREFIX bnd
|
||||
# else
|
||||
# define PRESERVE_BND_REGS_PREFIX .byte 0xf2
|
||||
# endif
|
||||
#endif
|
||||
#define REGISTER_SAVE_RCX (REGISTER_SAVE_RAX + 8)
|
||||
#define REGISTER_SAVE_RDX (REGISTER_SAVE_RCX + 8)
|
||||
@ -112,6 +118,8 @@ _dl_runtime_resolve:
|
||||
# Adjust stack(PLT did 2 pushes)
|
||||
addq $(REGISTER_SAVE_AREA + 16), %rsp
|
||||
cfi_adjust_cfa_offset(-(REGISTER_SAVE_AREA + 16))
|
||||
# Preserve bound registers.
|
||||
PRESERVE_BND_REGS_PREFIX
|
||||
jmp *%r11 # Jump to function address.
|
||||
cfi_endproc
|
||||
.size _dl_runtime_resolve, .-_dl_runtime_resolve
|
||||
|
Loading…
Reference in New Issue
Block a user