aboutsummaryrefslogtreecommitdiff
path: root/ld/ldelf.c
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@wdc.com>2020-07-23 20:11:29 +0100
committerMaciej W. Rozycki <macro@wdc.com>2020-07-23 20:11:29 +0100
commit97c79e2174fbb0dda16850fa5366592e93d31cb9 (patch)
tree46d249709c800809267461e2b193934f339a8f2e /ld/ldelf.c
parentb5dd7120f6bcbd1fe650b8839a53b2bd423fbf60 (diff)
downloadgdb-97c79e2174fbb0dda16850fa5366592e93d31cb9.zip
gdb-97c79e2174fbb0dda16850fa5366592e93d31cb9.tar.gz
gdb-97c79e2174fbb0dda16850fa5366592e93d31cb9.tar.bz2
PR ld/26288: Allow the use of `--just-symbols' with ET_EXEC input
Fix a regression from commit a87e1817a435 ("Have the linker fail if any attempt to link in an executable is made.") and do not reject ET_EXEC input supplied with the `--just-symbols' option. Such use is legitimate as the file requested is not actually linked and only the symbols are extracted. Furthermore it is often the most useful application, as already observed in our documentation for the option, where it allows "to refer symbolically to absolute locations of memory defined in other programs." Provide a set of tests for the use of ET_EXEC with `--just-symbols'. These are excluded however for SH/PE targets because they complain if a section's VMA is 0: ld: zero vma section reloc detected: `.text' #0 f=32795 ld: zero vma section reloc detected: `.data' #1 f=291 and for x86_64/PE targets because they seem to hardwire the VMA: 100000000 12000000 01000000 00000000 00000000 ................ ld/ 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.
Diffstat (limited to 'ld/ldelf.c')
-rw-r--r--ld/ldelf.c3
1 files changed, 2 insertions, 1 deletions
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)