#ifndef SIMGRID_MC_OBJECT_LOCATION_H
#define SIMGRID_MC_OBJECT_LOCATION_H
-#include <stdint.h>
+#include <cstdint>
#include <vector>
#include <dwarf.h>
#include <elfutils/libdw.h>
-#include <simgrid_config.h>
-#include "mc_base.h"
-#include "mc_forward.hpp"
-#include "mc/AddressSpace.hpp"
-#include "mc/DwarfExpression.hpp"
+#include <xbt/base.h>
+#include <xbt/range.hpp>
+
+#include "src/mc/mc_base.h"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/DwarfExpression.hpp"
namespace simgrid {
namespace dwarf {
-/** \brief A DWARF expression with optional validity contraints */
+/** \brief A DWARF expression with optional validity constraints */
class LocationListEntry {
public:
- simgrid::dwarf::DwarfExpression expression;
- void* lowpc, *highpc;
-
- LocationListEntry() : lowpc(nullptr), highpc(nullptr) {}
-
- bool always_valid() const
+ typedef simgrid::xbt::Range<std::uint64_t> range_type;
+private:
+ DwarfExpression expression_;
+ range_type range_ = {0, UINT64_MAX};
+public:
+ LocationListEntry() {}
+ LocationListEntry(DwarfExpression expression, range_type range)
+ : expression_(std::move(expression)), range_(range)
+ {}
+ LocationListEntry(DwarfExpression expression)
+ : expression_(std::move(expression)), range_({0, UINT64_MAX})
+ {}
+
+ DwarfExpression& expression()
+ {
+ return expression_;
+ }
+ DwarfExpression const& expression() const
{
- return this->lowpc == nullptr && this->highpc == nullptr;
+ return expression_;
}
bool valid_for_ip(unw_word_t ip) const
{
- return always_valid() || (
- ip >= (unw_word_t) this->lowpc &&
- ip < (unw_word_t) this->highpc);
+ return range_.contain(ip);
}
};
simgrid::mc::AddressSpace* address_space,
int process_index);
+XBT_PRIVATE
+simgrid::dwarf::LocationList location_list(
+ simgrid::mc::ObjectInformation& info,
+ Dwarf_Attribute& attr);
+
}
}
-SG_BEGIN_DECL()
-
-XBT_PRIVATE void mc_dwarf_location_list_init(
- simgrid::dwarf::LocationList*, simgrid::mc::ObjectInformation* info,
- Dwarf_Die* die, Dwarf_Attribute* attr);
-
-void* mc_find_frame_base(
- simgrid::mc::Frame* frame, simgrid::mc::ObjectInformation* object_info, unw_cursor_t* unw_cursor);
-
-SG_END_DECL()
-
#endif