[Bug 1894166] Re: libasan missing debug symbols break debugging

Ɓukasz Zemczak 1894166 at bugs.launchpad.net
Mon Jun 14 19:24:39 UTC 2021


Hello Aleksandar, or anyone else affected,

Accepted gcc-10 into focal-proposed. The package will build now and be
available at
https://launchpad.net/ubuntu/+source/gcc-10/10.3.0-1ubuntu1~20.04 in a
few hours, and then in the -proposed repository.

Please help us by testing this new package.  See
https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how
to enable and use -proposed.  Your feedback will aid us getting this
update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug,
mentioning the version of the package you tested, what testing has been
performed on the package and change the tag from verification-needed-
focal to verification-done-focal. If it does not fix the bug for you,
please add a comment stating that, and change the tag to verification-
failed-focal. In either case, without details of your testing we will
not be able to proceed.

Further information regarding the verification process can be found at
https://wiki.ubuntu.com/QATeam/PerformingSRUVerification .  Thank you in
advance for helping!

N.B. The updated package will be released to -updates after the bug(s)
fixed by this package have been verified and the package has been in
-proposed for a minimum of 7 days.

** Changed in: gcc-10 (Ubuntu Focal)
       Status: New => Fix Committed

** Tags added: verification-needed-focal

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-10 in Ubuntu.
https://bugs.launchpad.net/bugs/1894166

Title:
  libasan missing debug symbols break debugging

Status in gcc-10 package in Ubuntu:
  Fix Released
Status in gcc-9 package in Ubuntu:
  Fix Released
Status in gcc-10 source package in Focal:
  Fix Committed
Status in gcc-10 source package in Groovy:
  Fix Committed
Status in gcc-9 source package in Groovy:
  Fix Committed

Bug description:
  By default, all symbols are missing from libasan binary that is
  installed with this package. This, among other things, effectively
  breaks debugging with gdb (and LLDB , but that doesn't matter).

  To be able to catch ASAN errors in GDB , one would break on
  "__sanitizer::Die" and go from there, but without symbols, this won't
  work. Other tools rely on symbol lookups to determine instrumentation
  presence , which would fail in this case as well.

  For example, without libasan5-dbgsym  installed:

  (gdb) break __sanitizer::Die
  Function "__sanitizer::Die" not defined.
  Make breakpoint pending on future shared library load? (y or [n]) y
  Breakpoint 1 (__sanitizer::Die) pending.
  (gdb) r
  ...
  ASAN REPORT
  ...
  ==1802381==ABORTING
  [Inferior 1 (process 1802381) exited with code 01]

  However, with libasan5-dbgsym installed:

  (gdb) break __sanitizer::Die
  Breakpoint 1 at 0x7ffff76bc200: file ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cc, line 49.
  (gdb) r
  ...
  ASAN REPORT
  ...
  ==1805058==ABORTING

  Breakpoint 1, __sanitizer::Die () at ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cc:49
  49      ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cc: No such file or directory.
  (gdb) bt
  #0  __sanitizer::Die () at ../../../../src/libsanitizer/sanitizer_common/sanitizer_termination.cc:49
  #1  0x00007ffff769d8ec in __asan::ScopedInErrorReport::~ScopedInErrorReport (this=0x7fffffffd156, __in_chrg=<optimized out>)
      at ../../../../src/libsanitizer/asan/asan_report.cc:185
  #2  0x00007ffff769d363 in __asan::ReportGenericError (pc=93824992236075, bp=bp at entry=140737488346576, sp=sp at entry=140737488346560, addr=106034152603909,
      is_write=is_write at entry=false, access_size=access_size at entry=1, exp=0, fatal=true) at ../../../../src/libsanitizer/asan/asan_report.cc:192
  #3  0x00007ffff769de4b in __asan::__asan_report_load1 (addr=<optimized out>) at ../../../../src/libsanitizer/asan/asan_rtl.cc:116
  #4  0x000055555555522b in main ()
  (gdb)

  
  In this example, it's fairly obvious that missing symbols will prevent one to put a breakpoint on __sanitizer::Die , but as I mentioned, checks in other tools would fail silently and the issue isn't immediately traceable back to missing symbols. 

  Since AddressSanitizer is primarily used for debugging anyway, would
  it make sense to have libasan with symbols by default?

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-10/+bug/1894166/+subscriptions



More information about the foundations-bugs mailing list