On my system with g++ (GCC) 8.2.1
20180831 with GNU gold (GNU Binutils
2.31.1) 1.16, the .eh_frame section does not have type PROGBITS
but rather is using X86_64_UNWIND nowadays:
```
$ echo "int main(){ return 0; }" > test.c
$ gcc test.c
$ readelf --sections a.out | grep .eh_frame
[14] .eh_frame X86_64_UNWIND
0000000000000670 00000670
[15] .eh_frame_hdr X86_64_UNWIND
0000000000000724 00000724
```
Without this patch, libdw refuses to use the available unwind
information, leading to broken backtraces while unwinding. With the
patch applied, unwinding works once more in such situations.
Signed-off-by: Milian Wolff <milian.wolff@kdab.com>
Signed-off-by: Mark Wielaard <mark@klomp.org>
Tested-by: Milian Wolff <milian.wolff@kdab.com>
+2018-10-29 Milian Wolff <milian.wolff@kdab.com>
+
+ * dwarf_getcfi_elf.c (getcfi_shdr): Check sh_type != SHT_NOBITS.
+
2018-09-13 Mark Wielaard <mark@klomp.org>
* dwarf_begin_elf.c (check_section): Drop ehdr argument, add and
}
else if (!strcmp (name, ".eh_frame"))
{
- if (shdr->sh_type == SHT_PROGBITS)
+ if (shdr->sh_type != SHT_NOBITS)
return getcfi_scn_eh_frame (elf, ehdr, scn, shdr,
hdr_scn, hdr_vaddr);
else