aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorIgor Zamyatin <igor.zamyatin@intel.com>2014-11-18 10:52:36 +0300
committerH.J. Lu <hjl.tools@gmail.com>2014-11-18 05:40:17 -0800
commitd258b828287a863376af60a1ef7ceafbccc83d93 (patch)
treeac8f8a3251ce8afda52a8a190099042fc4b8baca /ld
parent470e2f4e300e5f84b1c35070df43d69b501e0b91 (diff)
downloadbinutils-d258b828287a863376af60a1ef7ceafbccc83d93.zip
binutils-d258b828287a863376af60a1ef7ceafbccc83d93.tar.gz
binutils-d258b828287a863376af60a1ef7ceafbccc83d93.tar.bz2
Add -z bndplt to generate BND prefix in PLT entries
This patch adds "-z bndplt" option Linux/x86-64 linker to generate BND prefix in PLT entries. It also updated Linux/x86-64 assembler not to generate R_X86_64_PLT32_BND nor R_X86_64_PC32_BND relocations. bfd/ 2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com> * elf64-x86-64.c (elf_x86_64_check_relocs): Enable MPX PLT only for -z bndplt. gas/ 2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com> * config/tc-i386-intel.c (i386_operator): Remove last argument from lex_got call. * config/tc-i386.c (reloc): Remove bnd_prefix from parameters' list. Return always BFD_RELOC_32_PCREL. * (output_branch): Remove condition for BFD_RELOC_X86_64_PC32_BND. * (output_jump): Update call to reloc accordingly. * (output_interseg_jump): Likewise. * (output_disp): Likewise. * (output_imm): Likewise. * (x86_cons_fix_new): Likewise. * (lex_got): Remove bnd_prefix from parameters' list in macro and declarations. Don't use BFD_RELOC_X86_64_PLT32_BND. * (x86_cons): Update call to lex_got accordingly. * (i386_immediate): Likewise. * (i386_displacement): Likewise. * (md_apply_fix): Don't use BFD_RELOC_X86_64_PLT32_BND nor BFD_RELOC_X86_64_PC32_BND. * (tc_gen_reloc): Likewise. include/ 2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com> * bfdlink.h (struct bfd_link_info): Add bndplt. ld/ 2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com> * emulparams/elf_x86_64.sh (BNDPLT): Set to yes for x86_64. * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle "-z bndplt" if BNDPLT is yes. (gld${EMULATION_NAME}_list_options): Add "-z bndplt" entry. * ld.texinfo: Add description for bndplt. ld/testsuite/ 2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com> * testsuite/ld-x86-64/bnd-ifunc-1.d: Add bndplt option. * testsuite/ld-x86-64/bnd-ifunc-2.d: Likewise. * testsuite/ld-x86-64/bnd-plt-1.d: Likewise. Update dissassembly sections. * testsuite/ld-x86-64/mpx.exp: Handle mpx3 and mpx4 tests. * testsuite/ld-x86-64/mpx1a.rd: Remove _BND from relocation name. * testsuite/ld-x86-64/mpx1c.rd: Likewise. * testsuite/ld-x86-64/mpx2a.rd: Likewise. * testsuite/ld-x86-64/mpx2c.rd: Likewise. * testsuite/ld-x86-64/mpx3.dd: New file. * testsuite/ld-x86-64/mpx3a.s: Likewise. * testsuite/ld-x86-64/mpx3b.s: Likewise. * testsuite/ld-x86-64/mpx4.dd: Likewise. * testsuite/ld-x86-64/mpx4a.s: Likewise. * testsuite/ld-x86-64/mpx4b.s: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/emulparams/elf_x86_64.sh5
-rw-r--r--ld/emultempl/elf32.em15
-rw-r--r--ld/ld.texinfo3
-rw-r--r--ld/testsuite/ChangeLog18
-rw-r--r--ld/testsuite/ld-x86-64/bnd-ifunc-1.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-ifunc-2.d2
-rw-r--r--ld/testsuite/ld-x86-64/bnd-plt-1.d18
-rw-r--r--ld/testsuite/ld-x86-64/mpx.exp15
-rw-r--r--ld/testsuite/ld-x86-64/mpx1a.rd2
-rw-r--r--ld/testsuite/ld-x86-64/mpx1c.rd2
-rw-r--r--ld/testsuite/ld-x86-64/mpx2a.rd2
-rw-r--r--ld/testsuite/ld-x86-64/mpx2c.rd2
-rw-r--r--ld/testsuite/ld-x86-64/mpx3.dd35
-rw-r--r--ld/testsuite/ld-x86-64/mpx3a.s16
-rw-r--r--ld/testsuite/ld-x86-64/mpx3b.s11
-rw-r--r--ld/testsuite/ld-x86-64/mpx4.dd24
-rw-r--r--ld/testsuite/ld-x86-64/mpx4a.s6
-rw-r--r--ld/testsuite/ld-x86-64/mpx4b.s5
19 files changed, 175 insertions, 16 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index ec4be3f..a966603 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com>
+
+ * emulparams/elf_x86_64.sh (BNDPLT): Set to yes for x86_64.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle
+ "-z bndplt" if BNDPLT is yes.
+ (gld${EMULATION_NAME}_list_options): Add "-z bndplt" entry.
+ * ld.texinfo: Add description for bndplt.
+
2014-10-08 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* avrtiny.sc: Apply avr.sc fixes.
diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh
index d8cb6bf..1e83a74 100644
--- a/ld/emulparams/elf_x86_64.sh
+++ b/ld/emulparams/elf_x86_64.sh
@@ -31,7 +31,10 @@ fi
case "$target" in
x86_64*-linux*|i[3-7]86-*-linux-*)
case "$EMULATION_NAME" in
- *64*) LIBPATH_SUFFIX=64 ;;
+ *64*)
+ LIBPATH_SUFFIX=64
+ BNDPLT=yes
+ ;;
esac
;;
*-*-solaris2*)
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 67c437d..137446f 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -2277,6 +2277,14 @@ fragment <<EOF
link_info.execstack = FALSE;
}
EOF
+
+if test x"$BNDPLT" = xyes; then
+fragment <<EOF
+ else if (strcmp (optarg, "bndplt") == 0)
+ link_info.bndplt = TRUE;
+EOF
+fi
+
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
fragment <<EOF
else if (strcmp (optarg, "global") == 0)
@@ -2456,6 +2464,13 @@ fragment <<EOF
EOF
fi
+if test x"$BNDPLT" = xyes; then
+fragment <<EOF
+ fprintf (file, _("\
+ -z bndplt Always generate BND prefix in PLT entries\n"));
+EOF
+fi
+
if test -n "$PARSE_AND_LIST_OPTIONS" ; then
fragment <<EOF
$PARSE_AND_LIST_OPTIONS
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index 3001bf1..bb386e4 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -1133,6 +1133,9 @@ Specify a stack size for in an ELF @code{PT_GNU_STACK} segment.
Specifying zero will override any default non-zero sized
@code{PT_GNU_STACK} segment creation.
+@item bndplt
+Always generate BND prefix in PLT entries. Supported for Linux/x86_64.
+
@end table
Other keywords are ignored for Solaris compatibility.
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 4d78aab..6cf823b 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,21 @@
+2014-11-18 Igor Zamyatin <igor.zamyatin@intel.com>
+
+ * testsuite/ld-x86-64/bnd-ifunc-1.d: Add bndplt option.
+ * testsuite/ld-x86-64/bnd-ifunc-2.d: Likewise.
+ * testsuite/ld-x86-64/bnd-plt-1.d: Likewise. Update dissassembly
+ sections.
+ * testsuite/ld-x86-64/mpx.exp: Handle mpx3 and mpx4 tests.
+ * testsuite/ld-x86-64/mpx1a.rd: Remove _BND from relocation name.
+ * testsuite/ld-x86-64/mpx1c.rd: Likewise.
+ * testsuite/ld-x86-64/mpx2a.rd: Likewise.
+ * testsuite/ld-x86-64/mpx2c.rd: Likewise.
+ * testsuite/ld-x86-64/mpx3.dd: New file.
+ * testsuite/ld-x86-64/mpx3a.s: Likewise.
+ * testsuite/ld-x86-64/mpx3b.s: Likewise.
+ * testsuite/ld-x86-64/mpx4.dd: Likewise.
+ * testsuite/ld-x86-64/mpx4a.s: Likewise.
+ * testsuite/ld-x86-64/mpx4b.s: Likewise.
+
2014-11-13 H.J. Lu <hongjiu.lu@intel.com>
PR gas/17598
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1.d b/ld/testsuite/ld-x86-64/bnd-ifunc-1.d
index cdcb4f6..11313ab 100644
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-1.d
+++ b/ld/testsuite/ld-x86-64/bnd-ifunc-1.d
@@ -1,5 +1,5 @@
#as: --64 -madd-bnd-prefix
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 -z bndplt
#objdump: -dw
#...
diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
index 43e3356..6be8290 100644
--- a/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
+++ b/ld/testsuite/ld-x86-64/bnd-ifunc-2.d
@@ -1,5 +1,5 @@
#as: --64 -madd-bnd-prefix
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 -z bndplt
#objdump: -dw
#...
diff --git a/ld/testsuite/ld-x86-64/bnd-plt-1.d b/ld/testsuite/ld-x86-64/bnd-plt-1.d
index 3cfe9e6..d76a7a7 100644
--- a/ld/testsuite/ld-x86-64/bnd-plt-1.d
+++ b/ld/testsuite/ld-x86-64/bnd-plt-1.d
@@ -1,6 +1,6 @@
#source: bnd-branch-1.s
#as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 -z bndplt
#objdump: -dw
.*: +file format .*
@@ -13,8 +13,8 @@ Disassembly of section .plt:
[ ]*[a-f0-9]+: f2 ff 25 83 01 20 00 bnd jmpq \*0x200183\(%rip\) # 200440 <_GLOBAL_OFFSET_TABLE_\+0x10>
[ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
[ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0
-[ ]*[a-f0-9]+: e9 e6 ff ff ff jmpq 2b0 <foo2@plt-0x50>
-[ ]*[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\)
+[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 2b0 <foo2@plt-0x50>
+[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
[ ]*[a-f0-9]+: 68 01 00 00 00 pushq \$0x1
[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 2b0 <foo2@plt-0x50>
[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
@@ -22,14 +22,14 @@ Disassembly of section .plt:
[ ]*[a-f0-9]+: f2 e9 c5 ff ff ff bnd jmpq 2b0 <foo2@plt-0x50>
[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
[ ]*[a-f0-9]+: 68 03 00 00 00 pushq \$0x3
-[ ]*[a-f0-9]+: e9 b6 ff ff ff jmpq 2b0 <foo2@plt-0x50>
-[ ]*[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\)
+[ ]*[a-f0-9]+: f2 e9 b5 ff ff ff bnd jmpq 2b0 <foo2@plt-0x50>
+[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
Disassembly of section .plt.bnd:
0+300 <foo2@plt>:
-[ ]*[a-f0-9]+: ff 25 42 01 20 00 jmpq \*0x200142\(%rip\) # 200448 <_GLOBAL_OFFSET_TABLE_\+0x18>
-[ ]*[a-f0-9]+: 66 90 xchg %ax,%ax
+[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200448 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[ ]*[a-f0-9]+: 90 nop
0+308 <foo3@plt>:
[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200450 <_GLOBAL_OFFSET_TABLE_\+0x20>
@@ -40,8 +40,8 @@ Disassembly of section .plt.bnd:
[ ]*[a-f0-9]+: 90 nop
0+318 <foo4@plt>:
-[ ]*[a-f0-9]+: ff 25 42 01 20 00 jmpq \*0x200142\(%rip\) # 200460 <_GLOBAL_OFFSET_TABLE_\+0x30>
-[ ]*[a-f0-9]+: 66 90 xchg %ax,%ax
+[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200460 <_GLOBAL_OFFSET_TABLE_\+0x30>
+[ ]*[a-f0-9]+: 90 nop
Disassembly of section .text:
diff --git a/ld/testsuite/ld-x86-64/mpx.exp b/ld/testsuite/ld-x86-64/mpx.exp
index f2a50d4..2650b3a 100644
--- a/ld/testsuite/ld-x86-64/mpx.exp
+++ b/ld/testsuite/ld-x86-64/mpx.exp
@@ -74,6 +74,21 @@ set run_tests {
{dummy.s} "mpx2static" "mpx2.out"}
}
+run_ld_link_tests {
+ {"Build libcall.so"
+ "-shared -z bndplt" "" ""
+ {mpx3b.s} {} "libcall.so"}
+ {"Build mpx3"
+ "tmpdir/libcall.so -z bndplt" "" ""
+ {mpx3a.s} {{objdump -dw mpx3.dd}} "mpx3"}
+ {"Build libcall1.so"
+ "-shared -z bndplt" "" ""
+ {mpx4b.s} {} "libcall1.so"}
+ {"Build mpx4"
+ "tmpdir/libcall1.so -z bndplt" "" ""
+ {mpx4a.s} {{objdump -dw mpx4.dd}} "mpx4"}
+}
+
run_ld_link_exec_tests [] $run_tests
run_dump_test "bnd-branch-1"
diff --git a/ld/testsuite/ld-x86-64/mpx1a.rd b/ld/testsuite/ld-x86-64/mpx1a.rd
index 9bebc82..d66524c 100644
--- a/ld/testsuite/ld-x86-64/mpx1a.rd
+++ b/ld/testsuite/ld-x86-64/mpx1a.rd
@@ -1,3 +1,3 @@
#...
-[0-9a-f ]+R_X86_64_PLT32_BND +0+ +.*
+[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
#...
diff --git a/ld/testsuite/ld-x86-64/mpx1c.rd b/ld/testsuite/ld-x86-64/mpx1c.rd
index 2b050bd..d3b292c 100644
--- a/ld/testsuite/ld-x86-64/mpx1c.rd
+++ b/ld/testsuite/ld-x86-64/mpx1c.rd
@@ -1,3 +1,3 @@
#...
-[0-9a-f ]+R_X86_64_PC32_BND +0+ +.*
+[0-9a-f ]+R_X86_64_PC32 +0+ +.*
#...
diff --git a/ld/testsuite/ld-x86-64/mpx2a.rd b/ld/testsuite/ld-x86-64/mpx2a.rd
index 9bebc82..d66524c 100644
--- a/ld/testsuite/ld-x86-64/mpx2a.rd
+++ b/ld/testsuite/ld-x86-64/mpx2a.rd
@@ -1,3 +1,3 @@
#...
-[0-9a-f ]+R_X86_64_PLT32_BND +0+ +.*
+[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
#...
diff --git a/ld/testsuite/ld-x86-64/mpx2c.rd b/ld/testsuite/ld-x86-64/mpx2c.rd
index 9bebc82..d66524c 100644
--- a/ld/testsuite/ld-x86-64/mpx2c.rd
+++ b/ld/testsuite/ld-x86-64/mpx2c.rd
@@ -1,3 +1,3 @@
#...
-[0-9a-f ]+R_X86_64_PLT32_BND +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
new file mode 100644
index 0000000..2a8356d
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx3.dd
@@ -0,0 +1,35 @@
+.*: +file format .*
+
+
+Disassembly of section .plt:
+
+0+400290 <.plt>:
+[ ]*[a-f0-9]+: ff 35 6a 01 20 00 pushq 0x20016a\(%rip\) # 600400 <_GLOBAL_OFFSET_TABLE_\+0x8>
+[ ]*[a-f0-9]+: f2 ff 25 6b 01 20 00 bnd jmpq \*0x20016b\(%rip\) # 600408 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0
+[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 400290 <call1@plt-0x30>
+[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
+[ ]*[a-f0-9]+: 68 01 00 00 00 pushq \$0x1
+[ ]*[a-f0-9]+: f2 e9 d5 ff ff ff bnd jmpq 400290 <call1@plt-0x30>
+[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
+
+Disassembly of section .plt.bnd:
+
+0+4002c0 <call1@plt>:
+[ ]*[a-f0-9]+: f2 ff 25 49 01 20 00 bnd jmpq \*0x200149\(%rip\) # 600410 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[ ]*[a-f0-9]+: 90 nop
+
+0+4002c8 <call2@plt>:
+[ ]*[a-f0-9]+: f2 ff 25 49 01 20 00 bnd jmpq \*0x200149\(%rip\) # 600418 <_GLOBAL_OFFSET_TABLE_\+0x20>
+[ ]*[a-f0-9]+: 90 nop
+
+Disassembly of section .text:
+
+0+4002d0 <_start>:
+[ ]*[a-f0-9]+: bf c0 02 40 00 mov \$0x4002c0,%edi
+[ ]*[a-f0-9]+: f2 ff d7 bnd callq \*%rdi
+[ ]*[a-f0-9]+: 48 8b 3d 41 01 20 00 mov 0x200141\(%rip\),%rdi # 600420 <func>
+[ ]*[a-f0-9]+: f2 ff d7 bnd callq \*%rdi
+[ ]*[a-f0-9]+: c3 retq
+#pass
diff --git a/ld/testsuite/ld-x86-64/mpx3a.s b/ld/testsuite/ld-x86-64/mpx3a.s
new file mode 100644
index 0000000..28cb580
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx3a.s
@@ -0,0 +1,16 @@
+ .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
new file mode 100644
index 0000000..1ee2557
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx3b.s
@@ -0,0 +1,11 @@
+ .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/mpx4.dd b/ld/testsuite/ld-x86-64/mpx4.dd
new file mode 100644
index 0000000..0cf0f75
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx4.dd
@@ -0,0 +1,24 @@
+.*: +file format .*
+
+
+Disassembly of section .plt:
+
+0+400260 <.plt>:
+[ ]*[a-f0-9]+: ff 35 42 01 20 00 pushq 0x200142\(%rip\) # 6003a8 <_GLOBAL_OFFSET_TABLE_\+0x8>
+[ ]*[a-f0-9]+: f2 ff 25 43 01 20 00 bnd jmpq \*0x200143\(%rip\) # 6003b0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+[ ]*[a-f0-9]+: 0f 1f 00 nopl \(%rax\)
+[ ]*[a-f0-9]+: 68 00 00 00 00 pushq \$0x0
+[ ]*[a-f0-9]+: f2 e9 e5 ff ff ff bnd jmpq 400260 <call1@plt-0x20>
+[ ]*[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
+
+Disassembly of section .plt.bnd:
+
+0+400280 <call1@plt>:
+[ ]*[a-f0-9]+: f2 ff 25 31 01 20 00 bnd jmpq \*0x200131\(%rip\) # 6003b8 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[ ]*[a-f0-9]+: 90 nop
+
+Disassembly of section .text:
+
+0+400288 <_start>:
+[ ]*[a-f0-9]+: bf 80 02 40 00 mov \$0x400280,%edi
+[ ]*[a-f0-9]+: f2 ff d7 bnd callq \*%rdi
diff --git a/ld/testsuite/ld-x86-64/mpx4a.s b/ld/testsuite/ld-x86-64/mpx4a.s
new file mode 100644
index 0000000..0ee2723
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx4a.s
@@ -0,0 +1,6 @@
+.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
new file mode 100644
index 0000000..0e9ac14
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/mpx4b.s
@@ -0,0 +1,5 @@
+.text
+ .globl call1
+ .type call1, @function
+call1:
+ ret