From f8049c44b999c27e4573be61aebb3aeedfa0a471 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 18 Oct 2017 11:20:31 +0200 Subject: [PATCH] re PR lto/82598 (lto debugobj lacks .note.GNU-stack) PR lto/82598 * simple-object.c (handle_lto_debug_sections): Copy over also .note.GNU-stack section with unchanged name. * simple-object-elf.c (SHF_EXECINSTR): Define. (simple_object_elf_copy_lto_debug_section): Drop SHF_EXECINSTR bit on .note.GNU-stack section. From-SVN: r253851 --- libiberty/ChangeLog | 9 +++++++++ libiberty/simple-object-elf.c | 10 +++++++++- libiberty/simple-object.c | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index ecbf3e7d41d..f1f010327b0 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,12 @@ +2017-10-18 Jakub Jelinek + + PR lto/82598 + * simple-object.c (handle_lto_debug_sections): Copy over also + .note.GNU-stack section with unchanged name. + * simple-object-elf.c (SHF_EXECINSTR): Define. + (simple_object_elf_copy_lto_debug_section): Drop SHF_EXECINSTR bit + on .note.GNU-stack section. + 2017-09-25 Nathan Sidwell PR demangler/82195 diff --git a/libiberty/simple-object-elf.c b/libiberty/simple-object-elf.c index 7eb3df85668..c39492439d0 100644 --- a/libiberty/simple-object-elf.c +++ b/libiberty/simple-object-elf.c @@ -196,6 +196,7 @@ typedef struct { /* Values for sh_flags field. */ +#define SHF_EXECINSTR 0x00000004 /* Executable section. */ #define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude this section from executable and shared library that it builds @@ -1403,7 +1404,14 @@ simple_object_elf_copy_lto_debug_sections (simple_object_read *sobj, flags = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_flags, Elf_Addr); if (ret == 0) - flags &= ~SHF_EXCLUDE; + { + /* The debugobj doesn't contain any code, thus no trampolines. + Even when the original object needs trampolines, debugobj + doesn't. */ + if (strcmp (name, ".note.GNU-stack") == 0) + flags &= ~SHF_EXECINSTR; + flags &= ~SHF_EXCLUDE; + } else if (ret == -1) flags = SHF_EXCLUDE; ELF_SET_FIELD (type_functions, ei_class, Shdr, diff --git a/libiberty/simple-object.c b/libiberty/simple-object.c index 553e90f5048..19d222fb1cd 100644 --- a/libiberty/simple-object.c +++ b/libiberty/simple-object.c @@ -273,6 +273,9 @@ handle_lto_debug_sections (const char **name) *name = *name + sizeof (".gnu.lto_") - 1; return 1; } + /* Copy over .note.GNU-stack section under the same name if present. */ + else if (strcmp (*name, ".note.GNU-stack") == 0) + return 1; return 0; } -- 2.30.2