| 62 | // AbstractUnwinder utilities |
| 63 | |
| 64 | static std::optional<std::string> |
| 65 | DIENameFromScope(Dwarf_Die* die) |
| 66 | { |
| 67 | Dwarf_Attribute attr; |
| 68 | const char* name; |
| 69 | name = dwarf_formstring( |
| 70 | dwarf_attr_integrate(die, DW_AT_MIPS_linkage_name, &attr) |
| 71 | ?: dwarf_attr_integrate(die, DW_AT_linkage_name, &attr)); |
| 72 | if (name == nullptr) { |
| 73 | name = dwarf_diename(die); |
| 74 | } |
| 75 | return name == nullptr ? std::nullopt : std::optional<std::string>(name); |
| 76 | } |
| 77 | |
| 78 | static int |
| 79 | frameCallback(Dwfl_Frame* state, void* arg) |