From 2eb9ef29b698bb7706833236b4b9041f0c23ceef Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 9 Jul 2015 09:30:09 -0700 Subject: [PATCH] Improve bndmov encoding with zero displacement If x86-64 assembler doesn't support MPX, we encode bndmov instruction by hand. When displacement is zero, assembler generates shorter encoding. This patch improves bndmov encoding with zero displacement so that ld.so is identical when using assemblers with and without MPX support. * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve): Improve bndmov encoding with zero displacement. --- ChangeLog | 5 +++++ sysdeps/x86_64/dl-trampoline.S | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index f8765bb6b7..c48416b0e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-07-09 H.J. Lu + + * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve): Improve + bndmov encoding with zero displacement. + 2015-07-09 Igor Zamyatin H.J. Lu diff --git a/sysdeps/x86_64/dl-trampoline.S b/sysdeps/x86_64/dl-trampoline.S index b151d3566d..678c57fc24 100644 --- a/sysdeps/x86_64/dl-trampoline.S +++ b/sysdeps/x86_64/dl-trampoline.S @@ -80,7 +80,11 @@ _dl_runtime_resolve: bndmov %bnd2, REGISTER_SAVE_BND2(%rsp) bndmov %bnd3, REGISTER_SAVE_BND3(%rsp) # else +# if REGISTER_SAVE_BND0 == 0 + .byte 0x66,0x0f,0x1b,0x04,0x24 +# else .byte 0x66,0x0f,0x1b,0x44,0x24,REGISTER_SAVE_BND0 +# endif .byte 0x66,0x0f,0x1b,0x4c,0x24,REGISTER_SAVE_BND1 .byte 0x66,0x0f,0x1b,0x54,0x24,REGISTER_SAVE_BND2 .byte 0x66,0x0f,0x1b,0x5c,0x24,REGISTER_SAVE_BND3 @@ -104,7 +108,11 @@ _dl_runtime_resolve: .byte 0x66,0x0f,0x1a,0x5c,0x24,REGISTER_SAVE_BND3 .byte 0x66,0x0f,0x1a,0x54,0x24,REGISTER_SAVE_BND2 .byte 0x66,0x0f,0x1a,0x4c,0x24,REGISTER_SAVE_BND1 +# if REGISTER_SAVE_BND0 == 0 + .byte 0x66,0x0f,0x1a,0x04,0x24 +# else .byte 0x66,0x0f,0x1a,0x44,0x24,REGISTER_SAVE_BND0 +# endif # endif #endif # Get register content back.