| | |
| | |
| | #include "../src/config.h" |
| |
|
| | |
| |
|
| | #if defined(_LIBUNWIND_USE_DL_ITERATE_PHDR) && \ |
| | defined(_LIBUNWIND_USE_FRAME_HEADER_CACHE) |
| |
|
| | #include <link.h> |
| | #include <stdio.h> |
| |
|
| | |
| | |
| | #include "../src/AddressSpace.hpp" |
| |
|
| | #define kBaseAddr 0xFFF000 |
| | #define kTextSegmentLength 0xFF |
| |
|
| | using namespace libunwind; |
| |
|
| | int main() { |
| | FrameHeaderCache FHC; |
| | struct dl_phdr_info PInfo; |
| | memset(&PInfo, 0, sizeof(PInfo)); |
| | |
| | |
| | |
| | PInfo.dlpi_adds = 6; |
| | PInfo.dlpi_subs = 7; |
| |
|
| | UnwindInfoSections UIS; |
| | UIS.dso_base = kBaseAddr; |
| | UIS.text_segment_length = kTextSegmentLength; |
| | dl_iterate_cb_data CBData; |
| | |
| | CBData.addressSpace = nullptr; |
| | CBData.sects = &UIS; |
| | CBData.targetAddr = kBaseAddr + 1; |
| |
|
| | |
| | if (FHC.find(&PInfo, 0, &CBData)) |
| | abort(); |
| | FHC.add(&UIS); |
| | |
| | if (!FHC.find(&PInfo, 0, &CBData)) |
| | abort(); |
| | |
| | PInfo.dlpi_adds++; |
| | if (FHC.find(&PInfo, 0, &CBData)) |
| | abort(); |
| |
|
| | FHC.add(&UIS); |
| | CBData.targetAddr = kBaseAddr - 1; |
| | |
| | if (FHC.find(&PInfo, 0, &CBData)) |
| | abort(); |
| | |
| | for (int i = 0; i < 9; i++) { |
| | UIS.dso_base = kBaseAddr + (kTextSegmentLength * i); |
| | FHC.add(&UIS); |
| | } |
| | CBData.targetAddr = kBaseAddr; |
| | |
| | if (FHC.find(&PInfo, 0, &CBData)) |
| | abort(); |
| | return 0; |
| | } |
| |
|
| | #else |
| | int main() { return 0;} |
| | #endif |
| |
|