d1c383c5bb03420decf5cf789cf14ab144b0720d |
|
10-Apr-2014 |
Christopher Ferris <cferris@google.com> |
Fix all warnings, and make warnings errors. Change-Id: Ia2039922b55891551b1de0f0c281c266db6ee219
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
16b95a68caaa7e021209e2cd6a877ae1e558f740 |
|
23-Jan-2014 |
Christopher Ferris <cferris@google.com> |
Add speed-ups to libunwind. Add caching of /proc/self/maps data structures. Add caching of elf image maps attached to the maps data structure. Add a set of new map api functions to handle creation/destruction of the maps by external code. Remove the creation of the maps data structure in the local address space init. Change-Id: I0adae397d433fc3902f83a6f377f6889161937e5
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
eac65dc9b8cc18fa4c65c0485878a11c470357b6 |
|
15-Apr-2013 |
Matt Fischer <matt.fischer@garmin.com> |
Add basic support for the QNX operating system This change adds some special cases to allow libunwind to compile for QNX. * QNX's copy of <elf.h> and <link.h> reside in sys/ instead. To deal with this, an AC_CHECK_HEADERS() was added to check for the files in both locations. * Similarly, QNX does not have <endian.h>. In cases where the file is not found, logic was added to refer to QNX-specific macros to determine endianness. * The QCC compiler, which is a wrapper around GCC, cannot handle some standard GCC options. Therefore, logic was added to check for QCC, and when it is found, to suppress the use of -lgcc, and to express the option -nostartfiles as -Wc,-nostartfiles instead, which is correctly passed on to the underlying GCC. * Finally, the support file os-qnx.c was added, patterned after the existing os-*.c files. Only local image lookup is currently supported (see the comments for more information), but this is sufficient for QNX, since ptrace is not supported there anyway, and that is the only case where the function is required to do remote image lookup. Change-Id: Ie7934f94a7317bdde59335f2acd4c3a97c0384c1
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
a6f2a7a2a871d88402dc28c02bee672f8321b7bb |
|
28-Aug-2012 |
Tommi Rantala <tt.rantala@gmail.com> |
Fix incorrect .debug_frame lookup with non-zero text segment vaddr Unwinding over ptrace and unwinding coredump fail to lookup the .debug_frame dwarf data when the ELF file text segment virtual address is non-zero. Looking at some binaries, the virtual address is non-zero for non-pie binaries, and zero for PIC shared libraries and PIE executables. The core dump unwinder can be used for demonstrating the bug. Without this patch, the unwinding fails badly (testing with a ARM qemu image): $ UNW_ARM_UNWIND_METHOD=1 ./test-coredump-unwind core `cat backing_files` test-coredump-unwind: unw_get_proc_info(ip=0x86d8) failed: ret=-10 After applying this patch, we can unwind all the way until running out of dwarf data: $ UNW_ARM_UNWIND_METHOD=1 ./test-coredump-unwind core `cat backing_files` ip=0x000086d8 proc=000086d4-000086dc handler=0x00000000 lsda=0x00000000 test-coredump-unwind: step test-coredump-unwind: step done:1 ip=0x000086ef proc=000086dc-000086f2 handler=0x00000000 lsda=0x00000000 test-coredump-unwind: step test-coredump-unwind: step done:1 ip=0x000086e7 proc=000086dc-000086f2 handler=0x00000000 lsda=0x00000000 test-coredump-unwind: step test-coredump-unwind: step done:1 ip=0x00008597 proc=00008584-0000859a handler=0x00000000 lsda=0x00000000 test-coredump-unwind: step test-coredump-unwind: step done:1 ip=0x76eacc3b proc=76eacba0-76eaccec handler=0x00000000 lsda=0x00000000 test-coredump-unwind: step test-coredump-unwind: step done:1 test-coredump-unwind: unw_get_proc_info(ip=0x85c3) failed: ret=-10 Note how the binary itself is mapped to address 0x8000, the virtual address for the text segment is 0x8000, and the .debug_frame program counter values are relative to 0: $ tr ' ' '\n' < backing_files 0x8000:/home/user/tests/crasher 0x76e96000:/lib/arm-linux-gnueabi/libc-2.13.so 0x76f77000:/lib/arm-linux-gnueabi/libgcc_s.so.1 0x76f88000:/lib/arm-linux-gnueabi/ld-2.13.so $ readelf -l crasher Elf file type is EXEC (Executable file) Entry point 0x859d There are 9 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align EXIDX 0x0007b0 0x000087b0 0x000087b0 0x00030 0x00030 R 0x4 PHDR 0x000034 0x00008034 0x00008034 0x00120 0x00120 R E 0x4 INTERP 0x000154 0x00008154 0x00008154 0x00013 0x00013 R 0x1 [Requesting program interpreter: /lib/ld-linux.so.3] LOAD 0x000000 0x00008000 0x00008000 0x007e4 0x007e4 R E 0x8000 LOAD 0x000efc 0x00010efc 0x00010efc 0x00148 0x00154 RW 0x8000 DYNAMIC 0x000f08 0x00010f08 0x00010f08 0x000f8 0x000f8 RW 0x4 NOTE 0x000168 0x00008168 0x00008168 0x00044 0x00044 R 0x4 GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4 GNU_RELRO 0x000efc 0x00010efc 0x00010efc 0x00104 0x00104 R 0x1 $ readelf --debug-dump=frames crasher | grep FDE 00000010 00000024 00000000 FDE cie=00000000 pc=00008614..000086d4 00000038 0000000c 00000000 FDE cie=00000000 pc=000086d4..000086dc 00000048 00000014 00000000 FDE cie=00000000 pc=000086dc..000086f2 00000060 00000014 00000000 FDE cie=00000000 pc=00008584..0000859a
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
0fecf13d108b8992ab4f0bc7bfbfb57f12cd9b50 |
|
31-Jul-2012 |
Tommi Rantala <tt.rantala@gmail.com> |
Fix --enable-debug-frame build dwarf/Gfind_unwind_table.c: In function '_Ux86_dwarf_find_unwind_table': dwarf/Gfind_unwind_table.c:223:46: error: 'struct elf_dyn_info' has no member named 'edi'
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
9507a9b5018b8be16d2b62531715f1d1e2999f4a |
|
29-Mar-2012 |
Arun Sharma <asharma@fb.com> |
ia64: move ia64 specific code out of dwarf We still need to fixup the callers to pick dwarf_find_unwind_table vs ia64_find_unwind_table in a target dependent way.
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|
6525714c270c6521389b657793bd7147eeffa4f0 |
|
13-Mar-2012 |
Arun Sharma <asharma@fb.com> |
Move some dwarf functionality from ptrace to dwarf Move ptrace-independent code from src/ptrace/_UPT_find_proc_info.c to src/dwarf/{G,L}find_unwind_table.c. Name this moved function dwarf_find_unwind_table(). Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
/external/libunwind/src/dwarf/Gfind_unwind_table.c
|