mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-17 21:47:37 +01:00
4eb880e1b5
Ubuntu's libc-bin (2.15-0ubuntu20.2) on x86_64 uses DW_CFA_val_expression in describing the pthread spinlock operations __lll_unlock_wake() and __lll_lock_wait(). libunwind 1.1 doesn't understand that opcode and so backtraces from those operations are truncated. This changeset adds basic support for it, by adding a new type to dwarf_loc_t that describes the register's actual contents rather than its location. I've only implemented the new type for x86_64, and stubbed it out for all other architectures -- it looks like a lot of that code is duplicated so oughtn't to be that hard, but I don't have test cases for them. Tested that DW_CFA_val_expression works on x86_64 (by using https://code.google.com/p/gperftools/ on a lock-heavy program). Build-tested on x86, x86_64 and arm. The unit tests don't pass for me on any of those archs, but this cset doesn't break anything that was passing before. Signed-off-by: Tim Deegan <tjd@phlegethon.org> |
||
---|---|---|
.. | ||
tdep | ||
tdep-aarch64 | ||
tdep-arm | ||
tdep-hppa | ||
tdep-ia64 | ||
tdep-mips | ||
tdep-ppc32 | ||
tdep-ppc64 | ||
tdep-sh | ||
tdep-x86 | ||
tdep-x86_64 | ||
x86 | ||
compiler.h | ||
dwarf-eh.h | ||
dwarf.h | ||
dwarf_i.h | ||
libunwind-aarch64.h | ||
libunwind-arm.h | ||
libunwind-common.h.in | ||
libunwind-coredump.h | ||
libunwind-dynamic.h | ||
libunwind-hppa.h | ||
libunwind-ia64.h | ||
libunwind-mips.h | ||
libunwind-ppc32.h | ||
libunwind-ppc64.h | ||
libunwind-ptrace.h | ||
libunwind-sh.h | ||
libunwind-x86.h | ||
libunwind-x86_64.h | ||
libunwind.h.in | ||
libunwind_i.h | ||
mempool.h | ||
remote.h | ||
unwind.h |