From ee9e412f14908c1055cb00fab9307d1723981639 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 17 Nov 2021 15:59:16 +0000 Subject: [PATCH] Fix the linker script parser so that it will recognise the PT_GNU_RELRO segment type, and the linker itself so that it will gracefully handle being unable to assign any sections to such a segment. PR 28452 bfd * elf.c (assign_file_positions_for_non_load_sections): Replace assertion with a warning message. ld * ldgram.y: Add support for PT_GNU_RELRO and PT_GNU_PROPERTY. * ldgram.c: Regenerate. --- bfd/ChangeLog | 6 ++++++ bfd/elf.c | 11 ++++++++--- ld/ChangeLog | 6 ++++++ ld/ldgram.y | 4 ++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d539dbbf572..35b659b4ef9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2021-11-17 Nick Clifton + + PR 28452 + * elf.c (assign_file_positions_for_non_load_sections): Replace + assertion with a warning message. + 2021-10-19 Nick Clifton * linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL diff --git a/bfd/elf.c b/bfd/elf.c index 79231e242bd..cfdb94922f3 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -6261,10 +6261,15 @@ assign_file_positions_for_non_load_sections (bfd *abfd, } } } - if (link_info != NULL) - BFD_ASSERT (ok); + if (!ok) - memset (p, 0, sizeof *p); + { + if (link_info != NULL) + _bfd_error_handler + (_("%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"), + abfd); + memset (p, 0, sizeof *p); + } } else if (p->p_type == PT_GNU_STACK) { diff --git a/ld/ChangeLog b/ld/ChangeLog index c23af57d1cb..d68b8203c0b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2021-11-17 Nick Clifton + + PR 28452 + * ldgram.y: Add support for PT_GNU_RELRO and PT_GNU_PROPERTY. + * ldgram.c: Regenerate. + 2021-11-15 Roland McGrath * testsuite/ld-aarch64/dt_textrel.d: Pass explicit -z notext in diff --git a/ld/ldgram.y b/ld/ldgram.y index c8396bbfd5b..2eb989df77a 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -1262,6 +1262,10 @@ phdr_type: $$ = exp_intop (0x6474e550); else if (strcmp (s, "PT_GNU_STACK") == 0) $$ = exp_intop (0x6474e551); + else if (strcmp (s, "PT_GNU_RELRO") == 0) + $$ = exp_intop (0x6474e552); + else if (strcmp (s, "PT_GNU_PROPERTY") == 0) + $$ = exp_intop (0x6474e553); else { einfo (_("\ -- 2.30.2