49 uintptr_t target_pc, uint32_t &out_unwind_data)
noexcept {
50 if (num_entries == 0 || table_base == 0)
54 size_t high = num_entries;
55 size_t match_index = num_entries;
59 size_t mid = low + (high - low) / 2;
60 uintptr_t entry_addr = table_base + (mid * 8);
63 if (!space.read_bytes(entry_addr, &prel31, 4)) {
67 uintptr_t fn_addr = decode_prel31(entry_addr, prel31);
69 if (fn_addr <= target_pc) {
78 if (match_index == num_entries) {
83 uintptr_t matched_entry_addr = table_base + (match_index * 8);
84 uint32_t unwind_data = 0;
85 if (!space.read_bytes(matched_entry_addr + 4, &unwind_data, 4)) {
90 if (unwind_data == 0x1) {
94 out_unwind_data = unwind_data;