I backported the libbacktrace fix in http://gcc.gnu.org/ml/gcc-patches/2013-10/msg01445.html to the GCC 4.8 branch. Bootstrapped and ran libbacktrace testsuite on x86_64-unknown-linux-gnu. Committed to 4.8 branch.
Ian 2013-11-30 Ian Lance Taylor <i...@google.com> Backport from mainline: 2013-10-17 Ian Lance Taylor <i...@google.com> * elf.c (elf_add): Don't get the wrong offsets if a debug section is missing.
Index: elf.c =================================================================== --- elf.c (revision 205552) +++ elf.c (working copy) @@ -725,6 +725,8 @@ elf_add (struct backtrace_state *state, { off_t end; + if (sections[i].size == 0) + continue; if (min_offset == 0 || sections[i].offset < min_offset) min_offset = sections[i].offset; end = sections[i].offset + sections[i].size; @@ -751,8 +753,13 @@ elf_add (struct backtrace_state *state, descriptor = -1; for (i = 0; i < (int) DEBUG_MAX; ++i) - sections[i].data = ((const unsigned char *) debug_view.data - + (sections[i].offset - min_offset)); + { + if (sections[i].size == 0) + sections[i].data = NULL; + else + sections[i].data = ((const unsigned char *) debug_view.data + + (sections[i].offset - min_offset)); + } if (!backtrace_dwarf_add (state, base_address, sections[DEBUG_INFO].data,