aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog11
-rw-r--r--ld/ldelf.c3
-rw-r--r--ld/testsuite/ld-misc/just-symbols-0.s4
-rw-r--r--ld/testsuite/ld-misc/just-symbols-1.dd5
-rw-r--r--ld/testsuite/ld-misc/just-symbols-1.s4
-rw-r--r--ld/testsuite/ld-misc/just-symbols.exp57
-rw-r--r--ld/testsuite/ld-misc/just-symbols.ld7
7 files changed, 90 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 3bf9e61..467c2bc 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,6 +1,17 @@
2020-07-23 Maciej W. Rozycki <macro@wdc.com>
PR ld/26288
+ * ldelf.c (ldelf_after_open): Do not reject ET_EXEC input
+ supplied with `--just-symbols'.
+ * testsuite/ld-misc/just-symbols.exp: New test script.
+ * testsuite/ld-misc/just-symbols-1.dd: New test dump.
+ * testsuite/ld-misc/just-symbols.ld: New test linker script.
+ * testsuite/ld-misc/just-symbols-0.s: New test source.
+ * testsuite/ld-misc/just-symbols-1.s: New test source.
+
+2020-07-23 Maciej W. Rozycki <macro@wdc.com>
+
+ PR ld/26288
Revert:
PR 26047
diff --git a/ld/ldelf.c b/ld/ldelf.c
index e972071..729239c 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -1043,7 +1043,8 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
/* Do not allow executable files to be used as inputs to the link. */
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
{
- if (elf_tdata (abfd) != NULL
+ if (!bfd_input_just_syms (abfd)
+ && elf_tdata (abfd) != NULL
&& elf_tdata (abfd)->elf_header != NULL
/* FIXME: Maybe check for other non-supportable types as well ? */
&& elf_tdata (abfd)->elf_header->e_type == ET_EXEC)
diff --git a/ld/testsuite/ld-misc/just-symbols-0.s b/ld/testsuite/ld-misc/just-symbols-0.s
new file mode 100644
index 0000000..bceb6ba
--- /dev/null
+++ b/ld/testsuite/ld-misc/just-symbols-0.s
@@ -0,0 +1,4 @@
+ .data
+ .org 0x12
+ .globl foo
+foo:
diff --git a/ld/testsuite/ld-misc/just-symbols-1.dd b/ld/testsuite/ld-misc/just-symbols-1.dd
new file mode 100644
index 0000000..8908a23
--- /dev/null
+++ b/ld/testsuite/ld-misc/just-symbols-1.dd
@@ -0,0 +1,5 @@
+.*: +file format .*
+
+Contents of section \.data:
+ [0-9a-f]+ (?:(:?12000000|00120000|00000012) 0{8}|0{8} 00000012) 0{8} 0{8} .*
+#pass
diff --git a/ld/testsuite/ld-misc/just-symbols-1.s b/ld/testsuite/ld-misc/just-symbols-1.s
new file mode 100644
index 0000000..975d083
--- /dev/null
+++ b/ld/testsuite/ld-misc/just-symbols-1.s
@@ -0,0 +1,4 @@
+ .data
+bar:
+ .dc.a foo
+ .org 0x10
diff --git a/ld/testsuite/ld-misc/just-symbols.exp b/ld/testsuite/ld-misc/just-symbols.exp
new file mode 100644
index 0000000..1c1f866
--- /dev/null
+++ b/ld/testsuite/ld-misc/just-symbols.exp
@@ -0,0 +1,57 @@
+# Expect script for ld --just-symbols tests.
+# Copyright (C) 2020 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.
+#
+
+# SH/PE targets complain about zero VMA.
+# x86_64/PE targets hardcode VMA to 0x100000000.
+if { [istarget sh-*-pe] \
+ || [istarget x86_64-*-cygwin] \
+ || [istarget x86_64-*-mingw*] \
+ || [istarget x86_64-*-pe] \
+ || [istarget x86_64-*-pep] } {
+ return
+}
+
+run_ld_link_tests {
+ {"Object for --just-symbols test"
+ "-r -T just-symbols.ld" ""
+ ""
+ {just-symbols-0.s}
+ {}
+ "just-symbols-0.o"}
+ {"Executable for --just-symbols test"
+ "-e 0 -T just-symbols.ld" ""
+ ""
+ {just-symbols-0.s}
+ {}
+ "just-symbols-0"}
+ {"Object with --just-symbols test"
+ "-e 0 -T just-symbols.ld --just-symbols=tmpdir/just-symbols-0.o" ""
+ ""
+ {just-symbols-1.s}
+ {{objdump {-s -j .data} just-symbols-1.dd}}
+ "just-symbols-1obj"}
+ {"Executable with --just-symbols test"
+ "-e 0 -T just-symbols.ld --just-symbols=tmpdir/just-symbols-0" ""
+ ""
+ {just-symbols-1.s}
+ {{objdump {-s -j .data} just-symbols-1.dd}}
+ "just-symbols-1exe"}
+}
diff --git a/ld/testsuite/ld-misc/just-symbols.ld b/ld/testsuite/ld-misc/just-symbols.ld
new file mode 100644
index 0000000..3d65987
--- /dev/null
+++ b/ld/testsuite/ld-misc/just-symbols.ld
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ /DISCARD/ : { *(*) }
+}