This patch to the GCC 7 libbacktrace ignores compressed debug
sections. If we don't, the DWARF reader reports an error. Since the
GCC 7 libbacktrace does not support uncompressing the debug sections,
ignoring them is the best approach (on trunk, we uncompress). This is
for PR 80914. Bootstrapped and ran libbacktrace tests on
x86_64-pc-linux-gnu. Committed to GCC 7 branch.
Ian
2017-10-10 Ian Lance Taylor <[email protected]>
PR go/80914
* elf.c (SHF_COMPRESSED): Define.
(elf_add): Ignore debug sections with SHF_COMPRESSED set.
Index: elf.c
===================================================================
--- elf.c (revision 253593)
+++ elf.c (working copy)
@@ -103,6 +103,7 @@
#undef SHT_SYMTAB
#undef SHT_STRTAB
#undef SHT_DYNSYM
+#undef SFH_COMPRESSED
#undef STT_OBJECT
#undef STT_FUNC
@@ -195,6 +196,8 @@
#define SHT_STRTAB 3
#define SHT_DYNSYM 11
+#define SHF_COMPRESSED 0x800
+
#if BACKTRACE_ELF_SIZE == 32
typedef struct
@@ -700,7 +703,8 @@
for (j = 0; j < (int) DEBUG_MAX; ++j)
{
- if (strcmp (name, debug_section_names[j]) == 0)
+ if (strcmp (name, debug_section_names[j]) == 0
+ && (shdr->sh_flags & SHF_COMPRESSED) == 0)
{
sections[j].offset = shdr->sh_offset;
sections[j].size = shdr->sh_size;