[PATCH 2/2] unwind: add libdw as a alternative unwinder back-end

Dmitry V. Levin ldv at altlinux.org
Wed Apr 11 17:24:32 UTC 2018


Hi,

On Wed, Apr 11, 2018 at 12:00:13PM +0200, Mark Wielaard wrote:
> On Wed, 2018-04-11 at 03:14 +0900, Masatake YAMATO wrote:
> > On Tue, 10 Apr 2018 00:43:24 +0300, "Dmitry V. Levin" <ldv at altlinux.org> wrote:
> > > Everything looks fine except on armv7 which seems to be universally broken
> > > (neither libdw nor libunwind works in all distributions I tested).
> > > For example, libdw-based unwinder fails strace-k.test with the following
> > > diagnostics in rawhide scratch build:
> > > getpid()                                = 31248
> > >  > /usr/lib/libc-2.27.9000.so(__getpid+0xc) [0x9f66c]
> > >  > No DWARF information found
> > > 
> > > Surprisingly, aarch64 also fails in rawhide scratch build, but this might
> > > be a rawhide specific issue as in other distributions strace-k.test passes
> > > on aarch64.
> > > 
> > > For the reference, the rawhide scratch build is
> > > https://koji.fedoraproject.org/koji/taskinfo?taskID=26274471
> > 
> > How about install glibc-debuginfo package for the test environment?
> > It seems that "No DWARF information found" on the architectures is expected.
> > 
> > I found following comment in elfutils/tests/backtrace-subr.sh:
> > 
> >     check_native_unsupported()
> >     {
> >       err=$1
> >       testname=$2
> >       check_unsupported $err $testname
> > 
> >       # ARM is special. It is supported, but it doesn't use .eh_frame by default
> >       # making the native tests fail unless debuginfo (for glibc) is installed
> >       # and we can fall back on .debug_frame for the CFI.
> >       case "`uname -m`" in
> >         arm* )
> >           if egrep 'dwfl_thread_getframes(.*)No DWARF information found' $err; then
> >            echo >&2 $testname: arm needs debuginfo installed for all libraries
> >            exit 77
> >           fi
> >         ;;
> >       esac
> >     }
> > 
> > About the comment, "# ARM...", I found following commit log:
> > 
> >     commit 225dddfda38c1cd90e2daa3e72da2a9d01013336
> > >     Author: Mark Wielaard <mjw at redhat.com>
> >     Date:   Sun Jan 26 20:16:48 2014 +0100
> > 
> >         backends: Add arm frame_nregs and set_initial_registers_tid.
> > 
> >         This allows CFI unwinding for ARM. It relies on having .debug_frame around
> >         which is always the case in our testsuite. All native backtrace tests PASS
> >         on arm if debuginfo (for glibc) is installed on the system. Otherwise the
> >         tests SKIP.
> > 
> >         For non-debug unwinding ARM uses EXIDX tables, not .eh_frames, which
> >         would have to be translated to CFI to do unwinding without .debug_frame
> >         available.
> > 
> > >         Signed-off-by: Mark Wielaard <mjw at redhat.com>
> > 
> > Mark, could you give us any hit or comment?
> 
> That commit message does summarize it nicely I think.
> For arm32 elfutils libdw can unwind if it has the CFI, either through
> .eh_frame or .debug_frame, but you have to install the later
> explicitly. To get full unwind support on arm32 we would have to add
> support for EXIDX tables. But nobody has written that support yet.
> 
> For aarch64 I just fixed an issue that seems to have been introduced
> with GCC8 on Fedora 28. I have backported it to the Fedora elfutils
> package for rawhide and f28. It should make unwinding work again on
> that architecture.
> 
> https://sourceware.org/ml/elfutils-devel/2018-q2/msg00006.html
> https://bodhi.fedoraproject.org/updates/FEDORA-2018-0be914ed2a

Thanks!

Mark, besides this arm32 special case,
what are the architectures where current elfutils libdw can unwind?

My wild guess is:
elfutils$ git grep '\<HOOK\>.*\<unwind\>'
backends/aarch64_init.c:  HOOK (eh, unwind);
backends/i386_init.c:  HOOK (eh, unwind);
backends/ppc64_init.c:  HOOK (eh, unwind);
backends/s390_init.c:  HOOK (eh, unwind);
backends/x86_64_init.c:  HOOK (eh, unwind);


-- 
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20180411/313b4bd9/attachment.bin>


More information about the Strace-devel mailing list