x86-64: Remove BND from 64-bit IBT PLT
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 6 Dec 2022 19:35:42 +0000 (11:35 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 8 Dec 2022 16:05:45 +0000 (08:05 -0800)
Since MPX support has been removed from x86-64 psABI, remove BND from
64-bit IBT PLT by using x32 IBT PLT.

bfd/

PR ld/29851
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Also check
x32 IBT PLT for 64-bit.
(elf_x86_64_link_setup_gnu_properties): Always use x32 IBT PLT.

ld/

PR ld/29851
* testsuite/ld-x86-64/ibt-plt-1.d: Updated.
* testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2d.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3d.d: Likewise.
* testsuite/ld-x86-64/plt-main-ibt-x32.dd: Moved to ...
* testsuite/ld-x86-64/plt-main-ibt.dd: This.
* testsuite/ld-x86-64/x86-64.exp: Don't use plt-main-ibt-x32.dd.

13 files changed:
bfd/elf64-x86-64.c
ld/testsuite/ld-x86-64/ibt-plt-1.d
ld/testsuite/ld-x86-64/ibt-plt-2a.d
ld/testsuite/ld-x86-64/ibt-plt-2b.d
ld/testsuite/ld-x86-64/ibt-plt-2c.d
ld/testsuite/ld-x86-64/ibt-plt-2d.d
ld/testsuite/ld-x86-64/ibt-plt-3a.d
ld/testsuite/ld-x86-64/ibt-plt-3b.d
ld/testsuite/ld-x86-64/ibt-plt-3c.d
ld/testsuite/ld-x86-64/ibt-plt-3d.d
ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd [deleted file]
ld/testsuite/ld-x86-64/plt-main-ibt.dd
ld/testsuite/ld-x86-64/x86-64.exp

index fb872793d5f806389c31e2fac5d7596348e60668..2a5f5a5faae9db6ed94146f9c255edc9d8113a94 100644 (file)
@@ -4926,6 +4926,8 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
   const struct elf_x86_non_lazy_plt_layout *non_lazy_bnd_plt;
   const struct elf_x86_lazy_plt_layout *lazy_ibt_plt;
   const struct elf_x86_non_lazy_plt_layout *non_lazy_ibt_plt;
+  const struct elf_x86_lazy_plt_layout *x32_lazy_ibt_plt;
+  const struct elf_x86_non_lazy_plt_layout *x32_non_lazy_ibt_plt;
   asection *plt;
   enum elf_x86_plt_type plt_type;
   struct elf_x86_plt plts[] =
@@ -4957,11 +4959,15 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
     {
       lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt;
       non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt;
+      x32_lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
+      x32_non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
     }
   else
     {
       lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
       non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
+      x32_lazy_ibt_plt = NULL;
+      x32_non_lazy_ibt_plt = NULL;
     }
 
   count = 0;
@@ -4987,7 +4993,21 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
                       lazy_plt->plt0_got1_offset) == 0)
              && (memcmp (plt_contents + 6, lazy_plt->plt0_entry + 6,
                          2) == 0))
-           plt_type = plt_lazy;
+           {
+             if (x32_lazy_ibt_plt != NULL
+                 && (memcmp (plt_contents
+                             + x32_lazy_ibt_plt->plt_entry_size,
+                             x32_lazy_ibt_plt->plt_entry,
+                             x32_lazy_ibt_plt->plt_got_offset) == 0))
+               {
+                 /* The fist entry in the x32 lazy IBT PLT is the same
+                    as the lazy PLT.  */
+                 plt_type = plt_lazy | plt_second;
+                 lazy_plt = x32_lazy_ibt_plt;
+               }
+             else
+               plt_type = plt_lazy;
+           }
          else if (lazy_bnd_plt != NULL
                   && (memcmp (plt_contents, lazy_bnd_plt->plt0_entry,
                               lazy_bnd_plt->plt0_got1_offset) == 0)
@@ -5037,6 +5057,16 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
              plt_type = plt_second;
              non_lazy_plt = non_lazy_ibt_plt;
            }
+         else if (x32_non_lazy_ibt_plt != NULL
+                  && plt->size >= x32_non_lazy_ibt_plt->plt_entry_size
+                  && (memcmp (plt_contents,
+                              x32_non_lazy_ibt_plt->plt_entry,
+                              x32_non_lazy_ibt_plt->plt_got_offset) == 0))
+           {
+             /* Match x32 IBT PLT.  */
+             plt_type = plt_second;
+             non_lazy_plt = x32_non_lazy_ibt_plt;
+           }
        }
 
       if (plt_type == plt_unknown)
@@ -5298,16 +5328,8 @@ elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info)
       init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt;
     }
 
-  if (ABI_64_P (info->output_bfd))
-    {
-      init_table.lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt;
-      init_table.non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt;
-    }
-  else
-    {
-      init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
-      init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
-    }
+  init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
+  init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
 
   if (ABI_64_P (info->output_bfd))
     {
index b8b968df321cda51552f1bc5515b3deda05a6dad..283dbf3903658710fe2b5f79513474444a470d07 100644 (file)
@@ -10,28 +10,28 @@ Disassembly of section .plt:
 
 [a-f0-9]+ <.plt>:
  +[a-f0-9]+:   ff 35 ([0-9a-f]{2} ){4}[        ]+push   0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 00 00 00 00          push   \$0x0
- +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 e2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 01 00 00 00          push   \$0x1
- +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 d2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
 [a-f0-9]+ <bar1@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 [a-f0-9]+ <bar2@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
index 3db74c3628819bb468a6677ee527ff448238add1..6f8ec7e0b1f88d093058488a8d68c7900f28371a 100644 (file)
@@ -10,28 +10,28 @@ Disassembly of section .plt:
 
 0+1f0 <.plt>:
  +[a-f0-9]+:   ff 35 ca 01 20 00       push   0x2001ca\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:   f2 ff 25 cb 01 20 00    bnd jmp \*0x2001cb\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
+ +[a-f0-9]+:   ff 25 cc 01 20 00       jmp    \*0x2001cc\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 00 00 00 00          push   \$0x0
- +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmp 1f0 <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 e2 ff ff ff          jmp    1f0 <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 01 00 00 00          push   \$0x1
- +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmp 1f0 <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 d2 ff ff ff          jmp    1f0 <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
 0+220 <bar1@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 a5 01 20 00    bnd jmp \*0x2001a5\(%rip\)        # 2003d0 <bar1>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 a6 01 20 00       jmp    \*0x2001a6\(%rip\)        # 2003d0 <bar1>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 0+230 <bar2@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 9d 01 20 00    bnd jmp \*0x20019d\(%rip\)        # 2003d8 <bar2>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 9e 01 20 00       jmp    \*0x20019e\(%rip\)        # 2003d8 <bar2>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
index 2bb59d0d8365c0908cd4de0af5cfb0555b3585d8..e322ce395f1256c6c8cb9c4b38de85a150476873 100644 (file)
@@ -30,7 +30,7 @@ Contents of the .eh_frame section:
   DW_CFA_advance_loc: 6 to 00000000000001f6
   DW_CFA_def_cfa_offset: 24
   DW_CFA_advance_loc: 10 to 0000000000000200
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
+  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
index dd47bc7f27ad0f864f0045a5ac89b793c32ad4df..74184aed3663abfa0eb39685b65de1089d491d49 100644 (file)
@@ -10,28 +10,28 @@ Disassembly of section .plt:
 
 [a-f0-9]+ <.plt>:
  +[a-f0-9]+:   ff 35 ([0-9a-f]{2} ){4}[        ]+push   0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 00 00 00 00          push   \$0x0
- +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 e2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 01 00 00 00          push   \$0x1
- +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 d2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
 [a-f0-9]+ <bar1@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 [a-f0-9]+ <bar2@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
index 9bfc415821da20eb392dc610217e0e10861f53ed..b456bd3d706522ceea49c46bd9504e8c370af314 100644 (file)
@@ -30,7 +30,7 @@ Contents of the .eh_frame section:
   DW_CFA_advance_loc: 6 to [a-f0-9]+
   DW_CFA_def_cfa_offset: 24
   DW_CFA_advance_loc: 10 to [a-f0-9]+
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
+  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
index a7e048c04ed7ab34082bf1712551e60e112a21ff..a0ef8b11597195f66cfde2d43500953b5f653148 100644 (file)
@@ -10,28 +10,28 @@ Disassembly of section .plt:
 
 0+1f0 <.plt>:
  +[a-f0-9]+:   ff 35 ca 01 20 00       push   0x2001ca\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:   f2 ff 25 cb 01 20 00    bnd jmp \*0x2001cb\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
+ +[a-f0-9]+:   ff 25 cc 01 20 00       jmp    \*0x2001cc\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 00 00 00 00          push   \$0x0
- +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmp 1f0 <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 e2 ff ff ff          jmp    1f0 <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 01 00 00 00          push   \$0x1
- +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmp 1f0 <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 d2 ff ff ff          jmp    1f0 <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
 0+220 <bar1@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 a5 01 20 00    bnd jmp \*0x2001a5\(%rip\)        # 2003d0 <bar1>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 a6 01 20 00       jmp    \*0x2001a6\(%rip\)        # 2003d0 <bar1>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 0+230 <bar2@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 9d 01 20 00    bnd jmp \*0x20019d\(%rip\)        # 2003d8 <bar2>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 9e 01 20 00       jmp    \*0x20019e\(%rip\)        # 2003d8 <bar2>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
index a99865738713467dcd812ea235d4be011eda1712..0e2c3eaa38ad8234d799fcc78b40d4c0ca1d5abc 100644 (file)
@@ -30,7 +30,7 @@ Contents of the .eh_frame section:
   DW_CFA_advance_loc: 6 to 00000000000001f6
   DW_CFA_def_cfa_offset: 24
   DW_CFA_advance_loc: 10 to 0000000000000200
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
+  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
index dac290e20cdc93b68979aa3d40b61afbe43b5540..8be6783efcb382050c0c8ab058dc24ffc07c8ffd 100644 (file)
@@ -10,28 +10,28 @@ Disassembly of section .plt:
 
 [a-f0-9]+ <.plt>:
  +[a-f0-9]+:   ff 35 ([0-9a-f]{2} ){4}[        ]+push   0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10>
+ +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 00 00 00 00          push   \$0x0
- +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 e2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
  +[a-f0-9]+:   68 01 00 00 00          push   \$0x1
- +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmp [a-f0-9]+ <.*>
- +[a-f0-9]+:   90                      nop
+ +[a-f0-9]+:   e9 d2 ff ff ff          jmp    [a-f0-9]+ <.*>
+ +[a-f0-9]+:   66 90                   xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
 [a-f0-9]+ <bar1@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar1>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 [a-f0-9]+ <bar2@plt>:
  +[a-f0-9]+:   f3 0f 1e fa             endbr64
- +[a-f0-9]+:   f2 ff 25 ([0-9a-f]{2} ){4}[     ]+bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
- +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)
+ +[a-f0-9]+:   ff 25 ([0-9a-f]{2} ){4}[        ]+jmp    \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <bar2>
+ +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
index 5a4a38c709b7556c79919cadbc91716ca4ac9f6c..30d90209b04236048ccaec072d7996b4f934a2a7 100644 (file)
@@ -30,7 +30,7 @@ Contents of the .eh_frame section:
   DW_CFA_advance_loc: 6 to [a-f0-9]+
   DW_CFA_def_cfa_offset: 24
   DW_CFA_advance_loc: 10 to [a-f0-9]+
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
+  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
diff --git a/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd b/ld/testsuite/ld-x86-64/plt-main-ibt-x32.dd
deleted file mode 100644 (file)
index 4c417df..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#...
-Disassembly of section .plt.got:
-
-[a-f0-9]+ <[_a-z]+@plt>:
-[      ]*[a-f0-9]+:    f3 0f 1e fa             endbr64
-[      ]*[a-f0-9]+:    ff 25 .. .. 3f 00       jmp +\*0x3f....\(%rip\)        # ...... <.*>
-#pass
index 035dd877bf326da3adb8bf8920d6d5f72b814cc1..4c417df12ad42d6eedc4c431043e6ad6de6bded4 100644 (file)
@@ -3,5 +3,5 @@ Disassembly of section .plt.got:
 
 [a-f0-9]+ <[_a-z]+@plt>:
 [      ]*[a-f0-9]+:    f3 0f 1e fa             endbr64
-[      ]*[a-f0-9]+:    f2 ff 25 .. .. 3f 00    bnd jmp \*0x3f....\(%rip\)        # ...... <.*>
+[      ]*[a-f0-9]+:    ff 25 .. .. 3f 00       jmp +\*0x3f....\(%rip\)        # ...... <.*>
 #pass
index 136371bd5a22f0b4fa81d5dd2bb61f1548b2c548..e30f210bf133010936b40306bb810b307ff0a67a 100644 (file)
@@ -2127,13 +2127,8 @@ if { [isnative] && [check_compiler_available] } {
     }
 
     if { [istarget "x86_64-*-linux*"] } {
-       if { [istarget "x86_64-*-linux*-gnux32"] } {
-           set pltdump {{objdump {-drw} plt-main-ibt-x32.dd}}
-           set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt-x32.dd}}
-       } else {
-           set pltdump {{objdump {-drw} plt-main-ibt.dd}}
-           set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt.dd}}
-       }
+       set pltdump {{objdump {-drw} plt-main-ibt.dd}}
+       set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt.dd}}
        run_cc_link_tests [list \
            [list \
                "Build plt-main with -z ibtplt" \