- Dwarf_Off dwarf_offset; /* Global offset of the field. */
- int global;
- std::string name;
- std::uint64_t type_id;
- mc_type_t type;
-
- // Use either of:
- simgrid::mc::LocationList location_list;
- void* address;
-
- size_t start_scope;
- mc_object_info_t object_info;
-};
-
-class Frame {
-public:
- Frame();
-
- int tag;
- std::string name;
- void *low_pc;
- void *high_pc;
- simgrid::mc::LocationList frame_base;
- std::vector<Variable> variables;
- unsigned long int id; /* DWARF offset of the subprogram */
- std::vector<Frame> scopes;
- Dwarf_Off abstract_origin_id;
- mc_object_info_t object_info;
-};
-
-/** An entry in the functions index
- *
- * See the code of ObjectInformation::find_function.
- */
-struct FunctionIndexEntry {
- void* low_pc;
- mc_frame_t function;
-};
-
-class ObjectInformation {
-public:
- ObjectInformation();
- ObjectInformation(ObjectInformation const&) = delete;
- ObjectInformation& operator=(ObjectInformation const&) = delete;
-
- mc_object_info_flags flags;
- std::string file_name;
- const void* start;
- const void *end;
- char *start_exec;
- char *end_exec; // Executable segment
- char *start_rw;
- char *end_rw; // Read-write segment
- char *start_ro;
- char *end_ro; // read-only segment
- std::unordered_map<std::uint64_t, simgrid::mc::Frame> subprograms;
- // TODO, remove the mutable (to remove it we'll have to add a lot of const everywhere)
- mutable std::vector<simgrid::mc::Variable> global_variables;
- std::unordered_map<std::uint64_t, simgrid::mc::Type> types;
- std::unordered_map<std::string, simgrid::mc::Type*> full_types_by_name;
-
- /** Index of functions by IP
- *
- * The entries are sorted by low_pc and a binary search can be used to look
- * them up. Should we used a binary tree instead?
- */
- std::vector<FunctionIndexEntry> functions_index;
-
- bool executable() const
- {
- return this->flags & MC_OBJECT_INFO_EXECUTABLE;
- }
-
- bool privatized() const
- {
- return this->executable() && smpi_privatize_global_variables;
- }
-
- void* base_address() const;
-
- mc_frame_t find_function(const void *ip) const;
- // TODO, should be simgrid::mc::Variable*
- simgrid::mc::Variable* find_variable(const char* name) const;
-
-};
-
-}
-}
-
-
-XBT_INTERNAL std::shared_ptr<s_mc_object_info_t> MC_find_object_info(