diff options
author | Maciej W. Rozycki <macro@wdc.com> | 2020-07-23 20:11:29 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@wdc.com> | 2020-07-23 20:11:29 +0100 |
commit | 97c79e2174fbb0dda16850fa5366592e93d31cb9 (patch) | |
tree | 46d249709c800809267461e2b193934f339a8f2e /ld | |
parent | b5dd7120f6bcbd1fe650b8839a53b2bd423fbf60 (diff) | |
download | gdb-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')
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/ldelf.c | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-misc/just-symbols-0.s | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-misc/just-symbols-1.dd | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-misc/just-symbols-1.s | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-misc/just-symbols.exp | 57 | ||||
-rw-r--r-- | ld/testsuite/ld-misc/just-symbols.ld | 7 |
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 @@ -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/ : { *(*) } +} |