Skip to content

Commit 9f18dca

Browse files
committed
Make dwarf_init_path_a error non-fatal
libdwarf failing to parse an object should not inhibit falling back to parsing the ELF symtab.
1 parent f29edec commit 9f18dca

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/symbols/dwarf/dwarf_resolver.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,22 +143,30 @@ namespace libdwarf {
143143
buffer = std::unique_ptr<char[]>(new char[CPPTRACE_MAX_PATH]);
144144
}
145145
dwarf_set_de_alloc_flag(0);
146-
auto ret = wrap(
147-
dwarf_init_path_a,
146+
Dwarf_Error error = nullptr;
147+
auto ret = dwarf_init_path_a(
148148
object_path.c_str(),
149149
buffer.get(),
150150
CPPTRACE_MAX_PATH,
151151
DW_GROUPNUMBER_ANY,
152152
universal_number,
153153
nullptr,
154154
nullptr,
155-
&dbg.get()
155+
&dbg.get(),
156+
&error
156157
);
157158
if(ret == DW_DLV_OK) {
158159
ok = true;
159160
} else if(ret == DW_DLV_NO_ENTRY) {
160161
// fail, no debug info
161162
ok = false;
163+
} else if(ret == DW_DLV_ERROR) {
164+
// fail, parsing error
165+
ok = false;
166+
if(trace_dwarf) {
167+
auto msg = raii_wrap(dwarf_errmsg(error), [this, error] (char*) { dwarf_dealloc_error(dbg.get(), error); });
168+
std::fprintf(stderr, "dwarf error: %s\n", msg.get());
169+
}
162170
} else {
163171
ok = false;
164172
PANIC("Unknown return code from dwarf_init_path");

0 commit comments

Comments
 (0)