+ static int bt_full_dump_callback(void *vdata, uintptr_t pc,
+ const char *file, int line, const char *func)
+ {
+ libbacktraceProvider *this_ = (libbacktraceProvider*)vdata;
+ RawStackFrame *frame = this_->current_frame;
+ frame->filename = file;
+ frame->linenumber = line;
+ if (func)
+ frame->function = func;
+ dumpFrame(*frame);
+ return 0;
+ }
+
+ static int bt_dump_callback(void *vdata, uintptr_t pc)
+ {
+ libbacktraceProvider *this_ = (libbacktraceProvider*)vdata;
+ RawStackFrame frame;
+ dl_fill(&frame, pc);
+ this_->current_frame = &frame;
+ this_->missingDwarf = false;
+ backtrace_pcinfo(this_->state, pc, bt_full_dump_callback, bt_err_callback, vdata);
+ if (this_->missingDwarf)
+ dumpFrame(frame);
+ return 0;
+ }
+