d299a7ab588cba9038124613ac086635f96a47d4 |
|
18-May-2018 |
Christopher Ferris <cferris@google.com> |
Fix bug when doing signal handler lookup. The new lld linker uses all non-zero offset executable maps. There was a bug when trying to find if the stack is in a signal handler that caused the code to read the wrong place in the elf. Fixed by not adding the elf offset to the relative pc. Also fixed the unwind_for_offline tool to dump multiple stacks if necessary. Added new offline unit test that would have failed with the old code. Bug: 79936827 Test: Ran unit tests and libbacktrace unit tests. Test: Dumped backtraces of system pids. Test: Ran 137-cfi art test. Change-Id: Iaca8c18c2a314902e64c3f72831234297e8dcb1b Merged-In: Iaca8c18c2a314902e64c3f72831234297e8dcb1b (cherry picked from commit 239425b9fa91ae13d18cf8158b31663876d07acf)
/system/core/libunwindstack/tests/ElfTest.cpp
|
414df3e583c21023a22a11b64e703cd4ab38b29a |
|
15-Mar-2018 |
Yabin Cui <yabinc@google.com> |
Always set the sp reg to the cfa for DWARF. There are a few places where it is assumed that this register is set to the cfa value when interpreting DWARF information. Add a testcase for unwinding art_quick_osr_stub on ARM. Bug: 73954823 Test: Ran libunwindstack/libbacktrace unit tests. Test: Random debuggerd -b of process on a hikey. Test: Ran the 137 art test on host. Change-Id: Ida6ccdc38c3cfeea6b57fe861a0cc127b150b790 (cherry picked from commit 11e96fe48a74e6ab97d4de899684d3a61a9d1129)
/system/core/libunwindstack/tests/ElfTest.cpp
|
2fcf4cf13e9aefa8c312084af12ca2d712a6ead3 |
|
24-Jan-2018 |
Christopher Ferris <cferris@google.com> |
Add error propagation into Unwinder/Elf objects. The backtrace offline code uses these error codes to diagnose errors. In addtion, I've had cases where seeing these errors would help diagnose failures. This also allows us to add a few features to indicate why an unwind terminated (such as max frames exceeded). Bug: 65682279 Test: Updated unit tests pass. Change-Id: If82b5092698e8a194016d670efff1320f9b44d50
/system/core/libunwindstack/tests/ElfTest.cpp
|
150db124f3f3c0f8e1c341fd33c6c64310e0ac39 |
|
21-Dec-2017 |
Christopher Ferris <cferris@google.com> |
Add ability to read jit gdb data. Changes: - New JitDebug class to handle all of the jit gdb interface. - Add unit tests for all, along with new offline test using debug data. - Add new Memory type called MemoryOfflineParts that has multiple MemoryOffline objects to support the offline test. - Update the tools to use the JitDebug object. - Modify libbacktrace to use the JitDebug, but only looking in libart.so and libartd.so. - Change the Format32Bits to Is32Bit since it's more accurate and I use it in a different context where original name didn't make sense. - Add a new function to find global variables in an elf file (GetGlobalVariable). - Add a new function to determine if a pc is valid for this elf (IsValidPc). Bug: 68396769 Test: Ran new unit tests. Added new offline test that uses jit debug data. Test: Ran art test that generates jit data and verified a crash unwinds Test: through the jit data. Change-Id: I6e7ee2f5bab2242028a06feece156dff21c0a974
/system/core/libunwindstack/tests/ElfTest.cpp
|
e7b6624c3fd6bb780f6330448fad175e80469384 |
|
15-Dec-2017 |
Christopher Ferris <cferris@google.com> |
Fix issues in libunwindstack. - Add a load_bias field in MapInfo so that it can be loaded offline, and also so it can be cached. - Add an Add function to the Maps class so that it's possible to manually create a map. - Remove the OfflineMaps class since I haven't found a reason for this to exist. - Add a pointer to the gnu debugdata compressed section in the interface itself and modify the step path to try eh_frame, then debug_frame, then gnu_debugdata. This way arm can add exidx as the last step behind gnu_debugdata. Add an offline test to verify the order of unwind. - Fix x86_64_ucontext_t since it was a different size on 32 bit and 64 bit systems. Test: Pass new unit tests. Change-Id: I978b70d6c244bd307c62a29886d24c1a8cb2af23
/system/core/libunwindstack/tests/ElfTest.cpp
|
61b1a1ae7797e0d3177400cdb3cda028ea14669d |
|
08-Nov-2017 |
Douglas Leung <douglas.leung@mips.com> |
Add libunwindstack support for Mips and Mips64 This patch requires v3.18 kernel or above, because v3.10 kernel has a bug (as of 8/1/2017) in the ptrace(GETREGSET) function for mips and mips64. Change-Id: I004c1fa190193eebe1c84440b366289122a6bd8a Signed-off-by: Douglas Leung <douglas.leung@mips.com> Signed-off-by: Dejan Jovicevic <dejan.jovicevic@mips.com>
/system/core/libunwindstack/tests/ElfTest.cpp
|
d06001d6e07b14b865f3294fff82d2571ed7cb2c |
|
01-Dec-2017 |
Christopher Ferris <cferris@google.com> |
Split arch data into separate files. Add an ArchEnum to express the arch of the Elf objects and Reg objects. Split out the regs code into per arch pieces and generic parts. Also, split out the header files for each arch. Do not break out the test code yet, there isn't enough and it doesn't help to maintain the tests. Test: libunwindstack/libbacktrace/debuggerd unit tests pass. Test: Running debuggerd -b <PIDS> yields valid data on bullhead. Change-Id: If61f6c730c9ff2249f986b41de8c4d62f7158325
/system/core/libunwindstack/tests/ElfTest.cpp
|
c3d79f7c0749a40d523b36807b8d7525cdb90654 |
|
29-Nov-2017 |
Christopher Ferris <cferris@google.com> |
Fix incorrect usage of relative pcs. When stepping, it's necessary to use both the unaltered relative pc and the adjusted relative pc. If the adjusted pc is not used, the wrong unwind information can be used. Added new offline unit tests that take real data and verifies that it unwinds properly. Fix a bug in the map code that would not properly parse map data for a 64 bit process when done in a 32 bit process. Fix bug in eh_frame processing that didn't adjust the pc correctly. Fix unit tests related to the pc adjustment. Bug: 69475565 Test: Passes libbacktrace/libunwindstack unit tests. Test: Run debuggerd -b on processes on a hikey. Change-Id: Ic501a1c4549c5f61d2742a7105c42a960f2c892b
/system/core/libunwindstack/tests/ElfTest.cpp
|
be788d891da26943b1ad6abe0f07a8745fa676d5 |
|
27-Nov-2017 |
Christopher Ferris <cferris@google.com> |
Allow multiple threads sharing a map to unwind. Add a mutex in MapInfo, and a mutex in Elf. Lock the creation of an Elf file using the MapInfo mutex, and lock when calling Step, GetFunctionName, or GetSoname since they can modify information in the object. It might be beneficial to use a fine grained lock in the future. Change the Maps object to contain a vector of MapInfo pointers rather than the total objects. This avoids copying this data around. Add a test to libbacktrace to verify that sharing a map while doing unwinds in different threads works. Add concurrency tests in libunwindstack to verify the locking works. Add always inline to the RegsGetLocal arm and aarch64 functions. I had a case where clang did not inline the code, so make sure this is specified. Bug: 68813077 Test: New unit tests to cover the case. Passes all unit tests. Test: Ran a monkey test while dumping bugreports and verified that Test: no crashes in libunwind. Test: Remove the locking and verified that all of the concurrenty tests fail. Change-Id: I769e728c676f6bdae9e64ce4cdc03b6749beae03
/system/core/libunwindstack/tests/ElfTest.cpp
|
e69f470933f24977825bb34ee39d32650b75107f |
|
20-Oct-2017 |
Christopher Ferris <cferris@google.com> |
Multiple bugfixes, small restructuring. - Move the load bias stored out of ElfInterface into Elf. For the compressed sections, the load bias was not the same as the data from the uncompressed section. - Move the initialization of the compressed section into Init. It was too easy to forget to call the init of the compressed section. - Do not automatically add in load bias to the pc before calling ElfInterface code. Do all of the pc manipulations in the Elf object. - Change the interface GetFunctionName code to pass in the load_bias instead of modifying the pc inside the code. - Modify the Step function to pass in the elf offset, not add it to the pc. It is necessary to have two different relative values when executing the Step: a pc that is relative to the beginning of the elf for the reading data the actual instructions when trying to determine if this is in a signal frame, and a pc that is relative to the map for finding the appropriate unwind information. - Add a feature to Unwinder so that an unwind can be stopped if it ends up in map that has a specified suffix. This is so that the ART unwinding code doesn't require skipping the compressed section. Instead, stop at if trying to unwind through a known suffix code that means the code is in java code. This is important because the compressed section data is not only used by the jave compiled code, so that will continue to work. - Fix tests for restructuring, add new tests for new functionality. Test: Ran art test 137-cfi using new unwinder as default. Test: Ran new unit tests. Change-Id: I42e658c64c5e14f698ba34944a3043afac967884
/system/core/libunwindstack/tests/ElfTest.cpp
|
b9de87f7edefd7a2473134b267716c5fd750e89f |
|
20-Sep-2017 |
Christopher Ferris <cferris@google.com> |
Add a new unwind method on error. If a function crashes by jumping into unexecutable code, the old method could not unwind through that. Add a fallback method to set the pc from the default return address location. In addition, add a new finished check for steps. This will provide a method to indicate that this step is the last step. This prevents cases where the fallback method might be triggered incorrectly. Update the libbacktrace code to unwind using the new methodology. Update the unwind tool to use the new unwind methodology. Add a new option to crasher that calls through a null function. Create a new object, Unwinder, that encapsulates the a basic unwind. For now, libbacktrace will still use the custom code. Added new unit tests to cover the new cases. Also add a test that crashes calling a nullptr as a function, and then has call frames in the signal stack. Bug: 65842173 Test: Pass all unit tests, verify crasher dumps properly. Change-Id: Ia18430ab107e9f7bdf0e14a9b74710b1280bd7f4
/system/core/libunwindstack/tests/ElfTest.cpp
|
a019665b3cb73609c888af7f17c64bf80ec40283 |
|
19-Jul-2017 |
Christopher Ferris <cferris@google.com> |
Add signal handling to the register object. - Add the StepIfSignalHandler function to the Regs object that checks if the code is in a signal handler. - Add tests for new code, also add a test that unwinds through a signal handler. - Slight modification to Elf to fail if a bad machine type is encountered. Add tests for this. Bug: 23762183 Test: Ran unit tests. Change-Id: Idafa1105d00b91a9343d7464ac9ed1cb95830963
/system/core/libunwindstack/tests/ElfTest.cpp
|
d226a5140989f509a0ed3e2723f05d5fc93ce8df |
|
14-Jul-2017 |
Christopher Ferris <cferris@google.com> |
Make the library usable as a library. - Add namespace unwindstack everywhere so that it's easier for other code to use the library. - Move some of the header files into include/unwindstack so that they can be exposed. - Modify the headers so that only a limited number need to be exposed. - Update the tools to use the new headers. - Add a GetLoadBias() call on the Elf object. This prevents the need to get the interface object out of the Elf object. - Move the GetRelPc() call out of the Reg class, to the Elf class. It's not always the case that a Reg object will be around when you want to get a relative pc. The tests for this moved to ElfTest.cpp. Bug: 23762183 Test: Unit tests pass. Change-Id: Iac609dac1dd90ed83d1a1e24ff2579c96c023bc3
/system/core/libunwindstack/tests/ElfTest.cpp
|
570b76f04fbca11471738319f8e9ca0bb5682182 |
|
01-Jul-2017 |
Christopher Ferris <cferris@google.com> |
Init .gnu_debugdata in GetElf(). - Modify the tests to share some code for the generation of the elf data. - Move the gnu_debugdata files into a separate directory. - Add tests for GetElf(). - Move the CreateMemory() tests and the GetElf() tests into separate files. Bug: 23762183 Test: New unit tests pass. Change-Id: Ie3380296bb49753c2ac8801cfa11f93d6ff7121d
/system/core/libunwindstack/tests/ElfTest.cpp
|
bae69f1892b5eee6e2a5af374d524ce3212f0abb |
|
28-Jun-2017 |
Christopher Ferris <cferris@google.com> |
Add .gnu_debugdata support. Update the unwind_info tool to dump all of the sections. Bug: 23762183 Test: Passes new unit tests. Change-Id: I8b223bc208a1a2ef06ed333e6d96943c8f273681
/system/core/libunwindstack/tests/ElfTest.cpp
|
3958f8060ac0adccd977c0fab7a53d45f3fce58d |
|
02-Feb-2017 |
Christopher Ferris <cferris@google.com> |
Elf interface for new unwinder. This cl includes the code to read arm unwind information from a shared library. Bug: 23762183 Test: Passes all unit tests. I can dump the arm unwind information Test: for an arm shared library. Change-Id: I43501ea2eab843b81de8bd5128401dd1971af8d3
/system/core/libunwindstack/tests/ElfTest.cpp
|