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

Masatake YAMATO yamato at redhat.com
Tue Apr 10 18:14:58 UTC 2018


On Tue, 10 Apr 2018 00:43:24 +0300, "Dmitry V. Levin" <ldv at altlinux.org> wrote:
> Hi,
> 
> On Mon, Apr 09, 2018 at 03:06:16AM +0900, Masatake YAMATO wrote:
>> * unwind-libdw.c: New source file.
>> 
>> * configure.ac: New option --with-libdw.
>>   Accept only one of --with-libdw=yes or --with-libunwind=yes.
>>   Don't check libunwind if libdw is available.
>>   (USE_LIBDW): Define.
>>   (AC_SUBST): Add libdw_CFLAGS and libdw_LIBS.
>> 
>> * Makefile.am (USE_LIBDW): New condition.
>> [USE_LIBUNWIND] (strace_SOURCES): Add unwind-libdw.c.
>> [USE_LIBUNWIND] (strace_CPPFLAGS, strace_LDADD): Append libdw_CFLAGS,
>> and strace_LDADD respectively.
> 
> Inspired by commit elfutils-0.170-68-gafffdff29228db03e2131af577f58a22aec6c1fe,
> I played with your first patchset a bit last weekend, you can find the
> result in ldv/stacktrace branch.

Sorry to be late to preare v2 patch.
What I changed in the v2 patch are the return value of
frame_callback() and the way to detecting stack overflow in
tcb_walk. I visit the branch and I found both of them are already
fixed.

> 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?



> -- 
> ldv

Masatake YAMATO


More information about the Strace-devel mailing list