+LocationList location_list(
+ simgrid::mc::ObjectInformation& info,
+ Dwarf_Attribute& attr)
+{
+ LocationList locations;
+ std::ptrdiff_t offset = 0;
+ while (1) {
+ Dwarf_Addr base;
+ Dwarf_Addr start;
+ Dwarf_Addr end;
+ Dwarf_Op *ops;
+ std::size_t len;
+
+ offset = dwarf_getlocations(&attr, offset, &base, &start, &end, &ops, &len);
+
+ if (offset == 0)
+ break;
+ else if (offset == -1)
+ xbt_die("Error while loading location list");
+
+ std::uint64_t base_address = (std::uint64_t) info.base_address();
+
+ LocationListEntry::range_type range;
+ if (start == 0)
+ // If start == 0, this is not a location list:
+ range = { 0, UINT64_MAX };
+ else
+ range = { base_address + start, base_address + end };
+
+ locations.push_back({ DwarfExpression(ops, ops+len), range });
+ }
+
+ return locations;
+}
+}