diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/emulparams/elf_x86_64.sh | 2 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/bnd-ifunc-1.d | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/bnd-ifunc-1.s | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/bnd-plt-1.d | 55 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/mpx.exp | 2 |
7 files changed, 95 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index aeb0d19..9930434 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2014-02-19 Igor Zamyatin <igor.zamyatin@intel.com> + H.J. Lu <hongjiu.lu@intel.com> + + * emulparams/elf_x86_64.sh (TINY_READONLY_SECTION): New. + 2014-02-19 Alan Modra <amodra@gmail.com> * emultempl/ppc64elf.em (params): Init new field. diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh index 4842257..d8cb6bf 100644 --- a/ld/emulparams/elf_x86_64.sh +++ b/ld/emulparams/elf_x86_64.sh @@ -16,6 +16,8 @@ LARGE_SECTIONS=yes LARGE_BSS_AFTER_BSS= SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0" IREL_IN_PLT= +# Reuse TINY_READONLY_SECTION which is placed right after .plt section. +TINY_READONLY_SECTION=".plt.bnd ${RELOCATING-0} : { *(.plt.bnd) }" if [ "x${host}" = "x${target}" ]; then case " $EMULATION_LIBPATH " in diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 4b37b0d..58d752a 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-02-19 Igor Zamyatin <igor.zamyatin@intel.com> + H.J. Lu <hongjiu.lu@intel.com> + + * ld-x86-64/mpx.exp: Run bnd-ifunc-1 and bnd-plt-1. + * ld-x86-64/bnd-ifunc-1.d: New file. + * ld-x86-64/bnd-ifunc-1.s: Likewise. + * ld-x86-64/bnd-plt-1.d: Likewise. + 2014-02-18 Jack Carter <jack.carter@imgtec.com> * ld-mips-elf/pic-and-nonpic-3a.sd: Check DYNAMIC segment flags. diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1.d b/ld/testsuite/ld-x86-64/bnd-ifunc-1.d new file mode 100644 index 0000000..cdcb4f6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/bnd-ifunc-1.d @@ -0,0 +1,7 @@ +#as: --64 -madd-bnd-prefix +#ld: -shared -melf_x86_64 +#objdump: -dw + +#... +[ ]*[a-f0-9]+: f2 e8 f0 ff ff ff bnd callq 220 <\*ABS\*\+0x228@plt> +#pass diff --git a/ld/testsuite/ld-x86-64/bnd-ifunc-1.s b/ld/testsuite/ld-x86-64/bnd-ifunc-1.s new file mode 100644 index 0000000..82b64f0 --- /dev/null +++ b/ld/testsuite/ld-x86-64/bnd-ifunc-1.s @@ -0,0 +1,16 @@ + .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-plt-1.d b/ld/testsuite/ld-x86-64/bnd-plt-1.d new file mode 100644 index 0000000..3cfe9e6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/bnd-plt-1.d @@ -0,0 +1,55 @@ +#source: bnd-branch-1.s +#as: --64 +#ld: -shared -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .plt: + +0+2b0 <.plt>: +[ ]*[a-f0-9]+: ff 35 82 01 20 00 pushq 0x200182\(%rip\) # 200438 <_GLOBAL_OFFSET_TABLE_\+0x8> +[ ]*[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]+: 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\) +[ ]*[a-f0-9]+: 68 02 00 00 00 pushq \$0x2 +[ ]*[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\) + +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 + +0+308 <foo3@plt>: +[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200450 <_GLOBAL_OFFSET_TABLE_\+0x20> +[ ]*[a-f0-9]+: 90 nop + +0+310 <foo1@plt>: +[ ]*[a-f0-9]+: f2 ff 25 41 01 20 00 bnd jmpq \*0x200141\(%rip\) # 200458 <_GLOBAL_OFFSET_TABLE_\+0x28> +[ ]*[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 + +Disassembly of section .text: + +0+320 <_start>: +[ ]*[a-f0-9]+: f2 e9 ea ff ff ff bnd jmpq 310 <foo1@plt> +[ ]*[a-f0-9]+: e8 d5 ff ff ff callq 300 <foo2@plt> +[ ]*[a-f0-9]+: e9 d8 ff ff ff jmpq 308 <foo3@plt> +[ ]*[a-f0-9]+: e8 e3 ff ff ff callq 318 <foo4@plt> +[ ]*[a-f0-9]+: f2 e8 cd ff ff ff bnd callq 308 <foo3@plt> +[ ]*[a-f0-9]+: e9 d8 ff ff ff jmpq 318 <foo4@plt> +#pass diff --git a/ld/testsuite/ld-x86-64/mpx.exp b/ld/testsuite/ld-x86-64/mpx.exp index df6bc6f..284ade3 100644 --- a/ld/testsuite/ld-x86-64/mpx.exp +++ b/ld/testsuite/ld-x86-64/mpx.exp @@ -78,3 +78,5 @@ set run_tests { run_ld_link_exec_tests [] $run_tests run_dump_test "bnd-branch-1" +run_dump_test "bnd-ifunc-1" +run_dump_test "bnd-plt-1" |