aboutsummaryrefslogtreecommitdiff
path: root/ld/ldelf.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-06-11 14:06:47 +0930
committerAlan Modra <amodra@gmail.com>2021-06-11 14:06:47 +0930
commitf64b9b13ce4bb927f47a1fe0257c3794c6357c8c (patch)
tree241f0a0b457807eb8e4ec179728e38899087ebe5 /ld/ldelf.c
parent860cc54cd40334ec8709529f01e42fb4ac50b54f (diff)
downloadgdb-f64b9b13ce4bb927f47a1fe0257c3794c6357c8c.zip
gdb-f64b9b13ce4bb927f47a1fe0257c3794c6357c8c.tar.gz
gdb-f64b9b13ce4bb927f47a1fe0257c3794c6357c8c.tar.bz2
PR27952, Disallow ET_DYN DF_1_PIE linker input
This patch adds a new elf_tdata flag, is_pie, set during the linker's open_input_bfds processing. The flag is then used to reject attempts to link a PIE as if it were a shared library. bfd/ PR 27952 * elf-bfd.h (struct elf_obj_tdata): Add is_pie. * elflink.c (elf_link_add_object_symbols): Set is_pie. ld/ PR 27952 * ldelf.c (ldelf_after_open): Error on input PIEs too.
Diffstat (limited to 'ld/ldelf.c')
-rw-r--r--ld/ldelf.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ld/ldelf.c b/ld/ldelf.c
index 4d4d9ca..21e655b 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -1048,7 +1048,9 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
&& 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)
+ && (elf_tdata (abfd)->elf_header->e_type == ET_EXEC
+ || (elf_tdata (abfd)->elf_header->e_type == ET_DYN
+ && elf_tdata (abfd)->is_pie)))
einfo (_("%F%P: cannot use executable file '%pB' as input to a link\n"),
abfd);
}