A couple fixes
This commit is contained in:
parent
d8b9f45a24
commit
a3ebd42802
@ -493,7 +493,12 @@ namespace libdwarf {
|
|||||||
name.value_or(""),
|
name.value_or(""),
|
||||||
true
|
true
|
||||||
});
|
});
|
||||||
current_obj_holder = die.clone();
|
auto d = die.clone();
|
||||||
|
if(!d) {
|
||||||
|
d.drop_error();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
current_obj_holder = std::move(d).unwrap_value();
|
||||||
target_die = current_obj_holder;
|
target_die = current_obj_holder;
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -314,7 +314,7 @@ namespace libdwarf {
|
|||||||
if(ranges_res.is_error()) {
|
if(ranges_res.is_error()) {
|
||||||
return ranges_res.unwrap_error();
|
return ranges_res.unwrap_error();
|
||||||
} else if(ranges_res.unwrap_value() != DW_DLV_OK) {
|
} else if(ranges_res.unwrap_value() != DW_DLV_OK) {
|
||||||
return internal_error("Unexpected value from dwarf_attr: " + std::to_string(ranges_res.unwrap_value()));
|
return monostate{}; // normal
|
||||||
}
|
}
|
||||||
auto attrwrapper = raii_wrap(attr, [] (Dwarf_Attribute attr) { dwarf_dealloc_attribute(attr); });
|
auto attrwrapper = raii_wrap(attr, [] (Dwarf_Attribute attr) { dwarf_dealloc_attribute(attr); });
|
||||||
PROP_ASSIGN(offset, get_ranges_offset(attr));
|
PROP_ASSIGN(offset, get_ranges_offset(attr));
|
||||||
@ -404,10 +404,16 @@ namespace libdwarf {
|
|||||||
NODISCARD
|
NODISCARD
|
||||||
Result<monostate, internal_error> dwarf4_ranges(Dwarf_Addr lowpc, F callback) const {
|
Result<monostate, internal_error> dwarf4_ranges(Dwarf_Addr lowpc, F callback) const {
|
||||||
Dwarf_Attribute attr = nullptr;
|
Dwarf_Attribute attr = nullptr;
|
||||||
CHECK_OK(wrap(dwarf_attr, die, DW_AT_ranges, &attr));
|
PROP_ASSIGN(res, wrap(dwarf_attr, die, DW_AT_ranges, &attr));
|
||||||
|
if(res != DW_DLV_OK) {
|
||||||
|
return monostate{}; // normal
|
||||||
|
}
|
||||||
auto attrwrapper = raii_wrap(attr, [] (Dwarf_Attribute attr) { dwarf_dealloc_attribute(attr); });
|
auto attrwrapper = raii_wrap(attr, [] (Dwarf_Attribute attr) { dwarf_dealloc_attribute(attr); });
|
||||||
Dwarf_Unsigned offset;
|
Dwarf_Unsigned offset;
|
||||||
CHECK_OK(wrap(dwarf_global_formref, attr, &offset));
|
PROP_ASSIGN(res2, wrap(dwarf_global_formref, attr, &offset));
|
||||||
|
if(res2 != DW_DLV_OK) {
|
||||||
|
return monostate{}; // normal
|
||||||
|
}
|
||||||
Dwarf_Addr baseaddr = 0;
|
Dwarf_Addr baseaddr = 0;
|
||||||
if(lowpc != (std::numeric_limits<Dwarf_Addr>::max)()) {
|
if(lowpc != (std::numeric_limits<Dwarf_Addr>::max)()) {
|
||||||
baseaddr = lowpc;
|
baseaddr = lowpc;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user