A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Useless test; TODO--.
[simgrid.git]
/
src
/
mc
/
inspect
/
mc_dwarf.cpp
diff --git
a/src/mc/inspect/mc_dwarf.cpp
b/src/mc/inspect/mc_dwarf.cpp
index d7b1868895f888db0acdfc4af089e93019d42b6b..372b01340a8c60caf09d9731468169bea58199b9 100644
(file)
--- a/
src/mc/inspect/mc_dwarf.cpp
+++ b/
src/mc/inspect/mc_dwarf.cpp
@@
-17,9
+17,11
@@
#include <algorithm>
#include <array>
#include <algorithm>
#include <array>
+#include <cerrno>
#include <cinttypes>
#include <cstdint>
#include <cstdlib>
#include <cinttypes>
#include <cstdint>
#include <cstdlib>
+#include <cstring>
#include <fcntl.h>
#include <memory>
#include <unordered_map>
#include <fcntl.h>
#include <memory>
#include <unordered_map>
@@
-30,8
+32,6
@@
#include <elfutils/libdw.h>
#include <elfutils/version.h>
#include <elfutils/libdw.h>
#include <elfutils/version.h>
-#include <boost/algorithm/string/predicate.hpp>
-
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_dwarf, mc, "DWARF processing");
/** @brief The default DW_TAG_lower_bound for a given DW_AT_language.
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_dwarf, mc, "DWARF processing");
/** @brief The default DW_TAG_lower_bound for a given DW_AT_language.
@@
-399,10
+399,10
@@
static void MC_dwarf_fill_member_location(const simgrid::mc::Type* type, simgrid
xbt_assert(not dwarf_hasattr(child, DW_AT_data_bit_offset), "Can't groke DW_AT_data_bit_offset.");
if (not dwarf_hasattr_integrate(child, DW_AT_data_member_location)) {
xbt_assert(not dwarf_hasattr(child, DW_AT_data_bit_offset), "Can't groke DW_AT_data_bit_offset.");
if (not dwarf_hasattr_integrate(child, DW_AT_data_member_location)) {
- if (type->type == DW_TAG_union_type)
- return;
- xbt_die("Missing DW_AT_data_member_location field in DW_TAG_member %s of type <%" PRIx64 ">%s",
-
member->name.c_str(), (uint64_t)type->id, type->name.c_str())
;
+ xbt_assert(type->type == DW_TAG_union_type,
+ "Missing DW_AT_data_member_location field in DW_TAG_member %s of type <%" PRIx64 ">%s",
+ member->name.c_str(), (uint64_t)type->id, type->name.c_str());
+
return
;
}
Dwarf_Attribute attr;
}
Dwarf_Attribute attr;
@@
-473,8
+473,7
@@
static void MC_dwarf_add_members(const simgrid::mc::ObjectInformation* /*info*/,
member.name = name;
// Those base names are used by GCC and clang for virtual table pointers
// respectively ("__vptr$ClassName", "__vptr.ClassName"):
member.name = name;
// Those base names are used by GCC and clang for virtual table pointers
// respectively ("__vptr$ClassName", "__vptr.ClassName"):
- if (boost::algorithm::starts_with(member.name, "__vptr$") ||
- boost::algorithm::starts_with(member.name, "__vptr."))
+ if (member.name.rfind("__vptr$", 0) == 0 || member.name.rfind("__vptr.", 0) == 0)
member.flags |= simgrid::mc::Member::VIRTUAL_POINTER_FLAG;
// A cleaner solution would be to check against the type:
// ---
member.flags |= simgrid::mc::Member::VIRTUAL_POINTER_FLAG;
// A cleaner solution would be to check against the type:
// ---
@@
-963,7
+962,7
@@
static constexpr auto debug_paths = {
*/
// Example:
// /usr/lib/debug/.build-id/0b/dc77f1c29aea2b14ff5acd9a19ab3175ffdeae.debug
*/
// Example:
// /usr/lib/debug/.build-id/0b/dc77f1c29aea2b14ff5acd9a19ab3175ffdeae.debug
-static
std::string
find_by_build_id(std::vector<char> id)
+static
int
find_by_build_id(std::vector<char> id)
{
std::string filename;
std::string hex = to_hex(id);
{
std::string filename;
std::string hex = to_hex(id);
@@
-972,13
+971,15
@@
static std::string find_by_build_id(std::vector<char> id)
filename = std::string(debug_path) + ".build-id/" + to_hex(id.data(), 1) + '/' +
to_hex(id.data() + 1, id.size() - 1) + ".debug";
XBT_DEBUG("Checking debug file: %s", filename.c_str());
filename = std::string(debug_path) + ".build-id/" + to_hex(id.data(), 1) + '/' +
to_hex(id.data() + 1, id.size() - 1) + ".debug";
XBT_DEBUG("Checking debug file: %s", filename.c_str());
- if (access(filename.c_str(), F_OK) == 0) {
+ int fd = open(filename.c_str(), O_RDONLY);
+ if (fd != -1) {
XBT_DEBUG("Found debug file: %s\n", hex.c_str());
XBT_DEBUG("Found debug file: %s\n", hex.c_str());
- return f
ilename
;
+ return f
d
;
}
}
+ xbt_assert(errno != ENOENT, "Could not open file: %s", strerror(errno));
}
XBT_DEBUG("No debug info found for build ID %s\n", hex.data());
}
XBT_DEBUG("No debug info found for build ID %s\n", hex.data());
- return
std::string()
;
+ return
-1
;
}
/** @brief Populate the debugging information of the given ELF object
}
/** @brief Populate the debugging information of the given ELF object
@@
-1027,18
+1028,16
@@
static void MC_load_dwarf(simgrid::mc::ObjectInformation* info)
close(fd);
// Find the debug file using the build id:
close(fd);
// Find the debug file using the build id:
-
std::string debug_file
= find_by_build_id(build_id);
- xbt_assert(
not debug_file.empty()
,
+
fd
= find_by_build_id(build_id);
+ xbt_assert(
fd != -1
,
"Missing debug info for %s with build-id %s\n"
"You might want to install the suitable debugging package.\n",
info->file_name.c_str(), to_hex(build_id).c_str());
// Load the DWARF info from this file:
"Missing debug info for %s with build-id %s\n"
"You might want to install the suitable debugging package.\n",
info->file_name.c_str(), to_hex(build_id).c_str());
// Load the DWARF info from this file:
- XBT_DEBUG("Load DWARF for %s from %s", info->file_name.c_str(), debug_file.c_str());
- fd = open(debug_file.c_str(), O_RDONLY);
- xbt_assert(fd >= 0, "Could not open file %s", debug_file.c_str());
+ XBT_DEBUG("Load DWARF for %s", info->file_name.c_str());
dwarf = dwarf_begin(fd, DWARF_C_READ);
dwarf = dwarf_begin(fd, DWARF_C_READ);
- xbt_assert(dwarf != nullptr, "No DWARF info
in %s for %s", debug_file.c_str()
, info->file_name.c_str());
+ xbt_assert(dwarf != nullptr, "No DWARF info
for %s"
, info->file_name.c_str());
read_dwarf_info(info, dwarf);
dwarf_end(dwarf);
close(fd);
read_dwarf_info(info, dwarf);
dwarf_end(dwarf);
close(fd);