On Mon, 25 Jan 2021, Jakub Jelinek wrote: > Hi! > > binutils since https://sourceware.org/bugzilla/show_bug.cgi?id=25612 > changes from March last year until the > https://sourceware.org/pipermail/binutils/2020-August/112684.html > fix in early August emits incorrect .debug_info when assembling files > with --gdwarf-5. Instead of emitting proper DWARF 5 .debug_info header, > it emits DWARF 4 .debug_info header with 5 as the dwarf version instead of > 4. This results e.g. in libgcc.a (morestack.o) having garbage in its > .debug_info sections and e.g. libbacktrace during pretty much all libgo > tests fails miserably. > > The following patch adds a workaround for that, don't set > HAVE_AS_GDWARF_5_DEBUG_FLAG if readelf can't read the .debug_info back. > > Built tested on x86_64-linux against both binutils 2.35 (buggy ones) and > latest binutils trunk, the former with the patch now has DWARF 3 > .debug_line and DWARF 2 .debug_info in morestack.o, while the latter > as before correct DWARF 5 .debug_line and .debug_info. > > Ok for trunk?
OK. Richard. > 2021-01-25 Jakub Jelinek <ja...@redhat.com> > > PR debug/98811 > * configure.ac (HAVE_AS_GDWARF_5_DEBUG_FLAG): Only define if > readelf -wi is able to read the emitted .debug_info back. > * configure: Regenerated. > > --- gcc/configure.ac.jj 2021-01-25 12:35:11.034835330 +0100 > +++ gcc/configure.ac 2021-01-25 13:04:10.002980861 +0100 > @@ -5416,8 +5416,12 @@ if test x"$insn" != x; then > > gcc_GAS_CHECK_FEATURE([--gdwarf-5 option], > gcc_cv_as_gdwarf_5_flag, > - [elf,2,36,0], [--gdwarf-5], [$insn],, > - [AC_DEFINE(HAVE_AS_GDWARF_5_DEBUG_FLAG, 1, > + [elf,2,36,0], [--gdwarf-5], [$insn], > + [if test x$gcc_cv_readelf != x \ > + && $gcc_cv_readelf -wi conftest.o 2>&1 \ > + | grep DW_TAG_compile_unit > /dev/null 2>&1; then > + gcc_cv_as_gdwarf_5_flag=yes; > + fi],[AC_DEFINE(HAVE_AS_GDWARF_5_DEBUG_FLAG, 1, > [Define if your assembler supports the --gdwarf-5 option.])]) > > dwarf4_debug_info_size=0x46 > --- gcc/configure.jj 2021-01-25 12:35:11.012835581 +0100 > +++ gcc/configure 2021-01-25 13:04:14.982924030 +0100 > @@ -29075,7 +29075,11 @@ fi > $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > test $ac_status = 0; }; } > then > - gcc_cv_as_gdwarf_5_flag=yes > + if test x$gcc_cv_readelf != x \ > + && $gcc_cv_readelf -wi conftest.o 2>&1 \ > + | grep DW_TAG_compile_unit > /dev/null 2>&1; then > + gcc_cv_as_gdwarf_5_flag=yes; > + fi > else > echo "configure: failed program was" >&5 > cat conftest.s >&5 > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)