This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
addr2line ends up off by 1 line numbers when -O0 is used
- From: Britton Kerin <britton dot kerin at gmail dot com>
- To: binutils at sourceware dot org
- Date: Thu, 17 Mar 2016 14:59:27 -0800
- Subject: addr2line ends up off by 1 line numbers when -O0 is used
- Authentication-results: sourceware.org; auth=none
I'm not sure whether to blame libc (backtrace() function) or gcc or
addr2line, but if I dump the pointers from backtrace() to
address_file then use
addr2line -e my_exe -f -i <address_file >call_locations
to recover the line numbers, the line numbers are off by 1 statement
for some stack frames when -O0 has been used, but not if -O2 has been
used at compile time.
The documentation for backtrace() suggests that things should work
better with -O0 but I seem
to get the opposite.
I'm on gcc 4.8.1, addr2lines binutils 2.26 and libc 2.11.3-4 debian package:
$ ldd --version
ldd (Debian EGLIBC 2.11.3-4) 2.11.3
I thought this might be related to -fomit-frame-pointer. I thought it might be
since -O>0 apparently activates this feature, making stack unwinding more
complex. But adding -fomit-frame-pointer neither fixes the problem when
-O0 is used, nor causes it when -O2 is used.