summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-05-22 14:46:42 +0000
committerH.J. Lu <hjl.tools@gmail.com>2012-05-22 14:46:42 +0000
commit5b05fc101625563ae358503acfa2027873883448 (patch)
tree87c5a4698f36c11bd1b8ef5a9a97dd68a8a43080
parentf96dfd8483ef8f7c85d2947ff19d2ed56ba5c243 (diff)
downloadbinutils-redhat-5b05fc101625563ae358503acfa2027873883448.tar.gz
Create PLT eh_frame section if there is .eh_frame section
bfd/ PR ld/13909 * elf32-i386.c (elf_i386_create_dynamic_sections): Create PLT eh_frame section if there is an input .eh_frame section. * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise. ld/testsuite/ PR ld/13909 * ld-i386/i386.exp: Run pr13909. * ld-x86-64/x86-64.exp: Likewise. * ld-i386/dummy.s: New file. * ld-i386/pr13909.d: Likewise. * ld-x86-64/pr13909.d: Likewise.
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf32-i386.c3
-rw-r--r--bfd/elf64-x86-64.c3
-rw-r--r--ld/testsuite/ChangeLog12
-rw-r--r--ld/testsuite/ld-i386/dummy.s1
-rw-r--r--ld/testsuite/ld-i386/i386.exp1
-rw-r--r--ld/testsuite/ld-i386/pr13909.d10
-rw-r--r--ld/testsuite/ld-x86-64/pr13909.d10
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp1
9 files changed, 45 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index cfdcaa3691..6271710212 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,12 @@
2012-05-22 H.J. Lu <hongjiu.lu@intel.com>
+ PR ld/13909
+ * elf32-i386.c (elf_i386_create_dynamic_sections): Create PLT
+ eh_frame section if there is an input .eh_frame section.
+ * elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise.
+
+2012-05-22 H.J. Lu <hongjiu.lu@intel.com>
+
PR ld/14105
* elf32-i386.c (elf_i386_create_dynamic_sections): Always
create PLT eh_frame section with SEC_LINKER_CREATED.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 84299ceb9e..e0d7fff451 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1016,7 +1016,8 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
if (!info->no_ld_generated_unwind_info
&& htab->plt_eh_frame == NULL
- && htab->elf.splt != NULL)
+ && htab->elf.splt != NULL
+ && bfd_get_section_by_name (dynobj, ".eh_frame") != NULL)
{
flagword flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
htab->plt_eh_frame
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 1f490d41cb..27354dfa94 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -980,7 +980,8 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj,
if (!info->no_ld_generated_unwind_info
&& htab->plt_eh_frame == NULL
- && htab->elf.splt != NULL)
+ && htab->elf.splt != NULL
+ && bfd_get_section_by_name (dynobj, ".eh_frame") != NULL)
{
const struct elf_x86_64_backend_data *const abed
= get_elf_x86_64_backend_data (dynobj);
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index e0d072f579..b05b8d7e80 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,4 +1,14 @@
-2012-05-20 H.J. Lu <hongjiu.lu@intel.com>
+2012-05-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/13909
+ * ld-i386/i386.exp: Run pr13909.
+ * ld-x86-64/x86-64.exp: Likewise.
+
+ * ld-i386/dummy.s: New file.
+ * ld-i386/pr13909.d: Likewise.
+ * ld-x86-64/pr13909.d: Likewise.
+
+2012-05-22 H.J. Lu <hongjiu.lu@intel.com>
PR ld/14105
* ld-elf/eh4.d: Add PLT eh_frame.
diff --git a/ld/testsuite/ld-i386/dummy.s b/ld/testsuite/ld-i386/dummy.s
new file mode 100644
index 0000000000..403f98000d
--- /dev/null
+++ b/ld/testsuite/ld-i386/dummy.s
@@ -0,0 +1 @@
+# Dummy
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 47f918fa18..982e09f50f 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -233,6 +233,7 @@ run_dump_test "pr12718"
run_dump_test "pr12921"
run_dump_test "pr12570a"
run_dump_test "pr12570b"
+run_dump_test "pr13909"
if { !([istarget "i?86-*-linux*"]
|| [istarget "i?86-*-gnu*"]
diff --git a/ld/testsuite/ld-i386/pr13909.d b/ld/testsuite/ld-i386/pr13909.d
new file mode 100644
index 0000000000..388fd56de4
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr13909.d
@@ -0,0 +1,10 @@
+#name: PR ld/13909
+#source: dummy.s
+#as: --32
+#ld: -melf_i386 -shared
+#readelf: -S --wide
+
+#failif
+#...
+ +\[ [0-9]\] .eh_frame +PROGBITS +[0-9a-f]+ +[0-9a-f]+ 0+ +.*
+#...
diff --git a/ld/testsuite/ld-x86-64/pr13909.d b/ld/testsuite/ld-x86-64/pr13909.d
new file mode 100644
index 0000000000..137c61f26f
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr13909.d
@@ -0,0 +1,10 @@
+#name: PR ld/13909
+#source: dummy.s
+#as: --64
+#ld: -melf_x86_64 -shared
+#readelf: -S --wide
+
+#failif
+#...
+ +\[ [0-9]\] .eh_frame +PROGBITS +[0-9a-f]+ +[0-9a-f]+ 0+ +.*
+#...
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 7d2934f9b5..42203bb2fd 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -208,6 +208,7 @@ run_dump_test "pr12921"
run_dump_test "pr13947"
run_dump_test "pr12570a"
run_dump_test "pr12570b"
+run_dump_test "pr13909"
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
return