[Bug libdw/31447] New: Provide a public debug section relocation function
https://sourceware.org/bugzilla/show_bug.cgi?id=31447 Bug ID: 31447 Summary: Provide a public debug section relocation function Product: elfutils Version: unspecified Status: NEW Severity: normal Priority: P2 Component: libdw Assignee: unassigned at sourceware dot org Reporter: mark at klomp dot org CC: elfutils-devel at sourceware dot org Target Milestone: --- When opening an ET_REL file with dwarf_begin no relocations are resolved and no error checking is done if that is necessary. Causing some functions to produce errors or wrong results (because an index is wrongly assumed to be zero). When opening such a file through libdwfl we do resolve all cross-debug-section relocations using __libdwfl_relocate. It would be good to make this a public function. Maybe through libdwelf dwelf_relocation_debug_sections (Elf *elf). So users can make sure ET_REL files can be handled by libdw. And maybe add a check/flag in dwarf_begin so an error can be produced if a relocation value is needed for a correct result. -- You are receiving this mail because: You are on the CC list for the bug.
[Bug libdw/31447] Provide a public debug section relocation function
https://sourceware.org/bugzilla/show_bug.cgi?id=31447 --- Comment #1 from Mark Wielaard --- This is the current "workaround" I use when working with individual ET_REL DWARF files (also works for any other ELF type): static char *debuginfo_path = NULL; static const Dwfl_Callbacks dwfl_callbacks = { .find_elf = dwfl_build_id_find_elf, .find_debuginfo = dwfl_standard_find_debuginfo, .section_address = dwfl_offline_section_address, .debuginfo_path = &debuginfo_path, }; int main (int argc, char **argv) { Dwfl *dwfl = dwfl_begin (&dwfl_callbacks); Dwfl_Module *module = dwfl_report_elf (dwfl, argv[1], argv[1], -1, 0, false); if (module == NULL) printf ("%s\n", dwfl_errmsg (-1)); dwfl_report_end (dwfl, NULL, NULL); Dwarf_Addr bias; Dwarf *dwarf = dwfl_module_getdwarf (module, &bias); if (dwarf == NULL) printf ("%s\n", dwfl_errmsg (-1)); /* ... do something with dwarf ... */ dwfl_end (dwfl); // Also cleans up dwarf. } But this is obviously a little cumbersome if not really using any other libdwfl features. -- You are receiving this mail because: You are on the CC list for the bug.