Fixed a bug in the refactoring.
diff --git a/src/dwarf.cc b/src/dwarf.cc
index d086c60..2dd939c 100644
--- a/src/dwarf.cc
+++ b/src/dwarf.cc
@@ -176,13 +176,14 @@
void ReadRangeList(const CU& cu, uint64_t low_pc, string_view name,
RangeSink* sink, string_view* data) {
std::string name_str(name);
+ uint64_t max_address = cu.unit_sizes().MaxAddress();
while (true) {
uint64_t start, end;
start = cu.unit_sizes().ReadAddress(data);
end = cu.unit_sizes().ReadAddress(data);
if (start == 0 && end == 0) {
return;
- } else if (start == cu.unit_sizes().MaxAddress()) {
+ } else if (start == max_address) {
low_pc = end;
} else {
uint64_t size = end - start;
diff --git a/src/dwarf/attr.cc b/src/dwarf/attr.cc
index 502c3f5..9bbad8f 100644
--- a/src/dwarf/attr.cc
+++ b/src/dwarf/attr.cc
@@ -187,10 +187,8 @@
return AttrValue(form, ReadBytes(4, data));
case DW_FORM_data8:
return AttrValue(form, ReadBytes(8, data));
- case DW_FORM_rnglistx: {
- auto val = AttrValue(form, ReadLEB128<uint64_t>(data));
- return val;
- }
+ case DW_FORM_rnglistx:
+ return AttrValue(form, ReadLEB128<uint64_t>(data));
// Bloaty doesn't currently care about any bool or signed data.
// So we fudge it a bit and just stuff these in a uint64.
diff --git a/src/dwarf/debug_info.cc b/src/dwarf/debug_info.cc
index b2bac09..1f81fe8 100644
--- a/src/dwarf/debug_info.cc
+++ b/src/dwarf/debug_info.cc
@@ -95,12 +95,12 @@
bool CUIter::NextCU(InfoReader& reader, CU* cu) {
if (next_unit_.empty()) return false;
- string_view unit_range = next_unit_;
- string_view data_range = cu->unit_sizes_.ReadInitialLength(&next_unit_);
- cu->unit_range_ = unit_range.substr(
- 0, data_range.size() + (data_range.data() - unit_range.data()));
-
CompilationUnitSizes unit_sizes;
+ string_view unit_range = next_unit_;
+ string_view data_range = unit_sizes.ReadInitialLength(&next_unit_);
+ size_t initial_length_len = data_range.data() - unit_range.data();
+ unit_range = unit_range.substr(0, data_range.size() + initial_length_len);
+
unit_sizes.ReadDWARFVersion(&data_range);
if (unit_sizes.dwarf_version() > 5) {
@@ -138,6 +138,7 @@
cu->dwarf_ = &reader.dwarf_;
cu->unit_sizes_ = unit_sizes;
cu->data_range_ = data_range;
+ cu->unit_range_ = unit_range;
// We now read the root-level DIE in order to populate these base addresses
// on which other attributes depend.