Bug 450229
| Summary: | dwfl_module_getsrc doesn't allow for bias | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Andrew Cagney <cagney> | ||||
| Component: | elfutils | Assignee: | Roland McGrath <roland> | ||||
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Fedora Extras Quality Assurance <extras-qa> | ||||
| Severity: | low | Docs Contact: | |||||
| Priority: | low | ||||||
| Version: | 8 | ||||||
| Target Milestone: | --- | ||||||
| Target Release: | --- | ||||||
| Hardware: | All | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | 0.135 | Doc Type: | Bug Fix | ||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2008-08-14 10:21:59 UTC | Type: | --- | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Bug Depends On: | |||||||
| Bug Blocks: | 173278 | ||||||
| Attachments: |
|
||||||
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. |
(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