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 changed files with 14 additions and 2 deletions
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
PR 26047
|
PR 26047
|
||||||
* ldelf.c (ldelf_after_open): Fail if attempting to link one
|
* 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>
|
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);
|
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 (bfd_link_relocatable (&link_info))
|
||||||
{
|
{
|
||||||
if (link_info.execstack == !link_info.noexecstack)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!link_info.traditional_format)
|
if (!link_info.traditional_format)
|
||||||
{
|
{
|
||||||
bfd *elfbfd = NULL;
|
bfd *elfbfd = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue