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.
This commit is contained in:
parent
a3fc941881
commit
a87e1817a4
@ -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>
|
||||
|
||||
|
13
ld/ldelf.c
13
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user