summaryrefslogtreecommitdiff
path: root/libunwindstack/DwarfEhFrame.h
AgeCommit message (Collapse)Author
2022-04-20Use #pragma once header guard.Christopher Ferris
Move to using the #pragma once header guard instead of the #ifndef construct since it's cleaner. Test: Compiles. Change-Id: I0bd76b53cfc78df7465029ef34783f85651a9c74
2019-10-29Fix potential bad info in eh_frame_hdr.Christopher Ferris
Due to a bug, an elf can have FDEs with a length of zero, while still having another FDE for the same pc with a non-zero length. The eh_frame_hdr can sometimes point to the zero length FDE, but it should have pointed to the non-zero length FDE. In order to fix this, if the eh_frame_hdr points at the zero length FDE then try and find the real FDE directly from eh_frame. The change cleans up and removes unused variables from DwarfEhFrameWithHdr and changes the objects so that all of the DwarfSection objects and DwarfEhFrameWithHdr object inherit from the same class. Add new unit tests to verify this functionality. Bug: 142483624 Test: Unit tests all pass. Change-Id: I128a916e3ba378931de7d44ee15e57e24d4073df
2018-06-27Refactor the DwarfSection classes.Christopher Ferris
Modify the code for the no header sections because it turns out that it is not okay to assume that the fdes are non-overlapping. It's necessary to read the fdes in order and match as you go. Modify the code so that it only reads until it finds the given pc rather than reading all of the cie/fde entries at once. Rewrote the tests to verify the new behavior. Bug: 68998033 Bug: 110235461 Test: Ran libbacktrace/libunwindstack unit tests. Test: Unwind the mediaserver process on a walleye and verify it Test: unwinds properly. Change-Id: I7bb59d1db72c13fa34caa9735ec34c1a60e20ed2
2018-02-08Expose per arch headers.Christopher Ferris
Bug: 73013352 Test: Compiles. Change-Id: Ic05660db7d7858a9857143ee5e58cdaddcf52a35
2017-11-29Fix incorrect usage of relative pcs.Christopher Ferris
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
2017-11-07Add support for only a .eh_frame.Christopher Ferris
Static executables only have a .eh_frame section and no .eh_frame_hdr section. Add support for this by rearranging the class hierarchy and creating a DwarfEhFrameWithHdr class and a DwarfEhFrame class to handle the different cases. Add new unit tests for DwarfEhFrame and for the new functionality. Bug: 68820189 Test: Passes new unit tests, unwinds static executables. Change-Id: I63d7cb8c52a686e96579a2266e18c0d06bbb6e63
2017-07-14Make the library usable as a library.Christopher Ferris
- 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
2017-06-16Add EH frame and debug frame support.Christopher Ferris
Bug: 23762183 Test: Pass new unit tests. Change-Id: I1bfe900e068017ff31998f359bf98d4c5c9af2a5