(unless of course the caller is expected to) @@ -56,18 +57,24 @@ dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr) Dwarf_Addr bias; if (INTUSE(dwfl_module_getdwarf) (mod, &bias) == NULL) return NULL; + fprintf(stderr, "got dwarf 0x%lx\n", addr); struct dwfl_cu *cu; Dwfl_Error error = __libdwfl_addrcu (mod, addr, &cu); if (likely (error == DWFL_E_NOERROR)) error = __libdwfl_cu_getsrclines (cu); + fprintf(stderr, "got addrcu\n"); if (likely (error == DWFL_E_NOERROR)) { + addr = addr - bias; + fprintf(stderr, "searching unbiased 0x%lx\n", (long) addr); /* The lines are sorted by address, so we can use binary search. */ size_t l = 0, u = cu->die.cu->lines->nlines; while (l < u) { size_t idx = (l + u) / 2; + fprintf(stderr, "%d 0x%lx\n", (int)idx, + (long) cu->die.cu->lines->info[idx].addr); if (addr < cu->die.cu->lines->info[idx].addr) u = idx; else if (addr > cu->die.cu->lines->info[idx].addr) which gives the improved effect: got dwarf 0x2aaab057683c addrarange 2aaab057683c naranges 859 adjusted 6e83c by bias 2aaab0508000 found arange at 624 got addrcu searching unbiased 0x6e83c 73 0x6e950 36 0x57fba 55 0x6e87b 46 0x6e83c
Created attachment 308607 [details] fix Just the patch.
This report never supplied a test case, so there is none to verify. This was fixed in 0.135.