Fix local value reading

LLDB doesn't understand base address entries
This commit is contained in:
bjorn3 2019-11-12 20:31:53 +01:00
parent 3fed880057
commit 50f7110cb6

View File

@ -373,26 +373,6 @@ impl<'a, 'tcx> FunctionDebugContext<'a, 'tcx> {
let value_labels_ranges = context.build_value_labels_ranges(isa).unwrap();
for (value_label, value_loc_ranges) in value_labels_ranges.iter() {
let live_ranges = RangeList(
Some(Range::BaseAddress {
address: Address::Symbol {
symbol: self.symbol,
addend: 0,
},
})
.into_iter()
.chain(
value_loc_ranges
.iter()
.map(|value_loc_range| Range::OffsetPair {
begin: u64::from(value_loc_range.start),
end: u64::from(value_loc_range.end),
}),
)
.collect(),
);
let live_ranges_id = self.debug_context.dwarf.unit.ranges.add(live_ranges);
let local_ty = tcx.subst_and_normalize_erasing_regions(
self.instance.substs,
ty::ParamEnv::reveal_all(),
@ -407,10 +387,6 @@ impl<'a, 'tcx> FunctionDebugContext<'a, 'tcx> {
.add(self.entry_id, gimli::DW_TAG_variable);
let var_entry = self.debug_context.dwarf.unit.get_mut(var_id);
var_entry.set(
gimli::DW_AT_ranges,
AttributeValue::RangeListRef(live_ranges_id),
);
var_entry.set(
gimli::DW_AT_name,
AttributeValue::String(format!("{:?}", value_label).into_bytes()),
@ -420,25 +396,23 @@ impl<'a, 'tcx> FunctionDebugContext<'a, 'tcx> {
AttributeValue::ThisUnitEntryRef(local_type),
);
let loc_list = LocationList(
Some(Location::BaseAddress {
address: Address::Symbol {
symbol: self.symbol,
addend: 0,
},
})
.into_iter()
.chain(
value_loc_ranges
.iter()
.map(|value_loc_range| Location::OffsetPair {
begin: u64::from(value_loc_range.start),
end: u64::from(value_loc_range.end),
value_loc_ranges
.iter()
.map(|value_loc_range| {
Location::StartEnd {
begin: Address::Symbol {
symbol: self.symbol,
addend: i64::from(value_loc_range.start),
},
end: Address::Symbol {
symbol: self.symbol,
addend: i64::from(value_loc_range.end),
},
data: Expression(translate_loc(value_loc_range.loc, &context.func.stack_slots).unwrap()),
}),
)
.collect(),
}
})
.collect(),
);
let loc_list_id = self.debug_context.dwarf.unit.locations.add(loc_list);