X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d57f583f531c3ed96281734e99a3199e0a58ec3f..debe4e5871c0c3d1c714bbb1bd28ba7147454aa5:/src/mc/LocationList.hpp diff --git a/src/mc/LocationList.hpp b/src/mc/LocationList.hpp index 2e04e01439..3427060139 100644 --- a/src/mc/LocationList.hpp +++ b/src/mc/LocationList.hpp @@ -1,5 +1,4 @@ -/* Copyright (c) 2004-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -7,40 +6,47 @@ #ifndef SIMGRID_MC_OBJECT_LOCATION_H #define SIMGRID_MC_OBJECT_LOCATION_H -#include +#include "xbt/base.h" +#include "xbt/range.hpp" -#include - -#include -#include -#include +#include "src/mc/mc_base.h" +#include "src/mc/mc_forward.hpp" +#include "src/mc/DwarfExpression.hpp" -#include -#include "mc_base.h" -#include "mc_forward.hpp" -#include "mc/AddressSpace.hpp" -#include "mc/DwarfExpression.hpp" +#include +#include namespace simgrid { namespace dwarf { -/** \brief A DWARF expression with optional validity contraints */ +/** A DWARF expression with optional validity constraints */ class LocationListEntry { public: - simgrid::dwarf::DwarfExpression expression; - void* lowpc, *highpc; - - LocationListEntry() : lowpc(nullptr), highpc(nullptr) {} + typedef simgrid::xbt::Range range_type; +private: + DwarfExpression expression_; + // By default, the expression is always valid: + range_type range_ = {0, UINT64_MAX}; +public: + LocationListEntry() = default; + LocationListEntry(DwarfExpression expression, range_type range) + : expression_(std::move(expression)), range_(range) + {} + explicit LocationListEntry(DwarfExpression expression) : expression_(std::move(expression)), range_({0, UINT64_MAX}) + { + } - bool always_valid() const + DwarfExpression& expression() { - return this->lowpc == nullptr && this->highpc == nullptr; + return expression_; + } + DwarfExpression const& expression() const + { + 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); } }; @@ -53,11 +59,11 @@ typedef std::vector LocationList; class Location { private: void* memory_; - int register_id_; + int register_id_ = 0; + public: - Location(void* x) :memory_(x) {} - Location(int register_id) : - memory_(nullptr), register_id_(register_id) {} + explicit Location(void* x) : memory_(x) {} + explicit Location(int register_id) : memory_(nullptr), register_id_(register_id) {} // Type of location: bool in_register() const { return memory_ == nullptr; } bool in_memory() const { return memory_ != nullptr; } @@ -82,18 +88,12 @@ Location resolve( 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