aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-01-12 10:30:56 -0800
committerH.J. Lu <hjl.tools@gmail.com>2017-01-12 10:32:17 -0800
commit8361ed4d6b7049264153434e8dc15e6dc2200ebf (patch)
tree12ec4f05453db4b68a7136a96375ee2b96dacf4a /ld
parent2425a30e406a0523020b7e70abb864a06a45bb97 (diff)
downloadgdb-8361ed4d6b7049264153434e8dc15e6dc2200ebf.zip
gdb-8361ed4d6b7049264153434e8dc15e6dc2200ebf.tar.gz
gdb-8361ed4d6b7049264153434e8dc15e6dc2200ebf.tar.bz2
x86-64: Also generate unwind info for .plt.bnd
Also generate unwind info for the .plt.bnd section. Sine it is the same as unwind info for the .plt.got section, we use unwind info for the .plt.got section to cover the the .plt.bnd section. bfd/ PR ld/21038 * elf64-x86-64.c (elf_x86_64_link_hash_table): Add plt_bnd_eh_frame. (elf_x86_64_check_relocs): Create .eh_frame section for the .plt.bnd section. (elf_x86_64_size_dynamic_sections): Allocate and initialize .eh_frame section for the .plt.bnd section. (elf_x86_64_finish_dynamic_sections): Adjust .eh_frame section for the .plt.bnd section. ld/ PR ld/21038 * testsuite/ld-x86-64/pr21038b.d: Updated. * testsuite/ld-x86-64/pr21038c.d: New file. * testsuite/ld-x86-64/pr21038c.s: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run pr21038c.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-x86-64/pr21038b.d9
-rw-r--r--ld/testsuite/ld-x86-64/pr21038c.d90
-rw-r--r--ld/testsuite/ld-x86-64/pr21038c.s9
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp1
5 files changed, 117 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 79bcc5f..1579442 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2017-01-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/21038
+ * testsuite/ld-x86-64/pr21038b.d: Updated.
+ * testsuite/ld-x86-64/pr21038c.d: New file.
+ * testsuite/ld-x86-64/pr21038c.s: Likewise.
+ * testsuite/ld-x86-64/x86-64.exp: Run pr21038c.
+
2017-01-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/21038
diff --git a/ld/testsuite/ld-x86-64/pr21038b.d b/ld/testsuite/ld-x86-64/pr21038b.d
index 1690d1e..053d908 100644
--- a/ld/testsuite/ld-x86-64/pr21038b.d
+++ b/ld/testsuite/ld-x86-64/pr21038b.d
@@ -40,6 +40,15 @@ Contents of the .eh_frame section:
DW_CFA_nop
DW_CFA_nop
+0+58 0000000000000014 0000005c FDE cie=00000000 pc=0000000000000240..0000000000000248
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
Disassembly of section .plt:
diff --git a/ld/testsuite/ld-x86-64/pr21038c.d b/ld/testsuite/ld-x86-64/pr21038c.d
new file mode 100644
index 0000000..33ff4ed
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr21038c.d
@@ -0,0 +1,90 @@
+#name: PR ld/21038 (.plt.got and .plt.bnd)
+#as: --64
+#ld: -z bndplt -melf_x86_64 -shared -z relro --ld-generated-unwind-info
+#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=0000000000000290..00000000000002a1
+ 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=0000000000000260..0000000000000280
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_advance_loc: 6 to 0000000000000266
+ DW_CFA_def_cfa_offset: 24
+ DW_CFA_advance_loc: 10 to 0000000000000270
+ 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=0000000000000288..0000000000000290
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0+70 0000000000000014 00000074 FDE cie=00000000 pc=0000000000000280..0000000000000288
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+
+Disassembly of section .plt:
+
+0+260 <.plt>:
+ +[a-f0-9]+: ff 35 a2 0d 20 00 pushq 0x200da2\(%rip\) # 201008 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+: f2 ff 25 a3 0d 20 00 bnd jmpq \*0x200da3\(%rip\) # 201010 <_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 260 <.plt>
+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\)
+
+Disassembly of section .plt.got:
+
+0+280 <.plt.got>:
+ +[a-f0-9]+: f2 ff 25 71 0d 20 00 bnd jmpq \*0x200d71\(%rip\) # 200ff8 <func1>
+ +[a-f0-9]+: 90 nop
+
+Disassembly of section .plt.bnd:
+
+0+288 <func2@plt>:
+ +[a-f0-9]+: f2 ff 25 89 0d 20 00 bnd jmpq \*0x200d89\(%rip\) # 201018 <func2>
+ +[a-f0-9]+: 90 nop
+
+Disassembly of section .text:
+
+0+290 <foo>:
+ +[a-f0-9]+: e8 eb ff ff ff callq 280 <.plt.got>
+ +[a-f0-9]+: e8 ee ff ff ff callq 288 <func2@plt>
+ +[a-f0-9]+: 48 8b 05 57 0d 20 00 mov 0x200d57\(%rip\),%rax # 200ff8 <func1>
+#pass
diff --git a/ld/testsuite/ld-x86-64/pr21038c.s b/ld/testsuite/ld-x86-64/pr21038c.s
new file mode 100644
index 0000000..38fc10d
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr21038c.s
@@ -0,0 +1,9 @@
+ .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 ff782a0..8e4e422 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -1023,3 +1023,4 @@ run_dump_test "pr20830a"
run_dump_test "pr20830b"
run_dump_test "pr21038a"
run_dump_test "pr21038b"
+run_dump_test "pr21038c"