aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-18 11:20:31 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-18 11:20:31 +0200
commitf8049c44b999c27e4573be61aebb3aeedfa0a471 (patch)
tree32b58288db1646967f927fe5f8ad0201503115f1
parentac2bb5222b47c6d79372ecbc16da3b282792ea07 (diff)
downloadgcc-f8049c44b999c27e4573be61aebb3aeedfa0a471.zip
gcc-f8049c44b999c27e4573be61aebb3aeedfa0a471.tar.gz
gcc-f8049c44b999c27e4573be61aebb3aeedfa0a471.tar.bz2
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
-rw-r--r--libiberty/ChangeLog9
-rw-r--r--libiberty/simple-object-elf.c10
-rw-r--r--libiberty/simple-object.c3
3 files changed, 21 insertions, 1 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index ecbf3e7..f1f0103 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,12 @@
+2017-10-18 Jakub Jelinek <jakub@redhat.com>
+
+ 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 <nathan@acm.org>
PR demangler/82195
diff --git a/libiberty/simple-object-elf.c b/libiberty/simple-object-elf.c
index 7eb3df8..c394924 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 553e90f..19d222f 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;
}