-/* Copyright (c) 2014-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2014-2022. 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. */
return result;
}
-Frame* ObjectInformation::find_function(const void* ip) const
+Frame* ObjectInformation::find_function(const void* ip)
{
+ ensure_dwarf_loaded();
+
/* This is implemented by binary search on a sorted array.
*
* We do quite a lot of those so we want this to be cache efficient.
: nullptr;
}
-const Variable* ObjectInformation::find_variable(const char* var_name) const
+const Variable* ObjectInformation::find_variable(const char* var_name)
{
+ ensure_dwarf_loaded();
+
auto pos = std::lower_bound(this->global_variables.begin(), this->global_variables.end(), var_name,
[](auto const& var, const char* name) { return var.name < name; });
return (pos != this->global_variables.end() && pos->name == var_name) ? &(*pos) : nullptr;
else if (reg.prot == PROT_READ) {
xbt_assert(not result->start_ro,
"Multiple read-only segments for %s, not supported. Compiling with the following may help: "
- "-Wl,-znorelro -Wl,-znoseparate-code",
+ "-g -Wl,-znorelro -Wl,-znoseparate-code",
maps[i].pathname.c_str());
result->start_ro = (char*)reg.start_addr;
result->end_ro = (char*)reg.end_addr;