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>
|
2015-03-15 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
* stdlib/setenv.c (__add_to_environ): Revert previous change.
|
* stdlib/setenv.c (__add_to_environ): Revert previous change.
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
/* X32 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX. */
|
/* X32 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX. */
|
||||||
# define REGISTER_SAVE_AREA (8 * 7)
|
# define REGISTER_SAVE_AREA (8 * 7)
|
||||||
# define REGISTER_SAVE_RAX 0
|
# define REGISTER_SAVE_RAX 0
|
||||||
|
# define PRESERVE_BND_REGS_PREFIX
|
||||||
#else
|
#else
|
||||||
/* X86-64 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as BND0,
|
/* X86-64 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as BND0,
|
||||||
BND1, BND2, BND3. */
|
BND1, BND2, BND3. */
|
||||||
|
@ -40,6 +41,11 @@
|
||||||
# define REGISTER_SAVE_BND2 (REGISTER_SAVE_BND1 + 16)
|
# define REGISTER_SAVE_BND2 (REGISTER_SAVE_BND1 + 16)
|
||||||
# define REGISTER_SAVE_BND3 (REGISTER_SAVE_BND2 + 16)
|
# define REGISTER_SAVE_BND3 (REGISTER_SAVE_BND2 + 16)
|
||||||
# define REGISTER_SAVE_RAX (REGISTER_SAVE_BND3 + 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
|
#endif
|
||||||
#define REGISTER_SAVE_RCX (REGISTER_SAVE_RAX + 8)
|
#define REGISTER_SAVE_RCX (REGISTER_SAVE_RAX + 8)
|
||||||
#define REGISTER_SAVE_RDX (REGISTER_SAVE_RCX + 8)
|
#define REGISTER_SAVE_RDX (REGISTER_SAVE_RCX + 8)
|
||||||
|
@ -112,6 +118,8 @@ _dl_runtime_resolve:
|
||||||
# Adjust stack(PLT did 2 pushes)
|
# Adjust stack(PLT did 2 pushes)
|
||||||
addq $(REGISTER_SAVE_AREA + 16), %rsp
|
addq $(REGISTER_SAVE_AREA + 16), %rsp
|
||||||
cfi_adjust_cfa_offset(-(REGISTER_SAVE_AREA + 16))
|
cfi_adjust_cfa_offset(-(REGISTER_SAVE_AREA + 16))
|
||||||
|
# Preserve bound registers.
|
||||||
|
PRESERVE_BND_REGS_PREFIX
|
||||||
jmp *%r11 # Jump to function address.
|
jmp *%r11 # Jump to function address.
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_runtime_resolve, .-_dl_runtime_resolve
|
.size _dl_runtime_resolve, .-_dl_runtime_resolve
|
||||||
|
|
Loading…
Reference in New Issue