aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-05-28 17:43:21 +0100
committerNick Clifton <nickc@redhat.com>2020-05-28 17:43:21 +0100
commita87e1817a435dab6c6c042f9306497c9f13d4236 (patch)
treefe25ebf0548d80ba774792afda33bb7366ebd41c /ld
parenta3fc941881e4224eff3ef20ba1e784026bcc17fa (diff)
downloadbinutils-a87e1817a435dab6c6c042f9306497c9f13d4236.zip
binutils-a87e1817a435dab6c6c042f9306497c9f13d4236.tar.gz
binutils-a87e1817a435dab6c6c042f9306497c9f13d4236.tar.bz2
Have the linker fail if any attempt to link in an executable is made.
PR 26047 * ldelf.c (ldelf_after_open): Fail if attempting to link one executable into another. Ensure that the test is made for all forms of linking.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog3
-rw-r--r--ld/ldelf.c13
2 files changed, 14 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 096b9a5..28999bc 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -2,7 +2,8 @@
PR 26047
* ldelf.c (ldelf_after_open): Fail if attempting to link one
- executable into another.
+ executable into another. Ensure that the test is made for all
+ forms of linking.
2020-05-28 H.J. Lu <hongjiu.lu@intel.com>
diff --git a/ld/ldelf.c b/ld/ldelf.c
index 475fd00..8f2167e 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -1038,6 +1038,17 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
+ /* 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
+ && 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)
+ einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
+ abfd);
+ }
+
if (bfd_link_relocatable (&link_info))
{
if (link_info.execstack == !link_info.noexecstack)
@@ -1054,7 +1065,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
}
return;
}
-
+
if (!link_info.traditional_format)
{
bfd *elfbfd = NULL;