1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-24 16:27:37 +01:00
Commit graph

3016 commits

Author SHA1 Message Date
Arun Sharma
4dbc2bcb94 Fix a compiler warning
backtrace() needs execinfo.h
2011-08-15 20:19:47 -07:00
Ken Werner
d83846f120 ARM: Initial support for remote unwinding using libunwind-ptrace
Change _UPTi_find_unwind_table to also look for the ARM specific unwind
information. Adjust the ARM unwind code to read memory using the accessor
routines.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-08-15 20:12:54 +02:00
Ken Werner
b317cb4829 Change libunwind-ptrace to also look for .debug_frame if nothing found in .eh_frame.
This changes the behavior of libunwind-ptrace to what we do for local
unwinding.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-08-15 20:12:54 +02:00
Ken Werner
545023c207 Rework the lookup of the ARM specific unwind info
Implement routines for finding the proc_info and searching the unwind table
for the ARM backend.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-08-15 20:12:54 +02:00
Ken Werner
0b9f591823 Make the dwarf dl_iterate_phdr callback available within libunwind.
Rename the dwarf dl_iterate_phdr callback routine and the callback_data
structure to dwarf_callback and dwarf_callback_data. Make it available
within libunwind by declaring the two at the dwarf.h header file.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-08-15 20:12:54 +02:00
Ken Werner
25f6b8295d Change address type from void* to unw_word_t.
Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-07-28 11:10:02 +00:00
Ken Werner
264b101905 Move arm_exidx_entry and arm_exidx_table structs from ex_tables.h into libunwind-arm.h.
Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-07-15 11:57:55 +00:00
Ken Werner
b28335b5a5 Fix inline assembly.
Remove the third colon if the clobber list is not present.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-06-30 12:36:44 +02:00
Arun Sharma
e09f9701ff Handle register nums > 16 on x86_64
gcc generates them when using ms-abi. Support disabled by
default since it increases the cache footprint of the library.
2011-06-18 20:48:49 -07:00
Joel Brobecker
7d43108f9c No libunwind-generic.so if configured with --disable-shared
Installing a libunwind that was configured with --disable-shared
results in a broken libunwind-generic.so link. This patch avoids
this broken link.
2011-06-18 19:50:39 -07:00
Joel Brobecker
ea7160a841 Remove unintended semi-colon in os-hpux.c fun definition
Probably a copy/paste error... This showed up on ia64-hpux.
2011-06-18 19:50:35 -07:00
Joel Brobecker
8d991d9258 Fix call to maps_next in _UPT_get_dyn_info_list_addr.c
A previous change reduced the number of arguments that this function
tasks, but one call at least did not get updated, resulting in a build
failure on ia64-linux.  This patch fixes it.
2011-06-18 19:50:31 -07:00
Joel Brobecker
e003e44a37 Check for <sys/ptrace.h> before including it
On ia64-hpux version 11.31, <sys/ptrace.h> has been removed.
This patch adds a configure check for this header file, and only
includes <sys/ptrace.h> if it exists.
2011-06-18 19:50:28 -07:00
Lassi Tuura
d2525ec936 Use single level hash table for fast trace. 2011-05-06 22:09:07 -07:00
Lassi Tuura
5c2cade264 Inline access to initial register values as it's known to be safe. 2011-05-06 20:19:36 -07:00
Ken Werner
36511d3d1f Add support for handling signal frames on ARM Linux.
This patch add support for resuming at a certain stack frame even if signal
frames are involved. For restoring the registers the trampoline (sigreturn)
is used. RT and non-RT signal frames are handled for both >=2.6.18 and
<2.6.18 kernels.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-05-03 20:18:40 +02:00
Ken Werner
9533ea1a6a Add support for RT signal frame detection on ARM.
This patch adds a few more patterns to the check that detects if the IP
points to a sigreturn sequence.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-05-03 20:18:33 +02:00
Ken Werner
1e10c2931d Add initial support for local unw_resume on ARM Linux.
Provides basic support for resuming execution at a certain stack frame.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-21 17:25:42 +02:00
Ken Werner
288f18f7ae ARM: tests/Gtest-dyn1.c workaround for GCC bug.
Temporarily workaround for a GCC bug that prevents code from obtaining the
thumb marker: https://bugs.launchpad.net/gcc-linaro/+bug/721531.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-21 17:25:42 +02:00
Ken Werner
3b917f2d16 ARM: tests/Gtest-dyn1.c fixes.
Define an appropriate fdesc struct and its corresponding accessors that take
care of the thumb marker on ARM. Call the __clear_cache built-in instead of
flush_cache if the GNU compiler is used.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-21 17:25:42 +02:00
Ken Werner
a624812e2a ARM: tests/Gtest-trace.c - IP printing
Print the instruction pointer on ARM as well.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-21 17:25:42 +02:00
Ken Werner
d589e20506 Add the appropriate libraries to the *_LDADD variables.
The test-async-sig.c, test-flush-cache.c and Ltest_resume_sig.c define
UNW_LOCAL_ONLY and therefore only need LIBUNWIND_local. Gtest-dyn1.c is
calling '_U_dyn_cancel' and test-trace.c is using 'unw_backtrace' which
are in LIBUNWIND_local.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-21 17:25:42 +02:00
Lassi Tuura
ae5c1f2adf Performance optimisations for fast trace.
Insert static branch prediction predicates in useful places and avoid
unnecessary code in the hottest paths. Bypass unnecessary indirect
calls, in particular to access_mem(), when known to be safe.
2011-04-17 20:34:38 -07:00
Arun Sharma
e2962af9d3 Implement a cheaper getcontext()
Since the fast unwinding code path doesn't need the full context,
a faster target dependent getcontext is implemented.

Signed-off-by: Lassi Tuura <lat@cern.ch>
2011-04-05 22:07:05 -07:00
Arun Sharma
15f182828d Use __thread instead of pthread_getspecific() 2011-04-05 22:06:51 -07:00
Ken Werner
171e3e51f4 Add tests/[GL]perf-trace to the .gitignore file.
Prevents 'git status' from listing the tests/[GL]perf-trace.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-05 20:59:10 -07:00
Ken Werner
e4593e2493 Increase alternate signal stack size.
Creating an alternate signal stack with a size of SIGSTKSZ (usually 8k) is
not enough on some targets because unw_cursor_t is bigger than that already.
Since the size of unw_cursor_t is part of the ABI the UNW_TDEP_CURSOR_LEN
can't be changed without breaking existent code. Therefore size of the
alternate signal stack has been increased to 1 MiB.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-05 20:59:10 -07:00
Ken Werner
fd21d07fe4 Create a generic and local variant of the extbl parser.
In order to have the DWARF_* macros working properly a generic and a local
variant of the ex_tables.c have been created.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-04-05 20:59:10 -07:00
Arun Sharma
d86155f72e Add a test to catch calls to calloc from libunwind
We'd like to avoid calls to all malloc related functions
so libunwind is still usable from such allocators.

Signed-off-by: Paul Pluzhnikov <ppluzhnikov@google.com>
2011-04-05 20:59:03 -07:00
Arun Sharma
4dc222cf8a Undo parts of 2f9b04e9c2
Linking to local unwind library seems to be unrelated to
failures seen earlier.
2011-04-05 13:41:29 -07:00
Lassi Tuura
5f38f35d5d Drop a call frame in tdep_trace and avoid a call to unw_step.
Dropping the extra frame for unw_backtrace itself using unw_step is
approximately 15% slower than skipping the frame in tdep_trace.  So
drop the frame in the latter, and make the function a private
implementation detail for libunwind, not an exported interface.

Also moves unw_getcontext call back into unw_backtrace to avoid an
extra call frame in case slow_backtrace does not get inlined into
unw_backtrace.
2011-04-01 00:00:39 -07:00
Lassi Tuura
50bc12afba Export unw_backtrace() and alias backtrace() to it. 2011-04-01 00:00:33 -07:00
Arun Sharma
2f9b04e9c2 Mark slow_backtrace() ALWAYS_INLINE
Also fix Makefile.am so remote unwinding tests such Gtest-trace
don't link with the local unwind library (libunwind.a).
2011-03-31 22:58:07 -07:00
Arun Sharma
27d0dbfecb Ensure tests pass on 32 bit x86. 2011-03-25 14:34:41 -07:00
Lassi Tuura
3b9fd99cb7 Assign copyright as requested by the author. 2011-03-25 00:20:49 -07:00
Lassi Tuura
f1ea02be58 Reset 'used' to zero after expanding frame cache hash table. 2011-03-25 00:20:48 -07:00
Arun Sharma
741a5a2149 Add some performance tests for fast backtracing. 2011-03-25 00:20:46 -07:00
Arun Sharma
7ff83c051e Fix up compilation and test failures 2011-03-24 23:32:25 -07:00
Lassi Tuura
44a14d1364 Integrate fast trace into backtrace(). 2011-03-24 22:33:55 -07:00
Lassi Tuura
9e98f15e9a Fast back-trace for x86_64 for only collecting the call stack.
Adds new function to perform a pure stack walk without unwinding,
functionally similar to backtrace() but accelerated by an address
attribute cache the caller maintains across calls.
2011-03-24 22:33:17 -07:00
Arun Sharma
6c1a58fd06 Remove the unused arm_extbl_test_LDADD from Makefile.am 2011-03-24 21:49:17 -07:00
Lassi Tuura
28f33c8ce0 Auto-detect whether to use msync() or mincore() for address validation. 2011-03-24 21:02:28 -07:00
Ken Werner
f643684978 Add test-static-link to the .gitignore file.
Prevents 'git status' from listing the tests/test-static-link.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:34 -07:00
Ken Werner
0f9937485e ARM: Return the dwarf.cfa in case the user requests SP/R13.
Usually we don't have a valid location for the SP but we keep calculating
the value of the CFA. The ARM backend should return this value instead.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:33 -07:00
Ken Werner
f053677198 Remove the ARM_EXIDX_TABLE_MALLOC code path.
Using malloc is not an option since unw_init_local and unw_step are supposed
to be async signal safe. Therefore this code path can be removed.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:33 -07:00
Ken Werner
6296ff1fb2 Remove the appname string of the ARM extbl parser.
There is no need for libunwind to set/fake a name of the elf file from which
the program header came from.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:33 -07:00
Ken Werner
dcb8d0d90f Prefer to unwind using DWARF info on ARM.
DWARF expressions are more powerful than the ARM specific unwind tables.
Therefore DWARF should be the preferred unwind method.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:33 -07:00
Ken Werner
fb325c895e ARM extbl cleanup.
Move code that does not necessarily need to reside in the ex_tables.h header
file into ex_tables.c. Add comments and remove unused code.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:44:25 -07:00
Ken Werner
6e25c11505 Remove the arm-extbl-test.
This test case relies on old libunwind internals such as the arm_stackframe.
Since the ARM extbtl-parser now operates on the DWARF model directly the
arm-extbl-test isn't of any particular use anymore.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:42:01 -07:00
Ken Werner
cf8d5e41af Have the ARM extbtl-parser operate on the DWARF model directly.
This eliminates the arm_stackframe and therefore the need to synchronize the
two models. It also clears the way for unwinding call stacks with mixed
DWARF- and extbl-frames.

Signed-off-by: Ken Werner <ken.werner@linaro.org>
2011-03-24 20:42:00 -07:00