public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT
@ 2022-12-06 21:44 H.J. Lu
  2022-12-08  8:21 ` [PATCH] ld, gold: remove support for -z bndplt (MPX prefix) Martin Liška
  2022-12-08 16:12 ` [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
  0 siblings, 2 replies; 8+ messages in thread
From: H.J. Lu @ 2022-12-06 21:44 UTC (permalink / raw)
  To: binutils

Since MPX support has been removed from x86-64 psABI, remove BND from
64-bit IBT PLT by using 32-bit IBT PLT.

	PR gold/29851
	* x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry):
	Renamed to ...
	(Output_data_plt_x86_64_ibt<size>::first_plt_entry): This.
	(Output_data_plt_x86_64_ibt<64>::first_plt_entry): Removed.
	(Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry):
	Drop the size == 32 check.
	(Output_data_plt_x86_64_ibt<32>::plt_entry): Renamed to ...
	(Output_data_plt_x86_64_ibt<size>::plt_entry): This.
	(Output_data_plt_x86_64_ibt<64>::plt_entry): Removed.
	(Output_data_plt_x86_64_ibt<32>::aplt_entry): Renamed to ...
	(Output_data_plt_x86_64_ibt<size>::aplt_entry): This.
	(Output_data_plt_x86_64_ibt<64>::aplt_entry): Removed.
	(Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry): Drop the
	size == 32 check.
	(Output_data_plt_x86_64_ibt<size>::fill_aplt_entry): Likewise.
---
 gold/x86_64.cc | 57 ++++++++------------------------------------------
 1 file changed, 9 insertions(+), 48 deletions(-)

diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index 86b232a5e2d..83684b90fcf 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -2328,12 +2328,10 @@ Output_data_plt_x86_64_ibt<size>::set_final_data_size()
 
 // The first entry in the IBT PLT.
 
-template<>
+template<int size>
 const unsigned char
-Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
+Output_data_plt_x86_64_ibt<size>::first_plt_entry[plt_entry_size] =
 {
-  // MPX isn't supported for x32, so we don't need the BND prefix.
-  // From AMD64 ABI Draft 0.98, page 76
   0xff, 0x35,		 // pushq contents of memory address
   0, 0, 0, 0,		 // replaced with address of .got + 8
   0xff, 0x25,		 // jmp indirect
@@ -2341,18 +2339,6 @@ Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
   0x90, 0x90, 0x90, 0x90 // noop (x4)
 };
 
-template<>
-const unsigned char
-Output_data_plt_x86_64_ibt<64>::first_plt_entry[plt_entry_size] =
-{
-  // Use the BND prefix so that IBT is compatible with MPX.
-  0xff, 0x35,		// pushq contents of memory address
-  0, 0, 0, 0,		// replaced with address of .got + 8
-  0xf2, 0xff, 0x25,	// bnd jmp indirect
-  0, 0, 0, 0,		// replaced with address of .got + 16
-  0x0f, 0x1f, 0x00   	// nop
-};
-
 template<int size>
 void
 Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
@@ -2362,7 +2348,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
 {
   // Offsets to the addresses needing relocation.
   const unsigned int roff1 = 2;
-  const unsigned int roff2 = (size == 32) ? 8 : 9;
+  const unsigned int roff2 = 8;
 
   memcpy(pov, first_plt_entry, plt_entry_size);
   // We do a jmp relative to the PC at the end of this instruction.
@@ -2376,9 +2362,9 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
 
 // Subsequent entries in the IBT PLT.
 
-template<>
+template<int size>
 const unsigned char
-Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
+Output_data_plt_x86_64_ibt<size>::plt_entry[plt_entry_size] =
 {
   // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
   0xf3, 0x0f, 0x1e, 0xfa,	// endbr64
@@ -2389,24 +2375,11 @@ Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
   0x90, 0x90			// nop
 };
 
-template<>
-const unsigned char
-Output_data_plt_x86_64_ibt<64>::plt_entry[plt_entry_size] =
-{
-  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
-  0xf3, 0x0f, 0x1e, 0xfa,	// endbr64
-  0x68,				// pushq immediate
-  0, 0, 0, 0,			// replaced with offset into relocation table
-  0xf2, 0xe9,			// bnd jmpq relative
-  0, 0, 0, 0,			// replaced with offset to start of .plt
-  0x90				// nop
-};
-
 // Entries in the IBT Additional PLT.
 
-template<>
+template<int size>
 const unsigned char
-Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
+Output_data_plt_x86_64_ibt<size>::aplt_entry[aplt_entry_size] =
 {
   // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
   0xf3, 0x0f, 0x1e, 0xfa,	// endbr64
@@ -2416,18 +2389,6 @@ Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
   0x90, 0x90			// nop
 };
 
-template<>
-const unsigned char
-Output_data_plt_x86_64_ibt<64>::aplt_entry[aplt_entry_size] =
-{
-  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
-  0xf3, 0x0f, 0x1e, 0xfa,	// endbr64
-  0xf2, 0xff, 0x25,		// bnd jmpq indirect
-  0, 0, 0, 0,			// replaced with address of symbol in .got
-  0x0f, 0x1f, 0x04, 0x00,	// nop
-  0x90,				// nop
-};
-
 template<int size>
 unsigned int
 Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
@@ -2440,7 +2401,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
 {
   // Offsets to the addresses needing relocation.
   const unsigned int roff1 = 5;
-  const unsigned int roff2 = (size == 32) ? 10 : 11;
+  const unsigned int roff2 = 10;
 
   memcpy(pov, plt_entry, plt_entry_size);
   elfcpp::Swap_unaligned<32, false>::writeval(pov + roff1, plt_index);
@@ -2459,7 +2420,7 @@ Output_data_plt_x86_64_ibt<size>::fill_aplt_entry(
     unsigned int plt_index)
 {
   // Offset to the address needing relocation.
-  const unsigned int roff = (size == 32) ? 6 : 7;
+  const unsigned int roff = 6;
 
   // Check PC-relative offset overflow in PLT entry.
   uint64_t plt_got_pcrel_offset = (got_address + got_offset
-- 
2.38.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] ld, gold: remove support for -z bndplt (MPX prefix)
  2022-12-06 21:44 [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
@ 2022-12-08  8:21 ` Martin Liška
  2022-12-13  0:02   ` Cary Coutant
  2022-12-08 16:12 ` [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
  1 sibling, 1 reply; 8+ messages in thread
From: Martin Liška @ 2022-12-08  8:21 UTC (permalink / raw)
  To: binutils; +Cc: H.J. Lu

Hi.

The patch is based on H.J.'s previous patches and it removes
-z bndplt support (MPX prefix).

Ready to be installed after the pre-requisites?

Thanks,
Martin

---
 bfd/elf-linker-x86.h                      |   3 -
 bfd/elf64-x86-64.c                        |  22 +-
 bfd/elfxx-x86.c                           |  16 +-
 bfd/elfxx-x86.h                           |   2 -
 gold/NEWS                                 |   3 +
 gold/options.h                            |   3 -
 gold/x86_64.cc                            | 436 +---------------------
 ld/NEWS                                   |   2 +
 ld/emulparams/elf_x86_64.sh               |  10 -
 ld/ld.texi                                |   3 -
 ld/testsuite/ld-x86-64/bnd-branch-1-now.d |  45 ---
 ld/testsuite/ld-x86-64/bnd-branch-1.d     |  19 -
 ld/testsuite/ld-x86-64/bnd-branch-1.s     |   9 -
 ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d  |  33 --
 ld/testsuite/ld-x86-64/bnd-ifunc-1.d      |   7 -
 ld/testsuite/ld-x86-64/bnd-ifunc-1.s      |  16 -
 ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d  |  59 ---
 ld/testsuite/ld-x86-64/bnd-ifunc-2.d      |  54 ---
 ld/testsuite/ld-x86-64/bnd-ifunc-2.s      |  28 --
 ld/testsuite/ld-x86-64/bnd-plt-1-now.d    |  55 ---
 ld/testsuite/ld-x86-64/bnd-plt-1.d        |  55 ---
 ld/testsuite/ld-x86-64/mpx.exp            | 138 -------
 ld/testsuite/ld-x86-64/mpx1.out           |   2 -
 ld/testsuite/ld-x86-64/mpx1a.c            |   7 -
 ld/testsuite/ld-x86-64/mpx1a.rd           |   3 -
 ld/testsuite/ld-x86-64/mpx1b.c            |   7 -
 ld/testsuite/ld-x86-64/mpx1c.c            |  10 -
 ld/testsuite/ld-x86-64/mpx1c.rd           |   3 -
 ld/testsuite/ld-x86-64/mpx2.out           |   2 -
 ld/testsuite/ld-x86-64/mpx2a.c            |   7 -
 ld/testsuite/ld-x86-64/mpx2a.rd           |   3 -
 ld/testsuite/ld-x86-64/mpx2b.c            |   7 -
 ld/testsuite/ld-x86-64/mpx2c.c            |  10 -
 ld/testsuite/ld-x86-64/mpx2c.rd           |   3 -
 ld/testsuite/ld-x86-64/mpx3.dd            |  28 --
 ld/testsuite/ld-x86-64/mpx3a.s            |  16 -
 ld/testsuite/ld-x86-64/mpx3b.s            |  11 -
 ld/testsuite/ld-x86-64/mpx3n.dd           |  28 --
 ld/testsuite/ld-x86-64/mpx4.dd            |  24 --
 ld/testsuite/ld-x86-64/mpx4a.s            |   6 -
 ld/testsuite/ld-x86-64/mpx4b.s            |   5 -
 ld/testsuite/ld-x86-64/mpx4n.dd           |  25 --
 ld/testsuite/ld-x86-64/pr20800a.S         |  18 -
 ld/testsuite/ld-x86-64/pr20800b.S         |  21 --
 ld/testsuite/ld-x86-64/pr21038a-now.d     |  68 ----
 ld/testsuite/ld-x86-64/pr21038a.d         |  67 ----
 ld/testsuite/ld-x86-64/pr21038a.s         |   8 -
 ld/testsuite/ld-x86-64/pr21038b-now.d     |  70 ----
 ld/testsuite/ld-x86-64/pr21038b.d         |  69 ----
 ld/testsuite/ld-x86-64/pr21038b.s         |   7 -
 ld/testsuite/ld-x86-64/pr21038c-now.d     |  87 -----
 ld/testsuite/ld-x86-64/pr21038c.d         |  86 -----
 ld/testsuite/ld-x86-64/pr21038c.s         |   9 -
 ld/testsuite/ld-x86-64/x86-64.exp         | 130 -------
 54 files changed, 12 insertions(+), 1853 deletions(-)
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-branch-1-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-branch-1.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-branch-1.s
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-1.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-1.s
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-2.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-ifunc-2.s
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-plt-1-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/bnd-plt-1.d
 delete mode 100644 ld/testsuite/ld-x86-64/mpx.exp
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1.out
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1a.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1a.rd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1b.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1c.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx1c.rd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2.out
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2a.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2a.rd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2b.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2c.c
 delete mode 100644 ld/testsuite/ld-x86-64/mpx2c.rd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx3.dd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx3a.s
 delete mode 100644 ld/testsuite/ld-x86-64/mpx3b.s
 delete mode 100644 ld/testsuite/ld-x86-64/mpx3n.dd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx4.dd
 delete mode 100644 ld/testsuite/ld-x86-64/mpx4a.s
 delete mode 100644 ld/testsuite/ld-x86-64/mpx4b.s
 delete mode 100644 ld/testsuite/ld-x86-64/mpx4n.dd
 delete mode 100644 ld/testsuite/ld-x86-64/pr20800a.S
 delete mode 100644 ld/testsuite/ld-x86-64/pr20800b.S
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038a-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038a.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038a.s
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038b-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038b.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038b.s
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038c-now.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038c.d
 delete mode 100644 ld/testsuite/ld-x86-64/pr21038c.s

diff --git a/bfd/elf-linker-x86.h b/bfd/elf-linker-x86.h
index 19462e0b838..0badcf8ff66 100644
--- a/bfd/elf-linker-x86.h
+++ b/bfd/elf-linker-x86.h
@@ -31,9 +31,6 @@ enum elf_x86_prop_report
 /* Used to pass x86-specific linker options from ld to bfd.  */
 struct elf_linker_x86_params
 {
-  /* TRUE if BND prefix in PLT entries is always generated.  */
-  unsigned int bndplt: 1;
-
   /* TRUE if IBT-enabled PLT entries should be generated.  */
   unsigned int ibtplt: 1;
 
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 2a5f5a5faae..afc8c76c52b 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2197,7 +2197,6 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
 	  break;
 
 	case R_X86_64_PLT32:
-	case R_X86_64_PLT32_BND:
 	  /* This symbol requires a procedure linkage table entry.  We
 	     actually build the entry in adjust_dynamic_symbol,
 	     because this might be a case of linking PIC code which is
@@ -2256,7 +2255,6 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_X86_64_PC8:
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
-	case R_X86_64_PC32_BND:
 	case R_X86_64_PC64:
 	case R_X86_64_64:
 	pointer:
@@ -2289,8 +2287,7 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
 			}
 		    }
 		}
-	      else if (r_type != R_X86_64_PC32_BND
-		       && r_type != R_X86_64_PC64)
+	      else if (r_type != R_X86_64_PC64)
 		{
 		  /* At run-time, R_X86_64_64 can be resolved for both
 		     x86-64 and x32. But R_X86_64_32 and R_X86_64_32S
@@ -2905,10 +2902,8 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		}
 	      /* FALLTHROUGH */
 	    case R_X86_64_PC32:
-	    case R_X86_64_PC32_BND:
 	    case R_X86_64_PC64:
 	    case R_X86_64_PLT32:
-	    case R_X86_64_PLT32_BND:
 	      goto do_relocation;
 	    }
 	}
@@ -3172,7 +3167,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	  break;
 
 	case R_X86_64_PLT32:
-	case R_X86_64_PLT32_BND:
 	  /* Relocation is to the entry for this symbol in the
 	     procedure linkage table.  */
 
@@ -3227,7 +3221,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	case R_X86_64_PC8:
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
-	case R_X86_64_PC32_BND:
 	  /* Don't complain about -fPIC if the symbol is undefined when
 	     building executable unless it is unresolved weak symbol,
 	     references a dynamic definition in PIE or -z nocopyreloc
@@ -5317,16 +5310,9 @@ elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info)
   htab = elf_x86_hash_table (info, bed->target_id);
   if (!htab)
     abort ();
-  if (htab->params->bndplt)
-    {
-      init_table.lazy_plt = &elf_x86_64_lazy_bnd_plt;
-      init_table.non_lazy_plt = &elf_x86_64_non_lazy_bnd_plt;
-    }
-  else
-    {
-      init_table.lazy_plt = &elf_x86_64_lazy_plt;
-      init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt;
-    }
+
+  init_table.lazy_plt = &elf_x86_64_lazy_plt;
+  init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt;
 
   init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt;
   init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt;
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index bbf868826e5..78e49100092 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -4415,20 +4415,6 @@ _bfd_x86_elf_link_setup_gnu_properties
 		  if (!bfd_set_section_alignment (sec, plt_alignment))
 		    goto error_alignment;
 		}
-	      else if (htab->params->bndplt && ABI_64_P (dynobj))
-		{
-		  /* Create the second PLT for Intel MPX support.  MPX
-		     PLT is supported only in 64-bit mode and is needed
-		     only for lazy binding.  */
-		  sec = bfd_make_section_anyway_with_flags (dynobj,
-							    ".plt.sec",
-							    pltflags);
-		  if (sec == NULL)
-		    info->callbacks->einfo (_("%F%P: failed to create BND PLT section\n"));
-
-		  if (!bfd_set_section_alignment (sec, non_lazy_plt_alignment))
-		    goto error_alignment;
-		}
 
 	      htab->plt_second = sec;
 	    }
@@ -4499,7 +4485,7 @@ _bfd_x86_elf_link_setup_gnu_properties
 
 	  htab->plt_sframe = sec;
 
-	  /* Second PLT is generated for Intel IBT / MPX Support + lazy plt.  */
+	  /* Second PLT is generated for Intel IBT + lazy plt.  */
 	  if (htab->plt_second != NULL)
 	    {
 	      sec = bfd_make_section_anyway_with_flags (dynobj,
diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h
index 83f417acb0c..18ecd038f96 100644
--- a/bfd/elfxx-x86.h
+++ b/bfd/elfxx-x86.h
@@ -36,7 +36,6 @@
   ((TYPE) == R_X86_64_PC8 \
    || (TYPE) == R_X86_64_PC16 \
    || (TYPE) == R_X86_64_PC32 \
-   || (TYPE) == R_X86_64_PC32_BND \
    || (TYPE) == R_X86_64_PC64)
 #define I386_PCREL_TYPE_P(TYPE) ((TYPE) == R_386_PC32)
 #define X86_PCREL_TYPE_P(IS_X86_64, TYPE) \
@@ -103,7 +102,6 @@
   ((TYPE) == R_X86_64_PC8 \
    || (TYPE) == R_X86_64_PC16 \
    || (TYPE) == R_X86_64_PC32 \
-   || (TYPE) == R_X86_64_PC32_BND \
    || (TYPE) == R_X86_64_PC64)
 
 /* This must be the same as sframe_get_hdr_size (sfh).  For x86-64, this value
diff --git a/gold/NEWS b/gold/NEWS
index edc0015abbd..cf451c1f21d 100644
--- a/gold/NEWS
+++ b/gold/NEWS
@@ -1,7 +1,10 @@
 * gold and dwp now support zstd compressed debug sections.
+
 * The new option --compress-debug-sections=zstd compresses debug sections with
   zstd.
 
+* Remove support for -z bndplt (MPX prefix instructions).
+
 Changes in 1.16:
 
 * Improve warning messages for relocations that refer to discarded sections.
diff --git a/gold/options.h b/gold/options.h
index 7d619734ab8..0f1fc963d58 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -1460,9 +1460,6 @@ class General_options
 
   // The -z options.
 
-  DEFINE_bool(bndplt, options::DASH_Z, '\0', false,
-	      N_("(x86-64 only) Generate a BND PLT for Intel MPX"),
-	      N_("Generate a regular PLT"));
   DEFINE_bool(combreloc, options::DASH_Z, '\0', true,
 	      N_("Sort dynamic relocs"),
 	      N_("Do not sort dynamic relocs"));
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index 83684b90fcf..0c04b9ba5bb 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -430,118 +430,6 @@ class Output_data_plt_x86_64_standard : public Output_data_plt_x86_64<size>
   static const unsigned char plt_eh_frame_fde[plt_eh_frame_fde_size];
 };
 
-class Output_data_plt_x86_64_bnd : public Output_data_plt_x86_64<64>
-{
- public:
-  Output_data_plt_x86_64_bnd(Layout* layout,
-			     Output_data_got<64, false>* got,
-			     Output_data_got_plt_x86_64* got_plt,
-			     Output_data_space* got_irelative)
-    : Output_data_plt_x86_64<64>(layout, plt_entry_size,
-				 got, got_plt, got_irelative),
-      aplt_offset_(0)
-  { }
-
-  Output_data_plt_x86_64_bnd(Layout* layout,
-			     Output_data_got<64, false>* got,
-			     Output_data_got_plt_x86_64* got_plt,
-			     Output_data_space* got_irelative,
-			     unsigned int plt_count)
-    : Output_data_plt_x86_64<64>(layout, plt_entry_size,
-				 got, got_plt, got_irelative,
-				 plt_count),
-      aplt_offset_(0)
-  { }
-
- protected:
-  virtual unsigned int
-  do_get_plt_entry_size() const
-  { return plt_entry_size; }
-
-  // Return the PLT address to use for a global symbol.
-  uint64_t
-  do_address_for_global(const Symbol*);
-
-  // Return the PLT address to use for a local symbol.
-  uint64_t
-  do_address_for_local(const Relobj*, unsigned int symndx);
-
-  virtual void
-  do_add_eh_frame(Layout* layout)
-  {
-    layout->add_eh_frame_for_plt(this,
-				 this->plt_eh_frame_cie,
-				 this->plt_eh_frame_cie_size,
-				 plt_eh_frame_fde,
-				 plt_eh_frame_fde_size);
-  }
-
-  virtual void
-  do_fill_first_plt_entry(unsigned char* pov,
-			  elfcpp::Elf_types<64>::Elf_Addr got_addr,
-			  elfcpp::Elf_types<64>::Elf_Addr plt_addr);
-
-  virtual unsigned int
-  do_fill_plt_entry(unsigned char* pov,
-		    elfcpp::Elf_types<64>::Elf_Addr got_address,
-		    elfcpp::Elf_types<64>::Elf_Addr plt_address,
-		    unsigned int got_offset,
-		    unsigned int plt_offset,
-		    unsigned int plt_index);
-
-  virtual void
-  do_fill_tlsdesc_entry(unsigned char* pov,
-			elfcpp::Elf_types<64>::Elf_Addr got_address,
-			elfcpp::Elf_types<64>::Elf_Addr plt_address,
-			elfcpp::Elf_types<64>::Elf_Addr got_base,
-			unsigned int tlsdesc_got_offset,
-			unsigned int plt_offset);
-
-  void
-  fill_aplt_entry(unsigned char* pov,
-		  elfcpp::Elf_types<64>::Elf_Addr got_address,
-		  elfcpp::Elf_types<64>::Elf_Addr plt_address,
-		  unsigned int got_offset,
-		  unsigned int plt_offset,
-		  unsigned int plt_index);
-
- private:
-  // Set the final size.
-  void
-  set_final_data_size();
-
-  // Write out the BND PLT data.
-  void
-  do_write(Output_file*);
-
-  // Offset of the Additional PLT (if using -z bndplt).
-  unsigned int aplt_offset_;
-
-  // The size of an entry in the PLT.
-  static const int plt_entry_size = 16;
-
-  // The size of an entry in the additional PLT.
-  static const int aplt_entry_size = 8;
-
-  // The first entry in the PLT.
-  // From the AMD64 ABI: "Unlike Intel386 ABI, this ABI uses the same
-  // procedure linkage table for both programs and shared objects."
-  static const unsigned char first_plt_entry[plt_entry_size];
-
-  // Other entries in the PLT for an executable.
-  static const unsigned char plt_entry[plt_entry_size];
-
-  // Entries in the additional PLT.
-  static const unsigned char aplt_entry[aplt_entry_size];
-
-  // The reserved TLSDESC entry in the PLT for an executable.
-  static const unsigned char tlsdesc_plt_entry[plt_entry_size];
-
-  // The .eh_frame unwind information for the PLT.
-  static const int plt_eh_frame_fde_size = 32;
-  static const unsigned char plt_eh_frame_fde[plt_eh_frame_fde_size];
-};
-
 // We use this PLT when Indirect Branch Tracking (IBT) is enabled.
 
 template <int size>
@@ -625,7 +513,7 @@ class Output_data_plt_x86_64_ibt : public Output_data_plt_x86_64<size>
   void
   set_final_data_size();
 
-  // Write out the BND PLT data.
+  // Write out the PLT data.
   void
   do_write(Output_file*);
 
@@ -2091,183 +1979,6 @@ Output_data_plt_x86_64_standard<size>::do_fill_tlsdesc_entry(
 						  + 12)));
 }
 
-// Return the APLT address to use for a global symbol (for -z bndplt).
-
-uint64_t
-Output_data_plt_x86_64_bnd::do_address_for_global(const Symbol* gsym)
-{
-  uint64_t offset = this->aplt_offset_;
-  // Convert the PLT offset into an APLT offset.
-  unsigned int plt_offset = gsym->plt_offset();
-  if (gsym->type() == elfcpp::STT_GNU_IFUNC
-      && gsym->can_use_relative_reloc(false))
-    offset += this->regular_count() * aplt_entry_size;
-  else
-    plt_offset -= plt_entry_size;
-  plt_offset = plt_offset / (plt_entry_size / aplt_entry_size);
-  return this->address() + offset + plt_offset;
-}
-
-// Return the PLT address to use for a local symbol.  These are always
-// IRELATIVE relocs.
-
-uint64_t
-Output_data_plt_x86_64_bnd::do_address_for_local(const Relobj* object,
-						 unsigned int r_sym)
-{
-  // Convert the PLT offset into an APLT offset.
-  const Sized_relobj_file<64, false>* sized_relobj =
-    static_cast<const Sized_relobj_file<64, false>*>(object);
-  const Symbol_value<64>* psymval = sized_relobj->local_symbol(r_sym);
-  unsigned int plt_offset = ((object->local_plt_offset(r_sym)
-			      - (psymval->is_ifunc_symbol()
-				 ? 0 : plt_entry_size))
-			     / (plt_entry_size / aplt_entry_size));
-  return (this->address()
-	  + this->aplt_offset_
-	  + this->regular_count() * aplt_entry_size
-	  + plt_offset);
-}
-
-// Set the final size.
-void
-Output_data_plt_x86_64_bnd::set_final_data_size()
-{
-  // Number of regular and IFUNC PLT entries.
-  unsigned int count = this->entry_count();
-  // Count the first entry and the TLSDESC entry, if present.
-  unsigned int extra = this->has_tlsdesc_entry() ? 2 : 1;
-  unsigned int plt_size = (count + extra) * plt_entry_size;
-  // Offset of the APLT.
-  this->aplt_offset_ = plt_size;
-  // Size of the APLT.
-  plt_size += count * aplt_entry_size;
-  this->set_data_size(plt_size);
-}
-
-// The first entry in the BND PLT.
-
-const unsigned char
-Output_data_plt_x86_64_bnd::first_plt_entry[plt_entry_size] =
-{
-  // From AMD64 ABI Draft 0.98, page 76
-  0xff, 0x35,		// pushq contents of memory address
-  0, 0, 0, 0,		// replaced with address of .got + 8
-  0xf2, 0xff, 0x25,	// bnd jmp indirect
-  0, 0, 0, 0,		// replaced with address of .got + 16
-  0x0f, 0x1f, 0x00   	// nop
-};
-
-void
-Output_data_plt_x86_64_bnd::do_fill_first_plt_entry(
-    unsigned char* pov,
-    elfcpp::Elf_types<64>::Elf_Addr got_address,
-    elfcpp::Elf_types<64>::Elf_Addr plt_address)
-{
-  memcpy(pov, first_plt_entry, plt_entry_size);
-  // We do a jmp relative to the PC at the end of this instruction.
-  elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
-					      (got_address + 8
-					       - (plt_address + 6)));
-  elfcpp::Swap<32, false>::writeval(pov + 9,
-				    (got_address + 16
-				     - (plt_address + 13)));
-}
-
-// Subsequent entries in the BND PLT.
-
-const unsigned char
-Output_data_plt_x86_64_bnd::plt_entry[plt_entry_size] =
-{
-  // From AMD64 ABI Draft 0.99.8, page 139
-  0x68,				// pushq immediate
-  0, 0, 0, 0,			// replaced with offset into relocation table
-  0xf2, 0xe9,			// bnd jmpq relative
-  0, 0, 0, 0,			// replaced with offset to start of .plt
-  0x0f, 0x1f, 0x44, 0, 0	// nop
-};
-
-// Entries in the BND Additional PLT.
-
-const unsigned char
-Output_data_plt_x86_64_bnd::aplt_entry[aplt_entry_size] =
-{
-  // From AMD64 ABI Draft 0.99.8, page 139
-  0xf2, 0xff, 0x25,	// bnd jmpq indirect
-  0, 0, 0, 0,		// replaced with address of symbol in .got
-  0x90,			// nop
-};
-
-unsigned int
-Output_data_plt_x86_64_bnd::do_fill_plt_entry(
-    unsigned char* pov,
-    elfcpp::Elf_types<64>::Elf_Addr,
-    elfcpp::Elf_types<64>::Elf_Addr,
-    unsigned int,
-    unsigned int plt_offset,
-    unsigned int plt_index)
-{
-  memcpy(pov, plt_entry, plt_entry_size);
-  elfcpp::Swap_unaligned<32, false>::writeval(pov + 1, plt_index);
-  elfcpp::Swap<32, false>::writeval(pov + 7, -(plt_offset + 11));
-  return 0;
-}
-
-void
-Output_data_plt_x86_64_bnd::fill_aplt_entry(
-    unsigned char* pov,
-    elfcpp::Elf_types<64>::Elf_Addr got_address,
-    elfcpp::Elf_types<64>::Elf_Addr plt_address,
-    unsigned int got_offset,
-    unsigned int plt_offset,
-    unsigned int plt_index)
-{
-  // Check PC-relative offset overflow in PLT entry.
-  uint64_t plt_got_pcrel_offset = (got_address + got_offset
-				   - (plt_address + plt_offset + 7));
-  if (Bits<32>::has_overflow(plt_got_pcrel_offset))
-    gold_error(_("PC-relative offset overflow in APLT entry %d"),
-	       plt_index + 1);
-
-  memcpy(pov, aplt_entry, aplt_entry_size);
-  elfcpp::Swap_unaligned<32, false>::writeval(pov + 3, plt_got_pcrel_offset);
-}
-
-// The reserved TLSDESC entry in the PLT for an executable.
-
-const unsigned char
-Output_data_plt_x86_64_bnd::tlsdesc_plt_entry[plt_entry_size] =
-{
-  // From Alexandre Oliva, "Thread-Local Storage Descriptors for IA32
-  // and AMD64/EM64T", Version 0.9.4 (2005-10-10).
-  0xff, 0x35,		// pushq x(%rip)
-  0, 0, 0, 0,		// replaced with address of linkmap GOT entry (at PLTGOT + 8)
-  0xf2, 0xff, 0x25,	// jmpq *y(%rip)
-  0, 0, 0, 0,		// replaced with offset of reserved TLSDESC_GOT entry
-  0x0f,	0x1f, 0		// nop
-};
-
-void
-Output_data_plt_x86_64_bnd::do_fill_tlsdesc_entry(
-    unsigned char* pov,
-    elfcpp::Elf_types<64>::Elf_Addr got_address,
-    elfcpp::Elf_types<64>::Elf_Addr plt_address,
-    elfcpp::Elf_types<64>::Elf_Addr got_base,
-    unsigned int tlsdesc_got_offset,
-    unsigned int plt_offset)
-{
-  memcpy(pov, tlsdesc_plt_entry, plt_entry_size);
-  elfcpp::Swap_unaligned<32, false>::writeval(pov + 2,
-					      (got_address + 8
-					       - (plt_address + plt_offset
-						  + 6)));
-  elfcpp::Swap_unaligned<32, false>::writeval(pov + 9,
-					      (got_base
-					       + tlsdesc_got_offset
-					       - (plt_address + plt_offset
-						  + 13)));
-}
-
 // Return the APLT address to use for a global symbol (for IBT).
 
 template<int size>
@@ -2520,35 +2231,7 @@ Output_data_plt_x86_64_standard<size>::plt_eh_frame_fde[plt_eh_frame_fde_size] =
   elfcpp::DW_CFA_nop
 };
 
-// The .eh_frame unwind information for the BND PLT.
-const unsigned char
-Output_data_plt_x86_64_bnd::plt_eh_frame_fde[plt_eh_frame_fde_size] =
-{
-  0, 0, 0, 0,				// Replaced with offset to .plt.
-  0, 0, 0, 0,				// Replaced with size of .plt.
-  0,					// Augmentation size.
-  elfcpp::DW_CFA_def_cfa_offset, 16,	// DW_CFA_def_cfa_offset: 16.
-  elfcpp::DW_CFA_advance_loc + 6,	// Advance 6 to __PLT__ + 6.
-  elfcpp::DW_CFA_def_cfa_offset, 24,	// DW_CFA_def_cfa_offset: 24.
-  elfcpp::DW_CFA_advance_loc + 10,	// Advance 10 to __PLT__ + 16.
-  elfcpp::DW_CFA_def_cfa_expression,	// DW_CFA_def_cfa_expression.
-  11,					// Block length.
-  elfcpp::DW_OP_breg7, 8,		// Push %rsp + 8.
-  elfcpp::DW_OP_breg16, 0,		// Push %rip.
-  elfcpp::DW_OP_lit15,			// Push 0xf.
-  elfcpp::DW_OP_and,			// & (%rip & 0xf).
-  elfcpp::DW_OP_lit5,			// Push 5.
-  elfcpp::DW_OP_ge,			// >= ((%rip & 0xf) >= 5)
-  elfcpp::DW_OP_lit3,			// Push 3.
-  elfcpp::DW_OP_shl,			// << (((%rip & 0xf) >= 5) << 3)
-  elfcpp::DW_OP_plus,			// + ((((%rip&0xf)>=5)<<3)+%rsp+8
-  elfcpp::DW_CFA_nop,			// Align to 32 bytes.
-  elfcpp::DW_CFA_nop,
-  elfcpp::DW_CFA_nop,
-  elfcpp::DW_CFA_nop
-};
-
-// The .eh_frame unwind information for the BND PLT.
+// The .eh_frame unwind information for the PLT.
 template<int size>
 const unsigned char
 Output_data_plt_x86_64_ibt<size>::plt_eh_frame_fde[plt_eh_frame_fde_size] =
@@ -2656,101 +2339,6 @@ Output_data_plt_x86_64<size>::do_write(Output_file* of)
   of->write_output_view(got_file_offset, got_size, got_view);
 }
 
-// Write out the BND PLT.
-
-void
-Output_data_plt_x86_64_bnd::do_write(Output_file* of)
-{
-  const off_t offset = this->offset();
-  const section_size_type oview_size =
-    convert_to_section_size_type(this->data_size());
-  unsigned char* const oview = of->get_output_view(offset, oview_size);
-
-  Output_data_got<64, false>* got = this->got();
-  Output_data_got_plt_x86_64* got_plt = this->got_plt();
-  Output_data_space* got_irelative = this->got_irelative();
-
-  const off_t got_file_offset = got_plt->offset();
-  gold_assert(parameters->incremental_update()
-	      || (got_file_offset + got_plt->data_size()
-		  == got_irelative->offset()));
-  const section_size_type got_size =
-    convert_to_section_size_type(got_plt->data_size()
-				 + got_irelative->data_size());
-  unsigned char* const got_view = of->get_output_view(got_file_offset,
-						      got_size);
-
-  unsigned char* pov = oview;
-
-  // The base address of the .plt section.
-  elfcpp::Elf_types<64>::Elf_Addr plt_address = this->address();
-  // The base address of the .got section.
-  elfcpp::Elf_types<64>::Elf_Addr got_base = got->address();
-  // The base address of the PLT portion of the .got section,
-  // which is where the GOT pointer will point, and where the
-  // three reserved GOT entries are located.
-  elfcpp::Elf_types<64>::Elf_Addr got_address = got_plt->address();
-
-  this->fill_first_plt_entry(pov, got_address, plt_address);
-  pov += plt_entry_size;
-
-  // The first three entries in the GOT are reserved, and are written
-  // by Output_data_got_plt_x86_64::do_write.
-  unsigned char* got_pov = got_view + 24;
-
-  unsigned int plt_offset = plt_entry_size;
-  unsigned int got_offset = 24;
-  const unsigned int count = this->entry_count();
-  for (unsigned int plt_index = 0;
-       plt_index < count;
-       ++plt_index,
-	 pov += plt_entry_size,
-	 got_pov += 8,
-	 plt_offset += plt_entry_size,
-	 got_offset += 8)
-    {
-      // Set and adjust the PLT entry itself.
-      unsigned int lazy_offset = this->fill_plt_entry(pov,
-						      got_address, plt_address,
-						      got_offset, plt_offset,
-						      plt_index);
-
-      // Set the entry in the GOT.
-      elfcpp::Swap<64, false>::writeval(got_pov,
-					plt_address + plt_offset + lazy_offset);
-    }
-
-  if (this->has_tlsdesc_entry())
-    {
-      // Set and adjust the reserved TLSDESC PLT entry.
-      unsigned int tlsdesc_got_offset = this->get_tlsdesc_got_offset();
-      this->fill_tlsdesc_entry(pov, got_address, plt_address, got_base,
-			       tlsdesc_got_offset, plt_offset);
-      pov += this->get_plt_entry_size();
-      plt_offset += plt_entry_size;
-    }
-
-  // Write the additional PLT.
-  got_offset = 24;
-  for (unsigned int plt_index = 0;
-       plt_index < count;
-       ++plt_index,
-	 pov += aplt_entry_size,
-	 plt_offset += aplt_entry_size,
-	 got_offset += 8)
-    {
-      // Set and adjust the APLT entry.
-      this->fill_aplt_entry(pov, got_address, plt_address, got_offset,
-			    plt_offset, plt_index);
-    }
-
-  gold_assert(static_cast<section_size_type>(pov - oview) == oview_size);
-  gold_assert(static_cast<section_size_type>(got_pov - got_view) == got_size);
-
-  of->write_output_view(offset, oview_size, oview);
-  of->write_output_view(got_file_offset, got_size, got_view);
-}
-
 // Write out the IBT PLT.
 
 template<int size>
@@ -2900,9 +2488,6 @@ Target_x86_64<64>::do_make_data_plt(Layout* layout,
   if (this->feature_1_ & elfcpp::GNU_PROPERTY_X86_FEATURE_1_IBT)
     return new Output_data_plt_x86_64_ibt<64>(layout, got, got_plt,
 					      got_irelative);
-  else if (parameters->options().bndplt())
-    return new Output_data_plt_x86_64_bnd(layout, got, got_plt,
-					  got_irelative);
   else
     return new Output_data_plt_x86_64_standard<64>(layout, got, got_plt,
 						   got_irelative);
@@ -2934,9 +2519,6 @@ Target_x86_64<64>::do_make_data_plt(Layout* layout,
   if (this->feature_1_ & elfcpp::GNU_PROPERTY_X86_FEATURE_1_IBT)
     return new Output_data_plt_x86_64_ibt<64>(layout, got, got_plt,
 					      got_irelative, plt_count);
-  else if (parameters->options().bndplt())
-    return new Output_data_plt_x86_64_bnd(layout, got, got_plt,
-					  got_irelative, plt_count);
   else
     return new Output_data_plt_x86_64_standard<64>(layout, got, got_plt,
 						   got_irelative,
@@ -3374,14 +2956,12 @@ Target_x86_64<size>::Scan::get_reference_flags(unsigned int r_type)
 
     case elfcpp::R_X86_64_PC64:
     case elfcpp::R_X86_64_PC32:
-    case elfcpp::R_X86_64_PC32_BND:
     case elfcpp::R_X86_64_PC16:
     case elfcpp::R_X86_64_PC8:
     case elfcpp::R_X86_64_GOTOFF64:
       return Symbol::RELATIVE_REF;
 
     case elfcpp::R_X86_64_PLT32:
-    case elfcpp::R_X86_64_PLT32_BND:
     case elfcpp::R_X86_64_PLTOFF64:
       return Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF;
 
@@ -3465,7 +3045,6 @@ Target_x86_64<size>::Scan::check_non_pic(Relobj* object, unsigned int r_type,
 
       // glibc supports these reloc types, but they can overflow.
     case elfcpp::R_X86_64_PC32:
-    case elfcpp::R_X86_64_PC32_BND:
       // A PC relative reference is OK against a local symbol or if
       // the symbol is defined locally.
       if (gsym == NULL
@@ -3495,9 +3074,6 @@ Target_x86_64<size>::Scan::check_non_pic(Relobj* object, unsigned int r_type,
 	    case elfcpp::R_X86_64_PC32:
 	      r_name = "R_X86_64_PC32";
 	      break;
-	    case elfcpp::R_X86_64_PC32_BND:
-	      r_name = "R_X86_64_PC32_BND";
-	      break;
 	    default:
 	      gold_unreachable();
 	      break;
@@ -3650,13 +3226,11 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
 
     case elfcpp::R_X86_64_PC64:
     case elfcpp::R_X86_64_PC32:
-    case elfcpp::R_X86_64_PC32_BND:
     case elfcpp::R_X86_64_PC16:
     case elfcpp::R_X86_64_PC8:
       break;
 
     case elfcpp::R_X86_64_PLT32:
-    case elfcpp::R_X86_64_PLT32_BND:
       // Since we know this is a local symbol, we can handle this as a
       // PC32 reloc.
       break;
@@ -4107,7 +3681,6 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
 
     case elfcpp::R_X86_64_PC64:
     case elfcpp::R_X86_64_PC32:
-    case elfcpp::R_X86_64_PC32_BND:
     case elfcpp::R_X86_64_PC16:
     case elfcpp::R_X86_64_PC8:
       {
@@ -4240,7 +3813,6 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
       break;
 
     case elfcpp::R_X86_64_PLT32:
-    case elfcpp::R_X86_64_PLT32_BND:
       // If the symbol is fully resolved, this is just a PC32 reloc.
       // Otherwise we need a PLT entry.
       if (gsym->final_value_is_known())
@@ -4658,8 +4230,6 @@ Target_x86_64<size>::Relocate::relocate(
       if ((r_type != elfcpp::R_X86_64_PLT32
 	   && r_type != elfcpp::R_X86_64_GOTPCREL
 	   && r_type != elfcpp::R_X86_64_GOTPCRELX
-	   && r_type != elfcpp::R_X86_64_PLT32_BND
-	   && r_type != elfcpp::R_X86_64_PC32_BND
 	   && r_type != elfcpp::R_X86_64_PC32)
 	  || gsym == NULL
 	  || strcmp(gsym->name(), "__tls_get_addr") != 0)
@@ -4762,7 +4332,6 @@ Target_x86_64<size>::Relocate::relocate(
       break;
 
     case elfcpp::R_X86_64_PC32:
-    case elfcpp::R_X86_64_PC32_BND:
       rstatus = Reloc_funcs::pcrela32_check(view, object, psymval, addend,
 					    address);
       break;
@@ -4784,7 +4353,6 @@ Target_x86_64<size>::Relocate::relocate(
       break;
 
     case elfcpp::R_X86_64_PLT32:
-    case elfcpp::R_X86_64_PLT32_BND:
       gold_assert(gsym == NULL
 		  || gsym->has_plt_offset()
 		  || gsym->final_value_is_known()
diff --git a/ld/NEWS b/ld/NEWS
index 24df91aa85f..a8a1cbb4fdc 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -11,6 +11,8 @@
   that selects the default compression algorithm
   for --enable-compressed-debug-sections.
 
+* Remove support for -z bndplt (MPX prefix instructions).
+
 Changes in 2.39:
 
 * The ELF linker will now generate a warning message if the stack is made
diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh
index 5f2743ed409..a689a7b6dc4 100644
--- a/ld/emulparams/elf_x86_64.sh
+++ b/ld/emulparams/elf_x86_64.sh
@@ -47,16 +47,6 @@ case "$target" in
     case "$EMULATION_NAME" in
       *64*)
 	LIBPATH_SUFFIX=64
-	PARSE_AND_LIST_OPTIONS_BNDPLT='
-  fprintf (file, _("\
-  -z bndplt                   Always generate BND prefix in PLT entries\n"));
-'
-	PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT='
-      else if (strcmp (optarg, "bndplt") == 0)
-	params.bndplt = true;
-'
-	PARSE_AND_LIST_OPTIONS="$PARSE_AND_LIST_OPTIONS $PARSE_AND_LIST_OPTIONS_BNDPLT"
-	PARSE_AND_LIST_ARGS_CASE_Z="$PARSE_AND_LIST_ARGS_CASE_Z $PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT"
 	;;
     esac
     ;;
diff --git a/ld/ld.texi b/ld/ld.texi
index 3836465730c..92ea95c199e 100644
--- a/ld/ld.texi
+++ b/ld/ld.texi
@@ -1208,9 +1208,6 @@ for Solaris compatibility.
 The recognized keywords are:
 @table @samp
 
-@item bndplt
-Always generate BND prefix in PLT entries. Supported for Linux/x86_64.
-
 @item call-nop=prefix-addr
 @itemx call-nop=suffix-nop
 @itemx call-nop=prefix-@var{byte}
diff --git a/ld/testsuite/ld-x86-64/bnd-branch-1-now.d b/ld/testsuite/ld-x86-64/bnd-branch-1-now.d
deleted file mode 100644
index b1bcea3cf4c..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-branch-1-now.d
+++ /dev/null
@@ -1,45 +0,0 @@
-#source: bnd-branch-1.s -mx86-used-note=no
-#as: --64
-#ld: -z now -shared -melf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+230 <foo2@plt-0x10>:
- +[a-f0-9]+:	ff 35 82 01 20 00    	push   0x200182\(%rip\)        # 2003b8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	ff 25 84 01 20 00    	jmp    \*0x200184\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%rax\)
-
-0+240 <foo2@plt>:
- +[a-f0-9]+:	ff 25 82 01 20 00    	jmp    \*0x200182\(%rip\)        # 2003c8 <foo2>
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	e9 e0 ff ff ff       	jmp    230 <foo2@plt-0x10>
-
-0+250 <foo3@plt>:
- +[a-f0-9]+:	ff 25 7a 01 20 00    	jmp    \*0x20017a\(%rip\)        # 2003d0 <foo3>
- +[a-f0-9]+:	68 01 00 00 00       	push   \$0x1
- +[a-f0-9]+:	e9 d0 ff ff ff       	jmp    230 <foo2@plt-0x10>
-
-0+260 <foo1@plt>:
- +[a-f0-9]+:	ff 25 72 01 20 00    	jmp    \*0x200172\(%rip\)        # 2003d8 <foo1>
- +[a-f0-9]+:	68 02 00 00 00       	push   \$0x2
- +[a-f0-9]+:	e9 c0 ff ff ff       	jmp    230 <foo2@plt-0x10>
-
-0+270 <foo4@plt>:
- +[a-f0-9]+:	ff 25 6a 01 20 00    	jmp    \*0x20016a\(%rip\)        # 2003e0 <foo4>
- +[a-f0-9]+:	68 03 00 00 00       	push   \$0x3
- +[a-f0-9]+:	e9 b0 ff ff ff       	jmp    230 <foo2@plt-0x10>
-
-Disassembly of section .text:
-
-0+280 <_start>:
- +[a-f0-9]+:	f2 e9 da ff ff ff    	bnd jmp 260 <foo1@plt>
- +[a-f0-9]+:	e8 b5 ff ff ff       	call   240 <foo2@plt>
- +[a-f0-9]+:	e9 c0 ff ff ff       	jmp    250 <foo3@plt>
- +[a-f0-9]+:	e8 db ff ff ff       	call   270 <foo4@plt>
- +[a-f0-9]+:	f2 e8 b5 ff ff ff    	bnd call 250 <foo3@plt>
- +[a-f0-9]+:	e9 d0 ff ff ff       	jmp    270 <foo4@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-branch-1.d b/ld/testsuite/ld-x86-64/bnd-branch-1.d
deleted file mode 100644
index dfcf0d0c862..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-branch-1.d
+++ /dev/null
@@ -1,19 +0,0 @@
-#as: --64
-#ld: -shared -melf_x86_64
-#objdump: -dw
-
-.*: +file format .*
-
-
-#...
-Disassembly of section .text:
-
-#...
-[a-f0-9]+ <_start>:
-[ 	]*[a-f0-9]+:	f2 e9 [a-f0-9]+ ff ff ff    	bnd jmp [a-f0-9]+ <foo1@plt>
-[ 	]*[a-f0-9]+:	e8 [a-f0-9]+ ff ff ff       	call   [a-f0-9]+ <foo2@plt>
-[ 	]*[a-f0-9]+:	e9 [a-f0-9]+ ff ff ff       	jmp    [a-f0-9]+ <foo3@plt>
-[ 	]*[a-f0-9]+:	e8 [a-f0-9]+ ff ff ff       	call   [a-f0-9]+ <foo4@plt>
-[ 	]*[a-f0-9]+:	f2 e8 [a-f0-9]+ ff ff ff    	bnd call [a-f0-9]+ <foo3@plt>
-[ 	]*[a-f0-9]+:	e9 [a-f0-9]+ ff ff ff       	jmp    [a-f0-9]+ <foo4@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-branch-1.s b/ld/testsuite/ld-x86-64/bnd-branch-1.s
deleted file mode 100644
index bf62981dcc0..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-branch-1.s
+++ /dev/null
@@ -1,9 +0,0 @@
-	.text
-	.globl _start
-_start:
-bnd	jmp	foo1@plt
-	call	foo2@plt
-	jmp	foo3@plt
-	call	foo4@plt
-bnd	call	foo3@plt
-	jmp	foo4@plt
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d b/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
deleted file mode 100644
index 01d638991a6..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-1-now.d
+++ /dev/null
@@ -1,33 +0,0 @@
-#source: bnd-ifunc-1.s
-#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+170 <.plt>:
- +[a-f0-9]+:	ff 35 4a 01 20 00    	push   0x20014a\(%rip\)        # 2002c0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 4b 01 20 00 	bnd jmp \*0x20014b\(%rip\)        # 2002c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 170 <\*ABS\*\+0x198@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+190 <\*ABS\*\+0x198@plt>:
- +[a-f0-9]+:	f2 ff 25 39 01 20 00 	bnd jmp \*0x200139\(%rip\)        # 2002d0 <_GLOBAL_OFFSET_TABLE_\+0x18>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+198 <foo>:
- +[a-f0-9]+:	f2 c3                	bnd ret
-
-0+19a <bar>:
- +[a-f0-9]+:	f2 e8 f0 ff ff ff    	bnd call 190 <\*ABS\*\+0x198@plt>
- +[a-f0-9]+:	f2 c3                	bnd ret
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1.d b/ld/testsuite/ld-x86-64/bnd-ifunc-1.d
deleted file mode 100644
index 86453f18154..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-1.d
+++ /dev/null
@@ -1,7 +0,0 @@
-#as: --64 -madd-bnd-prefix
-#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv
-#objdump: -dw
-
-#...
-[ 	]*[a-f0-9]+:	f2 e8 f0 ff ff ff    	bnd call [a-f0-9]+ <\*ABS\*\+0x[a-f0-9]+@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1.s b/ld/testsuite/ld-x86-64/bnd-ifunc-1.s
deleted file mode 100644
index 82b64f06e89..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-1.s
+++ /dev/null
@@ -1,16 +0,0 @@
-	.type foo, %gnu_indirect_function
-	.global __GI_foo
-	.hidden __GI_foo
-	.set __GI_foo, foo
-	.text
-.globl foo
-	.type	foo, @function
-foo:
-	ret
-	.size	foo, .-foo
-.globl bar
-	.type	bar, @function
-bar:
-	call	__GI_foo@PLT
-	ret
-	.size	bar, .-bar
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
deleted file mode 100644
index fa7ec07aaf0..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2-now.d
+++ /dev/null
@@ -1,59 +0,0 @@
-#source: bnd-ifunc-2.s
-#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+240 <.plt>:
- +[a-f0-9]+:	ff 35 9a 01 20 00    	push   0x20019a\(%rip\)        # 2003e0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 9b 01 20 00 	bnd jmp \*0x20019b\(%rip\)        # 2003e8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 03 00 00 00       	push   \$0x3
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 d5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 01 00 00 00       	push   \$0x1
- +[a-f0-9]+:	f2 e9 c5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 02 00 00 00       	push   \$0x2
- +[a-f0-9]+:	f2 e9 b5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+290 <\*ABS\*\+0x2bc@plt>:
- +[a-f0-9]+:	f2 ff 25 59 01 20 00 	bnd jmp \*0x200159\(%rip\)        # 2003f0 <_GLOBAL_OFFSET_TABLE_\+0x18>
- +[a-f0-9]+:	90                   	nop
-
-0+298 <func1@plt>:
- +[a-f0-9]+:	f2 ff 25 59 01 20 00 	bnd jmp \*0x200159\(%rip\)        # 2003f8 <func1>
- +[a-f0-9]+:	90                   	nop
-
-0+2a0 <func2@plt>:
- +[a-f0-9]+:	f2 ff 25 59 01 20 00 	bnd jmp \*0x200159\(%rip\)        # 200400 <func2>
- +[a-f0-9]+:	90                   	nop
-
-0+2a8 <\*ABS\*\+0x2b0@plt>:
- +[a-f0-9]+:	f2 ff 25 59 01 20 00 	bnd jmp \*0x200159\(%rip\)        # 200408 <_GLOBAL_OFFSET_TABLE_\+0x30>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+2b0 <resolve1>:
- +[a-f0-9]+:	f2 e8 e2 ff ff ff    	bnd call 298 <func1@plt>
-
-0+2b6 <g1>:
- +[a-f0-9]+:	f2 e9 ec ff ff ff    	bnd jmp 2a8 <\*ABS\*\+0x2b0@plt>
-
-0+2bc <resolve2>:
- +[a-f0-9]+:	f2 e8 de ff ff ff    	bnd call 2a0 <func2@plt>
-
-0+2c2 <g2>:
- +[a-f0-9]+:	f2 e9 c8 ff ff ff    	bnd jmp 290 <\*ABS\*\+0x2bc@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
deleted file mode 100644
index 36534b14feb..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
+++ /dev/null
@@ -1,54 +0,0 @@
-#as: --64 -madd-bnd-prefix -mx86-used-note=no
-#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-#...
-0+240 <.plt>:
-[ 	]*[a-f0-9]+:	ff 35 7a 01 20 00    	push   0x20017a\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	f2 ff 25 7b 01 20 00 	bnd jmp \*0x20017b\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
-[ 	]*[a-f0-9]+:	68 03 00 00 00       	push   \$0x3
-[ 	]*[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
-[ 	]*[a-f0-9]+:	f2 e9 d5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 01 00 00 00       	push   \$0x1
-[ 	]*[a-f0-9]+:	f2 e9 c5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 02 00 00 00       	push   \$0x2
-[ 	]*[a-f0-9]+:	f2 e9 b5 ff ff ff    	bnd jmp 240 <\*ABS\*\+0x2bc@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+290 <\*ABS\*\+0x2bc@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 39 01 20 00 	bnd jmp \*0x200139\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+298 <func1@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 39 01 20 00 	bnd jmp \*0x200139\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+2a0 <func2@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 39 01 20 00 	bnd jmp \*0x200139\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+2a8 <\*ABS\*\+0x2b0@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 39 01 20 00 	bnd jmp \*0x200139\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+2b0 <resolve1>:
-[ 	]*[a-f0-9]+:	f2 e8 e2 ff ff ff    	bnd call 298 <func1@plt>
-
-0+2b6 <g1>:
-[ 	]*[a-f0-9]+:	f2 e9 ec ff ff ff    	bnd jmp 2a8 <\*ABS\*\+0x2b0@plt>
-
-0+2bc <resolve2>:
-[ 	]*[a-f0-9]+:	f2 e8 de ff ff ff    	bnd call 2a0 <func2@plt>
-
-0+2c2 <g2>:
-[ 	]*[a-f0-9]+:	f2 e9 c8 ff ff ff    	bnd jmp 290 <\*ABS\*\+0x2bc@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2.s b/ld/testsuite/ld-x86-64/bnd-ifunc-2.s
deleted file mode 100644
index 86470a2ba20..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2.s
+++ /dev/null
@@ -1,28 +0,0 @@
-	.text
-	.globl	fct1
-	.type	fct1, @gnu_indirect_function
-	.set	fct1,resolve1
-	.hidden int_fct1
-	.globl	int_fct1
-	.set	int_fct1,fct1
-	.type	resolve1, @function
-resolve1:
-	call	func1@PLT
-	.globl	g1
-	.type	g1, @function
-g1:
-	jmp	int_fct1@PLT
-
-	.globl	fct2
-	.type	fct2, @gnu_indirect_function
-	.set	fct2,resolve2
-	.hidden int_fct2
-	.globl	int_fct2
-	.set	int_fct2,fct2
-	.type	resolve2, @function
-resolve2:
-	call	func2@PLT
-	.globl	g2
-	.type	g2, @function
-g2:
-	jmp	int_fct2@PLT
diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1-now.d b/ld/testsuite/ld-x86-64/bnd-plt-1-now.d
deleted file mode 100644
index 47289a04f43..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-plt-1-now.d
+++ /dev/null
@@ -1,55 +0,0 @@
-#source: bnd-branch-1.s
-#as: --64 -mx86-used-note=no
-#ld: -z now -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+230 <.plt>:
- +[a-f0-9]+:	ff 35 a2 01 20 00    	push   0x2001a2\(%rip\)        # 2003d8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 a3 01 20 00 	bnd jmp \*0x2001a3\(%rip\)        # 2003e0 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 01 00 00 00       	push   \$0x1
- +[a-f0-9]+:	f2 e9 d5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 02 00 00 00       	push   \$0x2
- +[a-f0-9]+:	f2 e9 c5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
- +[a-f0-9]+:	68 03 00 00 00       	push   \$0x3
- +[a-f0-9]+:	f2 e9 b5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+280 <foo2@plt>:
- +[a-f0-9]+:	f2 ff 25 61 01 20 00 	bnd jmp \*0x200161\(%rip\)        # 2003e8 <foo2>
- +[a-f0-9]+:	90                   	nop
-
-0+288 <foo3@plt>:
- +[a-f0-9]+:	f2 ff 25 61 01 20 00 	bnd jmp \*0x200161\(%rip\)        # 2003f0 <foo3>
- +[a-f0-9]+:	90                   	nop
-
-0+290 <foo1@plt>:
- +[a-f0-9]+:	f2 ff 25 61 01 20 00 	bnd jmp \*0x200161\(%rip\)        # 2003f8 <foo1>
- +[a-f0-9]+:	90                   	nop
-
-0+298 <foo4@plt>:
- +[a-f0-9]+:	f2 ff 25 61 01 20 00 	bnd jmp \*0x200161\(%rip\)        # 200400 <foo4>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+2a0 <_start>:
- +[a-f0-9]+:	f2 e9 ea ff ff ff    	bnd jmp 290 <foo1@plt>
- +[a-f0-9]+:	e8 d5 ff ff ff       	call   280 <foo2@plt>
- +[a-f0-9]+:	e9 d8 ff ff ff       	jmp    288 <foo3@plt>
- +[a-f0-9]+:	e8 e3 ff ff ff       	call   298 <foo4@plt>
- +[a-f0-9]+:	f2 e8 cd ff ff ff    	bnd call 288 <foo3@plt>
- +[a-f0-9]+:	e9 d8 ff ff ff       	jmp    298 <foo4@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1.d b/ld/testsuite/ld-x86-64/bnd-plt-1.d
deleted file mode 100644
index f047da897ce..00000000000
--- a/ld/testsuite/ld-x86-64/bnd-plt-1.d
+++ /dev/null
@@ -1,55 +0,0 @@
-#source: bnd-branch-1.s
-#as: --64 -mx86-used-note=no
-#ld: -shared -melf_x86_64 -z bndplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw
-
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+230 <.plt>:
-[ 	]*[a-f0-9]+:	ff 35 82 01 20 00    	push   0x200182\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	f2 ff 25 83 01 20 00 	bnd jmp \*0x200183\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
-[ 	]*[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
-[ 	]*[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 01 00 00 00       	push   \$0x1
-[ 	]*[a-f0-9]+:	f2 e9 d5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 02 00 00 00       	push   \$0x2
-[ 	]*[a-f0-9]+:	f2 e9 c5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-[ 	]*[a-f0-9]+:	68 03 00 00 00       	push   \$0x3
-[ 	]*[a-f0-9]+:	f2 e9 b5 ff ff ff    	bnd jmp 230 <foo2@plt-0x50>
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+280 <foo2@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 41 01 20 00 	bnd jmp \*0x200141\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+288 <foo3@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 41 01 20 00 	bnd jmp \*0x200141\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+290 <foo1@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 41 01 20 00 	bnd jmp \*0x200141\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-0+298 <foo4@plt>:
-[ 	]*[a-f0-9]+:	f2 ff 25 41 01 20 00 	bnd jmp \*0x200141\(%rip\)[ 	]*(#.*)?
-[ 	]*[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+2a0 <_start>:
-[ 	]*[a-f0-9]+:	f2 e9 ea ff ff ff    	bnd jmp 290 <foo1@plt>
-[ 	]*[a-f0-9]+:	e8 d5 ff ff ff       	call   280 <foo2@plt>
-[ 	]*[a-f0-9]+:	e9 d8 ff ff ff       	jmp    288 <foo3@plt>
-[ 	]*[a-f0-9]+:	e8 e3 ff ff ff       	call   298 <foo4@plt>
-[ 	]*[a-f0-9]+:	f2 e8 cd ff ff ff    	bnd call 288 <foo3@plt>
-[ 	]*[a-f0-9]+:	e9 d8 ff ff ff       	jmp    298 <foo4@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/mpx.exp b/ld/testsuite/ld-x86-64/mpx.exp
deleted file mode 100644
index c39f3996815..00000000000
--- a/ld/testsuite/ld-x86-64/mpx.exp
+++ /dev/null
@@ -1,138 +0,0 @@
-# Expect script for ELF MPX tests.
-#   Copyright (C) 2013-2022 Free Software Foundation, Inc.
-#
-# This file is part of the GNU Binutils.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-# MA 02110-1301, USA.
-#
-
-# The following tests require running the executable generated by ld,
-# or enough of a build environment to create a fully linked executable.
-# This is not commonly available when testing a cross-built linker.
-if ![isnative] {
-    return
-}
-
-# Only on Linux for now.
-if ![istarget "x86_64-*-linux*"] {
-    return
-}
-
-# Check to see if the C compiler works
-if { ![check_compiler_available] } {
-    return
-}
-
-run_cc_link_tests [list \
-    [list \
-	"Build libmpx1a.a" \
-	"" \
-	"-Wa,-madd-bnd-prefix -fPIC $PLT_CFLAGS" \
-	{mpx1a.c} \
-	{{readelf {-r --wide} mpx1a.rd}} \
-	"libmpx1a.a" \
-    ] \
-    [list \
-	"Build libmpx1b.a" \
-	"" \
-	"" \
-	{mpx1b.c} \
-	{} \
-	"libmpx1b.a" \
-    ] \
-    [list \
-	"Build libmpx1c.a" \
-	"" \
-	"-Wa,-madd-bnd-prefix" \
-	{mpx1c.c} \
-	{{readelf {-r --wide} mpx1c.rd}} \
-	"libmpx1c.a" \
-    ] \
-    [list \
-	"Build libmpx2a.a" \
-	"" \
-	"-Wa,-madd-bnd-prefix -fPIE $PLT_CFLAGS" \
-	{mpx2a.c} \
-	{{readelf {-r --wide} mpx2a.rd}} \
-	"libmpx2a.a" \
-	] \
-    [list \
-	"Build libmpx2b.a" \
-	"" \
-	"-fPIE" \
-	{mpx2b.c} \
-	{} \
-	"libmpx2b.a" \
-    ] \
-    [list \
-	"Build libmpx2c.a" \
-	"" \
-	"-Wa,-madd-bnd-prefix -fPIE $PLT_CFLAGS" \
-	{mpx2c.c} \
-	{{readelf {-r --wide} mpx2c.rd}} \
-	"libmpx2c.a" \
-    ] \
-]
-
-set run_tests {
-    {"Run mpx1"
-     "tmpdir/mpx1a.o tmpdir/mpx1b.o tmpdir/mpx1c.o" ""
-     {dummy.s} "mpx1" "mpx1.out"}
-    {"Run mpx1 with -static"
-     "tmpdir/mpx1a.o tmpdir/mpx1b.o tmpdir/mpx1c.o -static" ""
-     {dummy.s} "mpx1static" "mpx1.out"}
-    {"Run mpx2"
-     "tmpdir/mpx2a.o tmpdir/mpx2b.o tmpdir/mpx2c.o -pie" ""
-     {dummy.s} "mpx2" "mpx2.out"}
-    {"Run mpx2 with -static"
-     "tmpdir/mpx2a.o tmpdir/mpx2b.o tmpdir/mpx2c.o -static" ""
-     {dummy.s} "mpx2static" "mpx2.out"}
-}
-
-run_ld_link_tests {
-    {"Build libcall.so"
-     "-m elf_x86_64 -shared -z bndplt" ""
-     "--64" {mpx3b.s} {} "libcall.so"}
-    {"Build mpx3"
-     "-m elf_x86_64 -z bndplt tmpdir/libcall.so" ""
-     "--64" {mpx3a.s} {{objdump -dw mpx3.dd}} "mpx3"}
-    {"Build libcall1.so"
-     "-m elf_x86_64 -shared -z bndplt" ""
-     "--64" {mpx4b.s} {} "libcall1.so"}
-    {"Build mpx4"
-     "-m elf_x86_64 -z bndplt --hash-style=sysv tmpdir/libcall1.so \
-      -z max-page-size=0x200000 -z noseparate-code" ""
-     "--64 -mx86-used-note=no" {mpx4a.s} {{objdump -dw mpx4.dd}} "mpx4"}
-    {"Build mpx3 (-z now)"
-     "-z now -m elf_x86_64 -z bndplt --hash-style=sysv tmpdir/libcall.so \
-      -z max-page-size=0x200000 -z noseparate-code" ""
-     "--64 -mx86-used-note=no" {mpx3a.s} {{objdump -dw mpx3n.dd}} "mpx3n"}
-    {"Build mpx4 (-z now)"
-     "-z now -m elf_x86_64 -z bndplt --hash-style=sysv tmpdir/libcall1.so \
-      -z max-page-size=0x200000 -z noseparate-code" ""
-     "--64 -mx86-used-note=no" {mpx4a.s} {{objdump -dw mpx4n.dd}} "mpx4n"}
-}
-
-run_ld_link_exec_tests $run_tests
-
-run_dump_test "bnd-branch-1"
-run_dump_test "bnd-ifunc-1"
-run_dump_test "bnd-ifunc-2"
-run_dump_test "bnd-plt-1"
-run_dump_test "bnd-branch-1-now"
-run_dump_test "bnd-ifunc-1-now"
-run_dump_test "bnd-ifunc-2-now"
-run_dump_test "bnd-plt-1-now"
diff --git a/ld/testsuite/ld-x86-64/mpx1.out b/ld/testsuite/ld-x86-64/mpx1.out
deleted file mode 100644
index 463021151d2..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1.out
+++ /dev/null
@@ -1,2 +0,0 @@
-foo1
-foo2
diff --git a/ld/testsuite/ld-x86-64/mpx1a.c b/ld/testsuite/ld-x86-64/mpx1a.c
deleted file mode 100644
index e1185b5fe6f..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1a.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void
-foo1 (void)
-{
-  printf ("foo1\n");
-}
diff --git a/ld/testsuite/ld-x86-64/mpx1a.rd b/ld/testsuite/ld-x86-64/mpx1a.rd
deleted file mode 100644
index d66524c8834..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1a.rd
+++ /dev/null
@@ -1,3 +0,0 @@
-#...
-[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
-#...
diff --git a/ld/testsuite/ld-x86-64/mpx1b.c b/ld/testsuite/ld-x86-64/mpx1b.c
deleted file mode 100644
index 389ac101344..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1b.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void
-foo2 (void)
-{
-  printf ("foo2\n");
-}
diff --git a/ld/testsuite/ld-x86-64/mpx1c.c b/ld/testsuite/ld-x86-64/mpx1c.c
deleted file mode 100644
index 12c7806ff0c..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1c.c
+++ /dev/null
@@ -1,10 +0,0 @@
-extern void foo1 (void);
-extern void foo2 (void);
-
-int
-main (void)
-{
-  foo1 ();
-  foo2 ();
-  return 0;
-}
diff --git a/ld/testsuite/ld-x86-64/mpx1c.rd b/ld/testsuite/ld-x86-64/mpx1c.rd
deleted file mode 100644
index d66524c8834..00000000000
--- a/ld/testsuite/ld-x86-64/mpx1c.rd
+++ /dev/null
@@ -1,3 +0,0 @@
-#...
-[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
-#...
diff --git a/ld/testsuite/ld-x86-64/mpx2.out b/ld/testsuite/ld-x86-64/mpx2.out
deleted file mode 100644
index 463021151d2..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2.out
+++ /dev/null
@@ -1,2 +0,0 @@
-foo1
-foo2
diff --git a/ld/testsuite/ld-x86-64/mpx2a.c b/ld/testsuite/ld-x86-64/mpx2a.c
deleted file mode 100644
index e1185b5fe6f..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2a.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void
-foo1 (void)
-{
-  printf ("foo1\n");
-}
diff --git a/ld/testsuite/ld-x86-64/mpx2a.rd b/ld/testsuite/ld-x86-64/mpx2a.rd
deleted file mode 100644
index d66524c8834..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2a.rd
+++ /dev/null
@@ -1,3 +0,0 @@
-#...
-[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
-#...
diff --git a/ld/testsuite/ld-x86-64/mpx2b.c b/ld/testsuite/ld-x86-64/mpx2b.c
deleted file mode 100644
index 389ac101344..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2b.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-void
-foo2 (void)
-{
-  printf ("foo2\n");
-}
diff --git a/ld/testsuite/ld-x86-64/mpx2c.c b/ld/testsuite/ld-x86-64/mpx2c.c
deleted file mode 100644
index 12c7806ff0c..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2c.c
+++ /dev/null
@@ -1,10 +0,0 @@
-extern void foo1 (void);
-extern void foo2 (void);
-
-int
-main (void)
-{
-  foo1 ();
-  foo2 ();
-  return 0;
-}
diff --git a/ld/testsuite/ld-x86-64/mpx2c.rd b/ld/testsuite/ld-x86-64/mpx2c.rd
deleted file mode 100644
index d66524c8834..00000000000
--- a/ld/testsuite/ld-x86-64/mpx2c.rd
+++ /dev/null
@@ -1,3 +0,0 @@
-#...
-[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
-#...
diff --git a/ld/testsuite/ld-x86-64/mpx3.dd b/ld/testsuite/ld-x86-64/mpx3.dd
deleted file mode 100644
index 729b1cf4e97..00000000000
--- a/ld/testsuite/ld-x86-64/mpx3.dd
+++ /dev/null
@@ -1,28 +0,0 @@
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+[a-f0-9]+ <.plt>:
-[  	]*[a-f0-9]+:	ff ([0-9a-f]{2} ){5}   	push   0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8>
-[  	]*[a-f0-9]+:	f2 ff ([0-9a-f]{2} ){5}	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]+:	68 00 00 00 00       	push   \$0x0
-[  	]*[a-f0-9]+:	f2 e9 ([0-9a-f]{2} ){4}   	bnd jmp [a-f0-9]+ <call1@plt-0x20>
-[  	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+[a-f0-9]+ <call1@plt>:
-[  	]*[a-f0-9]+:	f2 ff ([0-9a-f]{2} ){5}	bnd jmp \*0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <call1>
-[  	]*[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+[a-f0-9]+ <_start>:
-[  	]*[a-f0-9]+:	bf ([0-9a-f]{2} ){4}      	mov    \$0x[a-f0-9]+,%edi
-[  	]*[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
-[  	]*[a-f0-9]+:	48 8b ([0-9a-f]{2} ){5}	mov    0x[a-f0-9]+\(%rip\),%rdi        # [a-f0-9]+ <call2>
-[  	]*[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
-[  	]*[a-f0-9]+:	c3                   	ret *
-#pass
diff --git a/ld/testsuite/ld-x86-64/mpx3a.s b/ld/testsuite/ld-x86-64/mpx3a.s
deleted file mode 100644
index 28cb580b46f..00000000000
--- a/ld/testsuite/ld-x86-64/mpx3a.s
+++ /dev/null
@@ -1,16 +0,0 @@
-	.text
-	.globl	_start
-	.type	_start, @function
-_start:
-	movl	$call1, %edi
-	bnd call *%rdi
-	movq	func(%rip), %rdi
-	bnd call *%rdi
-	ret
-	.size	_start, .-_start
-	.globl	func
-	.data
-	.type	func, @object
-	.size	func, 8
-func:
-	.quad	call2
diff --git a/ld/testsuite/ld-x86-64/mpx3b.s b/ld/testsuite/ld-x86-64/mpx3b.s
deleted file mode 100644
index 1ee2557a9c9..00000000000
--- a/ld/testsuite/ld-x86-64/mpx3b.s
+++ /dev/null
@@ -1,11 +0,0 @@
-	.text
-	.globl	call1
-	.type	call1, @function
-call1:
-	ret
-	.size	call1, .-call1
-	.globl	call2
-	.type	call2, @function
-call2:
-	ret
-	.size	call2, .-call2
diff --git a/ld/testsuite/ld-x86-64/mpx3n.dd b/ld/testsuite/ld-x86-64/mpx3n.dd
deleted file mode 100644
index a1eba8e975b..00000000000
--- a/ld/testsuite/ld-x86-64/mpx3n.dd
+++ /dev/null
@@ -1,28 +0,0 @@
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+400220 <.plt>:
- +[a-f0-9]+:	ff 35 a2 01 20 00    	push   0x2001a2\(%rip\)        # 6003c8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 a3 01 20 00 	bnd jmp \*0x2001a3\(%rip\)        # 6003d0 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 400220 <call1@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+400240 <call1@plt>:
- +[a-f0-9]+:	f2 ff 25 91 01 20 00 	bnd jmp \*0x200191\(%rip\)        # 6003d8 <call1>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+400248 <_start>:
- +[a-f0-9]+:	bf 40 02 40 00       	mov    \$0x400240,%edi
- +[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
- +[a-f0-9]+:	48 8b 3d 89 01 20 00 	mov    0x200189\(%rip\),%rdi        # 6003e0 <call2>
- +[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
- +[a-f0-9]+:	c3                   	ret *
-#pass
diff --git a/ld/testsuite/ld-x86-64/mpx4.dd b/ld/testsuite/ld-x86-64/mpx4.dd
deleted file mode 100644
index 50a0fbca502..00000000000
--- a/ld/testsuite/ld-x86-64/mpx4.dd
+++ /dev/null
@@ -1,24 +0,0 @@
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+4001f0 <.plt>:
- +[a-f0-9]+:	ff 35 42 01 20 00    	push   0x200142\(%rip\)        # 600338 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 43 01 20 00 	bnd jmp \*0x200143\(%rip\)        # 600340 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 4001f0 <call1@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+400210 <call1@plt>:
- +[a-f0-9]+:	f2 ff 25 31 01 20 00 	bnd jmp \*0x200131\(%rip\)        # 600348 <call1>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+400218 <_start>:
- +[a-f0-9]+:	bf 10 02 40 00       	mov    \$0x400210,%edi
- +[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
diff --git a/ld/testsuite/ld-x86-64/mpx4a.s b/ld/testsuite/ld-x86-64/mpx4a.s
deleted file mode 100644
index 0ee2723b7c2..00000000000
--- a/ld/testsuite/ld-x86-64/mpx4a.s
+++ /dev/null
@@ -1,6 +0,0 @@
-.text
-    .globl     _start
-    .type      _start, @function
-_start:
-    movl      $call1, %edi
-    bnd call *%rdi
diff --git a/ld/testsuite/ld-x86-64/mpx4b.s b/ld/testsuite/ld-x86-64/mpx4b.s
deleted file mode 100644
index 0e9ac14e48e..00000000000
--- a/ld/testsuite/ld-x86-64/mpx4b.s
+++ /dev/null
@@ -1,5 +0,0 @@
-.text
-    .globl     call1
-    .type      call1, @function
-call1:
-     ret
diff --git a/ld/testsuite/ld-x86-64/mpx4n.dd b/ld/testsuite/ld-x86-64/mpx4n.dd
deleted file mode 100644
index 92177bb1216..00000000000
--- a/ld/testsuite/ld-x86-64/mpx4n.dd
+++ /dev/null
@@ -1,25 +0,0 @@
-.*: +file format .*
-
-
-Disassembly of section .plt:
-
-0+4001f0 <.plt>:
- +[a-f0-9]+:	ff 35 62 01 20 00    	push   0x200162\(%rip\)        # 600358 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 63 01 20 00 	bnd jmp \*0x200163\(%rip\)        # 600360 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 4001f0 <call1@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+400210 <call1@plt>:
- +[a-f0-9]+:	f2 ff 25 51 01 20 00 	bnd jmp \*0x200151\(%rip\)        # 600368 <call1>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+400218 <_start>:
- +[a-f0-9]+:	bf 10 02 40 00       	mov    \$0x400210,%edi
- +[a-f0-9]+:	f2 ff d7             	bnd call \*%rdi
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr20800a.S b/ld/testsuite/ld-x86-64/pr20800a.S
deleted file mode 100644
index 95024e280e5..00000000000
--- a/ld/testsuite/ld-x86-64/pr20800a.S
+++ /dev/null
@@ -1,18 +0,0 @@
-	.text
-	.globl	main
-	.type	main, @function
-main:
-.L2:
-	leaq	.L2(%rip), %rax
-	movabsq	$_GLOBAL_OFFSET_TABLE_-.L2, %r11
-	movabsq	$bar@PLTOFF, %rdx
-	pushq	%r15
-	addq	%r11, %rax
-	movq	%rax, %r15
-	addq	%rax, %rdx
-	call	*%rdx
-	xorl	%eax, %eax
-	popq	%r15
-	ret
-	.size	main, .-main
-	.section	.note.GNU-stack
diff --git a/ld/testsuite/ld-x86-64/pr20800b.S b/ld/testsuite/ld-x86-64/pr20800b.S
deleted file mode 100644
index c4eeb4f55a3..00000000000
--- a/ld/testsuite/ld-x86-64/pr20800b.S
+++ /dev/null
@@ -1,21 +0,0 @@
-	.section	.rodata.str1.1,"aMS",@progbits,1
-.LC0:
-	.string	"PASS\n"
-	.text
-	.globl	bar
-	.type	bar, @function
-bar:
-.L2:
-	leaq	.L2(%rip), %rdx
-	movabsq	$_GLOBAL_OFFSET_TABLE_-.L2, %r11
-	movabsq	$.LC0@GOTOFF, %rax
-	pushq	%r15
-	movabsq	$printf@PLTOFF, %rcx
-	addq	%r11, %rdx
-	popq	%r15
-	leaq	(%rdx,%rax), %rdi
-	addq	%rdx, %rcx
-	xorl	%eax, %eax
-	jmp	*%rcx
-	.size	bar, .-bar
-	.section	.note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-x86-64/pr21038a-now.d b/ld/testsuite/ld-x86-64/pr21038a-now.d
deleted file mode 100644
index 1fae617cb2e..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038a-now.d
+++ /dev/null
@@ -1,68 +0,0 @@
-#name: PR ld/21038 (.plt.got, -z now)
-#source: pr21038a.s
-#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001b0..00000000000001c0
-  DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 00000000000001b6
-  DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 00000000000001c0
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000001c0..00000000000001c8
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1b0 <.plt>:
- +[a-f0-9]+:	ff 35 32 fe 3f 00    	push   0x3ffe32\(%rip\)        # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 33 fe 3f 00 	bnd jmp \*0x3ffe33\(%rip\)        # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
-
-Disassembly of section .plt.got:
-
-0+1c0 <func@plt>:
- +[a-f0-9]+:	f2 ff 25 31 fe 3f 00 	bnd jmp \*0x3ffe31\(%rip\)        # 3ffff8 <func>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+1c8 <foo>:
- +[a-f0-9]+:	e8 f3 ff ff ff       	call   1c0 <func@plt>
- +[a-f0-9]+:	48 8b 05 24 fe 3f 00 	mov    0x3ffe24\(%rip\),%rax        # 3ffff8 <func>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038a.d b/ld/testsuite/ld-x86-64/pr21038a.d
deleted file mode 100644
index 06e504ec956..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038a.d
+++ /dev/null
@@ -1,67 +0,0 @@
-#name: PR ld/21038 (.plt.got)
-#as: --64
-#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001b0..00000000000001c0
-  DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 00000000000001b6
-  DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 00000000000001c0
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000001c0..00000000000001c8
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1b0 <.plt>:
- +[a-f0-9]+:	ff 35 3a fe 3f 00    	push   0x3ffe3a\(%rip\)        # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 3b fe 3f 00 	bnd jmp \*0x3ffe3b\(%rip\)        # 3ffff8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
-
-Disassembly of section .plt.got:
-
-0+1c0 <func@plt>:
- +[a-f0-9]+:	f2 ff 25 19 fe 3f 00 	bnd jmp \*0x3ffe19\(%rip\)        # 3fffe0 <func>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+1c8 <foo>:
- +[a-f0-9]+:	e8 f3 ff ff ff       	call   1c0 <func@plt>
- +[a-f0-9]+:	48 8b 05 0c fe 3f 00 	mov    0x3ffe0c\(%rip\),%rax        # 3fffe0 <func>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038a.s b/ld/testsuite/ld-x86-64/pr21038a.s
deleted file mode 100644
index d9a1b4c7f22..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038a.s
+++ /dev/null
@@ -1,8 +0,0 @@
-	.text
-	.globl foo
-	.type foo, @function
-foo:
-	.cfi_startproc
-	call	func@plt
-	movq	func@GOTPCREL(%rip), %rax
-	.cfi_endproc
diff --git a/ld/testsuite/ld-x86-64/pr21038b-now.d b/ld/testsuite/ld-x86-64/pr21038b-now.d
deleted file mode 100644
index 72e5109f5db..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038b-now.d
+++ /dev/null
@@ -1,70 +0,0 @@
-#name: PR ld/21038 (.plt.sec, -z now)
-#source: pr21038b.s
-#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001d8..00000000000001dd
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001b0..00000000000001d0
-  DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 00000000000001b6
-  DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 00000000000001c0
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000001d0..00000000000001d8
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1b0 <.plt>:
- +[a-f0-9]+:	ff 35 32 fe 3f 00    	push   0x3ffe32\(%rip\)        # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 33 fe 3f 00 	bnd jmp \*0x3ffe33\(%rip\)        # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 1b0 <func@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+1d0 <func@plt>:
- +[a-f0-9]+:	f2 ff 25 21 fe 3f 00 	bnd jmp \*0x3ffe21\(%rip\)        # 3ffff8 <func>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+1d8 <foo>:
- +[a-f0-9]+:	e8 f3 ff ff ff       	call   1d0 <func@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038b.d b/ld/testsuite/ld-x86-64/pr21038b.d
deleted file mode 100644
index 0e77d2c89d7..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038b.d
+++ /dev/null
@@ -1,69 +0,0 @@
-#name: PR ld/21038 (.plt.sec)
-#as: --64
-#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001d8..00000000000001dd
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001b0..00000000000001d0
-  DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 00000000000001b6
-  DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 00000000000001c0
-  DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000001d0..00000000000001d8
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1b0 <.plt>:
- +[a-f0-9]+:	ff 35 3a fe 3f 00    	push   0x3ffe3a\(%rip\)        # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 3b fe 3f 00 	bnd jmp \*0x3ffe3b\(%rip\)        # 3ffff8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 1b0 <func@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.sec:
-
-0+1d0 <func@plt>:
- +[a-f0-9]+:	f2 ff 25 29 fe 3f 00 	bnd jmp \*0x3ffe29\(%rip\)        # 400000 <func>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+1d8 <foo>:
- +[a-f0-9]+:	e8 f3 ff ff ff       	call   1d0 <func@plt>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038b.s b/ld/testsuite/ld-x86-64/pr21038b.s
deleted file mode 100644
index 3a8fc4719a3..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038b.s
+++ /dev/null
@@ -1,7 +0,0 @@
-	.text
-	.globl foo
-	.type foo, @function
-foo:
-	.cfi_startproc
-	call	func@plt
-	.cfi_endproc
diff --git a/ld/testsuite/ld-x86-64/pr21038c-now.d b/ld/testsuite/ld-x86-64/pr21038c-now.d
deleted file mode 100644
index cda1c446c2d..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038c-now.d
+++ /dev/null
@@ -1,87 +0,0 @@
-#name: PR ld/21038 (.plt.got and .plt.sec, -z now)
-#source: pr21038c.s
-#as: --64
-#ld: -z now -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000220..0000000000000231
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001f0..0000000000000210
-  DW_CFA_def_cfa_offset: 16
-  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_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000014 0000005c FDE cie=00000000 pc=0000000000000210..0000000000000218
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+70 0000000000000010 00000074 FDE cie=00000000 pc=0000000000000218..0000000000000220
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1f0 <.plt>:
- +[a-f0-9]+:	ff 35 ea fd 3f 00    	push   0x3ffdea\(%rip\)        # 3fffe0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 eb fd 3f 00 	bnd jmp \*0x3ffdeb\(%rip\)        # 3fffe8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 1f0 <func1@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.got:
-
-0+210 <func1@plt>:
- +[a-f0-9]+:	f2 ff 25 e1 fd 3f 00 	bnd jmp \*0x3ffde1\(%rip\)        # 3ffff8 <func1>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .plt.sec:
-
-0+218 <func2@plt>:
- +[a-f0-9]+:	f2 ff 25 d1 fd 3f 00 	bnd jmp \*0x3ffdd1\(%rip\)        # 3ffff0 <func2>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+220 <foo>:
- +[a-f0-9]+:	e8 eb ff ff ff       	call   210 <func1@plt>
- +[a-f0-9]+:	e8 ee ff ff ff       	call   218 <func2@plt>
- +[a-f0-9]+:	48 8b 05 c7 fd 3f 00 	mov    0x3ffdc7\(%rip\),%rax        # 3ffff8 <func1>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038c.d b/ld/testsuite/ld-x86-64/pr21038c.d
deleted file mode 100644
index afbdb56086c..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038c.d
+++ /dev/null
@@ -1,86 +0,0 @@
-#name: PR ld/21038 (.plt.got and .plt.sec)
-#as: --64
-#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code $NO_DT_RELR_LDFLAGS
-#objdump: -dw -Wf
-
-.*: +file format .*
-
-Contents of the .eh_frame section:
-
-
-0+ 0000000000000014 00000000 CIE
-  Version:               1
-  Augmentation:          "zR"
-  Code alignment factor: 1
-  Data alignment factor: -8
-  Return address column: 16
-  Augmentation data:     1b
-  DW_CFA_def_cfa: r7 \(rsp\) ofs 8
-  DW_CFA_offset: r16 \(rip\) at cfa-8
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000220..0000000000000231
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001f0..0000000000000210
-  DW_CFA_def_cfa_offset: 16
-  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_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+58 0000000000000014 0000005c FDE cie=00000000 pc=0000000000000210..0000000000000218
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-0+70 0000000000000010 00000074 FDE cie=00000000 pc=0000000000000218..0000000000000220
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-
-
-Disassembly of section .plt:
-
-0+1f0 <.plt>:
- +[a-f0-9]+:	ff 35 fa fd 3f 00    	push   0x3ffdfa\(%rip\)        # 3ffff0 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 fb fd 3f 00 	bnd jmp \*0x3ffdfb\(%rip\)        # 3ffff8 <_GLOBAL_OFFSET_TABLE_\+0x10>
- +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
- +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	f2 e9 e5 ff ff ff    	bnd jmp 1f0 <func1@plt-0x20>
- +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
-
-Disassembly of section .plt.got:
-
-0+210 <func1@plt>:
- +[a-f0-9]+:	f2 ff 25 c9 fd 3f 00 	bnd jmp \*0x3ffdc9\(%rip\)        # 3fffe0 <func1>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .plt.sec:
-
-0+218 <func2@plt>:
- +[a-f0-9]+:	f2 ff 25 e1 fd 3f 00 	bnd jmp \*0x3ffde1\(%rip\)        # 400000 <func2>
- +[a-f0-9]+:	90                   	nop
-
-Disassembly of section .text:
-
-0+220 <foo>:
- +[a-f0-9]+:	e8 eb ff ff ff       	call   210 <func1@plt>
- +[a-f0-9]+:	e8 ee ff ff ff       	call   218 <func2@plt>
- +[a-f0-9]+:	48 8b 05 af fd 3f 00 	mov    0x3ffdaf\(%rip\),%rax        # 3fffe0 <func1>
-#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038c.s b/ld/testsuite/ld-x86-64/pr21038c.s
deleted file mode 100644
index 38fc10d8048..00000000000
--- a/ld/testsuite/ld-x86-64/pr21038c.s
+++ /dev/null
@@ -1,9 +0,0 @@
-	.text
-	.globl foo
-	.type foo, @function
-foo:
-	.cfi_startproc
-	call	func1@plt
-	call	func2@plt
-	movq	func1@GOTPCREL(%rip), %rax
-	.cfi_endproc
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index e30f210bf13..6bee767423b 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -2002,130 +2002,6 @@ if { [isnative] && [check_compiler_available] } {
 	]
     }
 
-    if { [istarget "x86_64-*-linux*"] \
-	 && ![istarget "x86_64-*-linux*-gnux32"]} {
-
-	run_cc_link_tests [list \
-	    [list \
-		"Build plt-main with -z bndplt" \
-		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -Wl,-z,bndplt \
-		 -Wl,-z,noseparate-code,-z,max-page-size=0x200000" \
-		"-Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
-		{ plt-main5.c } \
-		{{objdump {-drw} plt-main-bnd.dd}} \
-		"plt-main-bnd" \
-	    ] \
-	    [list \
-		"Build plt-main with PIE and -z bndplt" \
-		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie \
-		 -Wl,-z,bndplt,-z,noseparate-code \
-		 -Wl,-z,max-page-size=0x200000" \
-		"-fPIC -Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
-		{ plt-main5.c } \
-		{{objdump {-drw} plt-main-bnd.dd}} \
-		"plt-main-pie-bnd" \
-	    ] \
-	    [list \
-		"Build plt-main with -z bndplt -z now" \
-		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -Wl,-z,bndplt \
-		 -Wl,-z,now,-z,noseparate-code,-z,max-page-size=0x200000" \
-		"-Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
-		{ plt-main5.c } \
-		{{readelf {-SW} plt-main-bnd-now.rd} {objdump {-drw} plt-main-bnd.dd}} \
-		"plt-main-bnd-now" \
-	    ] \
-	    [list \
-		"Build plt-main with PIE and -z bndplt -z now" \
-		"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie \
-		 -Wl,-z,bndplt,-z,now,-z,noseparate-code \
-		 -Wl,-z,max-page-size=0x200000" \
-		"-fPIC -Wa,-mx86-used-note=yes $NOCF_PROTECTION_CFLAGS" \
-		{ plt-main5.c } \
-		{{readelf {-SW} plt-main-bnd-now.rd} {objdump {-drw} plt-main-bnd.dd}} \
-		"plt-main-pie-bnd-now" \
-	    ] \
-	]
-
-	run_ld_link_exec_tests [list \
-	    [list \
-		"Run plt-main with -z bndplt" \
-		"-Wl,--no-as-needed,-z,bndplt tmpdir/plt-main1.o \
-		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
-		"-Wa,-mx86-used-note=yes" \
-		{ plt-main5.c } \
-		"plt-main-bnd" \
-		"plt-main.out" \
-	    ] \
-	    [list \
-		"Run plt-main with PIE and -z bndplt" \
-		"-Wl,--no-as-needed,-z,bndplt -pie tmpdir/plt-main1.o \
-		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
-		"-Wa,-mx86-used-note=yes" \
-		{ plt-main5.c } \
-		"plt-main-pie-bnd" \
-		"plt-main.out" \
-		"-fPIC" \
-	    ] \
-	    [list \
-		"Run plt-main with -z bndplt -z now" \
-		"-Wl,--no-as-needed,-z,bndplt,-z,now tmpdir/plt-main1.o \
-		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
-		"-Wa,-mx86-used-note=yes" \
-		{ plt-main5.c } \
-		"plt-main-bnd-now" \
-		"plt-main.out" \
-	    ] \
-	    [list \
-		"Run plt-main with PIE and -z bndplt -z now" \
-		"-Wl,--no-as-needed,-z,bndplt,-z,now -pie tmpdir/plt-main1.o \
-		 tmpdir/plt-main2.o tmpdir/plt-main3.o \
-		 tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
-		"-Wa,-mx86-used-note=yes" \
-		{ plt-main5.c } \
-		"plt-main-pie-bnd-now" \
-		"plt-main.out" \
-		"-fPIC" \
-	    ] \
-	    [list \
-		"Run pr20800" \
-		"-Wl,-z,now -pie" \
-		"-Wa,-mx86-used-note=yes" \
-		{ pr20800a.S pr20800b.S } \
-		"pr20800" \
-		"pass.out" \
-	    ] \
-	]
-	if { [check_ifunc_attribute_available] } {
-	    run_ld_link_exec_tests [list \
-		[list \
-		    "Run pr21481a" \
-		    "$NOPIE_LDFLAGS -Wl,-z,bndplt" \
-		    "-Wa,-mx86-used-note=yes" \
-		    { pr21481a.c pr21481b.S } \
-		    "pr21481a" \
-		    "pass.out" \
-		     "$NOPIE_CFLAGS" \
-		] \
-		[list \
-		    "Run pr21481b" \
-		    "$NOPIE_LDFLAGS -Wl,-z,bndplt,-z,now" \
-		    "-Wa,-mx86-used-note=yes" \
-		    { pr21481a.c pr21481b.S } \
-		    "pr21481b" \
-		    "pass.out" \
-		    "$NOPIE_CFLAGS" \
-		] \
-	    ]
-	}
-    }
-
     if { [istarget "x86_64-*-linux*"] } {
 	set pltdump {{objdump {-drw} plt-main-ibt.dd}}
 	set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt.dd}}
@@ -2331,14 +2207,8 @@ run_dump_test "pltgot-1"
 run_dump_test "pltgot-2"
 run_dump_test "pr20830a"
 run_dump_test "pr20830b"
-run_dump_test "pr21038a"
-run_dump_test "pr21038b"
-run_dump_test "pr21038c"
 run_dump_test "pr20830a-now"
 run_dump_test "pr20830b-now"
-run_dump_test "pr21038a-now"
-run_dump_test "pr21038b-now"
-run_dump_test "pr21038c-now"
 run_dump_test "ibt-plt-1"
 run_dump_test "ibt-plt-1-x32"
 run_dump_test "ibt-plt-2a"
-- 
2.38.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT
  2022-12-06 21:44 [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
  2022-12-08  8:21 ` [PATCH] ld, gold: remove support for -z bndplt (MPX prefix) Martin Liška
@ 2022-12-08 16:12 ` H.J. Lu
  2022-12-12 20:34   ` H.J. Lu
  1 sibling, 1 reply; 8+ messages in thread
From: H.J. Lu @ 2022-12-08 16:12 UTC (permalink / raw)
  To: binutils, Cary Coutant

On Tue, Dec 6, 2022 at 1:44 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Since MPX support has been removed from x86-64 psABI, remove BND from
> 64-bit IBT PLT by using 32-bit IBT PLT.
>
>         PR gold/29851
>         * x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry):
>         Renamed to ...
>         (Output_data_plt_x86_64_ibt<size>::first_plt_entry): This.
>         (Output_data_plt_x86_64_ibt<64>::first_plt_entry): Removed.
>         (Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry):
>         Drop the size == 32 check.
>         (Output_data_plt_x86_64_ibt<32>::plt_entry): Renamed to ...
>         (Output_data_plt_x86_64_ibt<size>::plt_entry): This.
>         (Output_data_plt_x86_64_ibt<64>::plt_entry): Removed.
>         (Output_data_plt_x86_64_ibt<32>::aplt_entry): Renamed to ...
>         (Output_data_plt_x86_64_ibt<size>::aplt_entry): This.
>         (Output_data_plt_x86_64_ibt<64>::aplt_entry): Removed.
>         (Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry): Drop the
>         size == 32 check.
>         (Output_data_plt_x86_64_ibt<size>::fill_aplt_entry): Likewise.
> ---
>  gold/x86_64.cc | 57 ++++++++------------------------------------------
>  1 file changed, 9 insertions(+), 48 deletions(-)
>
> diff --git a/gold/x86_64.cc b/gold/x86_64.cc
> index 86b232a5e2d..83684b90fcf 100644
> --- a/gold/x86_64.cc
> +++ b/gold/x86_64.cc
> @@ -2328,12 +2328,10 @@ Output_data_plt_x86_64_ibt<size>::set_final_data_size()
>
>  // The first entry in the IBT PLT.
>
> -template<>
> +template<int size>
>  const unsigned char
> -Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
> +Output_data_plt_x86_64_ibt<size>::first_plt_entry[plt_entry_size] =
>  {
> -  // MPX isn't supported for x32, so we don't need the BND prefix.
> -  // From AMD64 ABI Draft 0.98, page 76
>    0xff, 0x35,           // pushq contents of memory address
>    0, 0, 0, 0,           // replaced with address of .got + 8
>    0xff, 0x25,           // jmp indirect
> @@ -2341,18 +2339,6 @@ Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
>    0x90, 0x90, 0x90, 0x90 // noop (x4)
>  };
>
> -template<>
> -const unsigned char
> -Output_data_plt_x86_64_ibt<64>::first_plt_entry[plt_entry_size] =
> -{
> -  // Use the BND prefix so that IBT is compatible with MPX.
> -  0xff, 0x35,          // pushq contents of memory address
> -  0, 0, 0, 0,          // replaced with address of .got + 8
> -  0xf2, 0xff, 0x25,    // bnd jmp indirect
> -  0, 0, 0, 0,          // replaced with address of .got + 16
> -  0x0f, 0x1f, 0x00     // nop
> -};
> -
>  template<int size>
>  void
>  Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
> @@ -2362,7 +2348,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
>  {
>    // Offsets to the addresses needing relocation.
>    const unsigned int roff1 = 2;
> -  const unsigned int roff2 = (size == 32) ? 8 : 9;
> +  const unsigned int roff2 = 8;
>
>    memcpy(pov, first_plt_entry, plt_entry_size);
>    // We do a jmp relative to the PC at the end of this instruction.
> @@ -2376,9 +2362,9 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
>
>  // Subsequent entries in the IBT PLT.
>
> -template<>
> +template<int size>
>  const unsigned char
> -Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
> +Output_data_plt_x86_64_ibt<size>::plt_entry[plt_entry_size] =
>  {
>    // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
>    0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> @@ -2389,24 +2375,11 @@ Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
>    0x90, 0x90                   // nop
>  };
>
> -template<>
> -const unsigned char
> -Output_data_plt_x86_64_ibt<64>::plt_entry[plt_entry_size] =
> -{
> -  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> -  0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> -  0x68,                                // pushq immediate
> -  0, 0, 0, 0,                  // replaced with offset into relocation table
> -  0xf2, 0xe9,                  // bnd jmpq relative
> -  0, 0, 0, 0,                  // replaced with offset to start of .plt
> -  0x90                         // nop
> -};
> -
>  // Entries in the IBT Additional PLT.
>
> -template<>
> +template<int size>
>  const unsigned char
> -Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
> +Output_data_plt_x86_64_ibt<size>::aplt_entry[aplt_entry_size] =
>  {
>    // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
>    0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> @@ -2416,18 +2389,6 @@ Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
>    0x90, 0x90                   // nop
>  };
>
> -template<>
> -const unsigned char
> -Output_data_plt_x86_64_ibt<64>::aplt_entry[aplt_entry_size] =
> -{
> -  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> -  0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> -  0xf2, 0xff, 0x25,            // bnd jmpq indirect
> -  0, 0, 0, 0,                  // replaced with address of symbol in .got
> -  0x0f, 0x1f, 0x04, 0x00,      // nop
> -  0x90,                                // nop
> -};
> -
>  template<int size>
>  unsigned int
>  Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
> @@ -2440,7 +2401,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
>  {
>    // Offsets to the addresses needing relocation.
>    const unsigned int roff1 = 5;
> -  const unsigned int roff2 = (size == 32) ? 10 : 11;
> +  const unsigned int roff2 = 10;
>
>    memcpy(pov, plt_entry, plt_entry_size);
>    elfcpp::Swap_unaligned<32, false>::writeval(pov + roff1, plt_index);
> @@ -2459,7 +2420,7 @@ Output_data_plt_x86_64_ibt<size>::fill_aplt_entry(
>      unsigned int plt_index)
>  {
>    // Offset to the address needing relocation.
> -  const unsigned int roff = (size == 32) ? 6 : 7;
> +  const unsigned int roff = 6;
>
>    // Check PC-relative offset overflow in PLT entry.
>    uint64_t plt_got_pcrel_offset = (got_address + got_offset
> --
> 2.38.1
>

Hi Cary,

Is it OK for gold?

Thanks.

-- 
H.J.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT
  2022-12-08 16:12 ` [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
@ 2022-12-12 20:34   ` H.J. Lu
  2022-12-12 23:57     ` Cary Coutant
  0 siblings, 1 reply; 8+ messages in thread
From: H.J. Lu @ 2022-12-12 20:34 UTC (permalink / raw)
  To: binutils, Cary Coutant

On Thu, Dec 8, 2022 at 8:12 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Tue, Dec 6, 2022 at 1:44 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > Since MPX support has been removed from x86-64 psABI, remove BND from
> > 64-bit IBT PLT by using 32-bit IBT PLT.
> >
> >         PR gold/29851
> >         * x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry):
> >         Renamed to ...
> >         (Output_data_plt_x86_64_ibt<size>::first_plt_entry): This.
> >         (Output_data_plt_x86_64_ibt<64>::first_plt_entry): Removed.
> >         (Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry):
> >         Drop the size == 32 check.
> >         (Output_data_plt_x86_64_ibt<32>::plt_entry): Renamed to ...
> >         (Output_data_plt_x86_64_ibt<size>::plt_entry): This.
> >         (Output_data_plt_x86_64_ibt<64>::plt_entry): Removed.
> >         (Output_data_plt_x86_64_ibt<32>::aplt_entry): Renamed to ...
> >         (Output_data_plt_x86_64_ibt<size>::aplt_entry): This.
> >         (Output_data_plt_x86_64_ibt<64>::aplt_entry): Removed.
> >         (Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry): Drop the
> >         size == 32 check.
> >         (Output_data_plt_x86_64_ibt<size>::fill_aplt_entry): Likewise.
> > ---
> >  gold/x86_64.cc | 57 ++++++++------------------------------------------
> >  1 file changed, 9 insertions(+), 48 deletions(-)
> >
> > diff --git a/gold/x86_64.cc b/gold/x86_64.cc
> > index 86b232a5e2d..83684b90fcf 100644
> > --- a/gold/x86_64.cc
> > +++ b/gold/x86_64.cc
> > @@ -2328,12 +2328,10 @@ Output_data_plt_x86_64_ibt<size>::set_final_data_size()
> >
> >  // The first entry in the IBT PLT.
> >
> > -template<>
> > +template<int size>
> >  const unsigned char
> > -Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
> > +Output_data_plt_x86_64_ibt<size>::first_plt_entry[plt_entry_size] =
> >  {
> > -  // MPX isn't supported for x32, so we don't need the BND prefix.
> > -  // From AMD64 ABI Draft 0.98, page 76
> >    0xff, 0x35,           // pushq contents of memory address
> >    0, 0, 0, 0,           // replaced with address of .got + 8
> >    0xff, 0x25,           // jmp indirect
> > @@ -2341,18 +2339,6 @@ Output_data_plt_x86_64_ibt<32>::first_plt_entry[plt_entry_size] =
> >    0x90, 0x90, 0x90, 0x90 // noop (x4)
> >  };
> >
> > -template<>
> > -const unsigned char
> > -Output_data_plt_x86_64_ibt<64>::first_plt_entry[plt_entry_size] =
> > -{
> > -  // Use the BND prefix so that IBT is compatible with MPX.
> > -  0xff, 0x35,          // pushq contents of memory address
> > -  0, 0, 0, 0,          // replaced with address of .got + 8
> > -  0xf2, 0xff, 0x25,    // bnd jmp indirect
> > -  0, 0, 0, 0,          // replaced with address of .got + 16
> > -  0x0f, 0x1f, 0x00     // nop
> > -};
> > -
> >  template<int size>
> >  void
> >  Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
> > @@ -2362,7 +2348,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
> >  {
> >    // Offsets to the addresses needing relocation.
> >    const unsigned int roff1 = 2;
> > -  const unsigned int roff2 = (size == 32) ? 8 : 9;
> > +  const unsigned int roff2 = 8;
> >
> >    memcpy(pov, first_plt_entry, plt_entry_size);
> >    // We do a jmp relative to the PC at the end of this instruction.
> > @@ -2376,9 +2362,9 @@ Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry(
> >
> >  // Subsequent entries in the IBT PLT.
> >
> > -template<>
> > +template<int size>
> >  const unsigned char
> > -Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
> > +Output_data_plt_x86_64_ibt<size>::plt_entry[plt_entry_size] =
> >  {
> >    // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> >    0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> > @@ -2389,24 +2375,11 @@ Output_data_plt_x86_64_ibt<32>::plt_entry[plt_entry_size] =
> >    0x90, 0x90                   // nop
> >  };
> >
> > -template<>
> > -const unsigned char
> > -Output_data_plt_x86_64_ibt<64>::plt_entry[plt_entry_size] =
> > -{
> > -  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> > -  0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> > -  0x68,                                // pushq immediate
> > -  0, 0, 0, 0,                  // replaced with offset into relocation table
> > -  0xf2, 0xe9,                  // bnd jmpq relative
> > -  0, 0, 0, 0,                  // replaced with offset to start of .plt
> > -  0x90                         // nop
> > -};
> > -
> >  // Entries in the IBT Additional PLT.
> >
> > -template<>
> > +template<int size>
> >  const unsigned char
> > -Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
> > +Output_data_plt_x86_64_ibt<size>::aplt_entry[aplt_entry_size] =
> >  {
> >    // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> >    0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> > @@ -2416,18 +2389,6 @@ Output_data_plt_x86_64_ibt<32>::aplt_entry[aplt_entry_size] =
> >    0x90, 0x90                   // nop
> >  };
> >
> > -template<>
> > -const unsigned char
> > -Output_data_plt_x86_64_ibt<64>::aplt_entry[aplt_entry_size] =
> > -{
> > -  // From AMD64 ABI Draft 1.0-rc1, Chapter 13.
> > -  0xf3, 0x0f, 0x1e, 0xfa,      // endbr64
> > -  0xf2, 0xff, 0x25,            // bnd jmpq indirect
> > -  0, 0, 0, 0,                  // replaced with address of symbol in .got
> > -  0x0f, 0x1f, 0x04, 0x00,      // nop
> > -  0x90,                                // nop
> > -};
> > -
> >  template<int size>
> >  unsigned int
> >  Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
> > @@ -2440,7 +2401,7 @@ Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry(
> >  {
> >    // Offsets to the addresses needing relocation.
> >    const unsigned int roff1 = 5;
> > -  const unsigned int roff2 = (size == 32) ? 10 : 11;
> > +  const unsigned int roff2 = 10;
> >
> >    memcpy(pov, plt_entry, plt_entry_size);
> >    elfcpp::Swap_unaligned<32, false>::writeval(pov + roff1, plt_index);
> > @@ -2459,7 +2420,7 @@ Output_data_plt_x86_64_ibt<size>::fill_aplt_entry(
> >      unsigned int plt_index)
> >  {
> >    // Offset to the address needing relocation.
> > -  const unsigned int roff = (size == 32) ? 6 : 7;
> > +  const unsigned int roff = 6;
> >
> >    // Check PC-relative offset overflow in PLT entry.
> >    uint64_t plt_got_pcrel_offset = (got_address + got_offset
> > --
> > 2.38.1
> >
>
> Hi Cary,
>
> Is it OK for gold?
>
> Thanks.
>
> --
> H.J.

I am checking it in today.

-- 
H.J.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT
  2022-12-12 20:34   ` H.J. Lu
@ 2022-12-12 23:57     ` Cary Coutant
  0 siblings, 0 replies; 8+ messages in thread
From: Cary Coutant @ 2022-12-12 23:57 UTC (permalink / raw)
  To: H.J. Lu; +Cc: binutils

> > > Since MPX support has been removed from x86-64 psABI, remove BND from
> > > 64-bit IBT PLT by using 32-bit IBT PLT.
> > >
> > >         PR gold/29851
> > >         * x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry):

> > Is it OK for gold?

> I am checking it in today.

Yes, this is OK. Thanks!

Sorry for the slow response.

-cary

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ld, gold: remove support for -z bndplt (MPX prefix)
  2022-12-08  8:21 ` [PATCH] ld, gold: remove support for -z bndplt (MPX prefix) Martin Liška
@ 2022-12-13  0:02   ` Cary Coutant
  2022-12-13 12:54     ` Martin Liška
  0 siblings, 1 reply; 8+ messages in thread
From: Cary Coutant @ 2022-12-13  0:02 UTC (permalink / raw)
  To: Martin Liška; +Cc: binutils, H.J. Lu

>  gold/NEWS                                 |   3 +
>  gold/options.h                            |   3 -
>  gold/x86_64.cc                            | 436 +---------------------

OK for the gold parts.

-cary

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ld, gold: remove support for -z bndplt (MPX prefix)
  2022-12-13  0:02   ` Cary Coutant
@ 2022-12-13 12:54     ` Martin Liška
  2022-12-13 17:14       ` H.J. Lu
  0 siblings, 1 reply; 8+ messages in thread
From: Martin Liška @ 2022-12-13 12:54 UTC (permalink / raw)
  To: Cary Coutant; +Cc: binutils, H.J. Lu, Nick Clifton

On 12/13/22 01:02, Cary Coutant wrote:
>>  gold/NEWS                                 |   3 +
>>  gold/options.h                            |   3 -
>>  gold/x86_64.cc                            | 436 +---------------------
> 
> OK for the gold parts.

Thanks.

H.J. Can you please approve the rest of the patch?

Martin

> 
> -cary


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ld, gold: remove support for -z bndplt (MPX prefix)
  2022-12-13 12:54     ` Martin Liška
@ 2022-12-13 17:14       ` H.J. Lu
  0 siblings, 0 replies; 8+ messages in thread
From: H.J. Lu @ 2022-12-13 17:14 UTC (permalink / raw)
  To: Martin Liška; +Cc: Cary Coutant, binutils, Nick Clifton

On Tue, Dec 13, 2022 at 4:54 AM Martin Liška <mliska@suse.cz> wrote:
>
> On 12/13/22 01:02, Cary Coutant wrote:
> >>  gold/NEWS                                 |   3 +
> >>  gold/options.h                            |   3 -
> >>  gold/x86_64.cc                            | 436 +---------------------
> >
> > OK for the gold parts.
>
> Thanks.
>
> H.J. Can you please approve the rest of the patch?
>

The rest is OK.

Thanks.


H.J.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-12-13 17:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-06 21:44 [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
2022-12-08  8:21 ` [PATCH] ld, gold: remove support for -z bndplt (MPX prefix) Martin Liška
2022-12-13  0:02   ` Cary Coutant
2022-12-13 12:54     ` Martin Liška
2022-12-13 17:14       ` H.J. Lu
2022-12-08 16:12 ` [PATCH] gold: Remove BND from 64-bit x86-64 IBT PLT H.J. Lu
2022-12-12 20:34   ` H.J. Lu
2022-12-12 23:57     ` Cary Coutant

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).