-/* Copyright (c) 2008-2017. The SimGrid Team.
+/* Copyright (c) 2008-2018. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include <fcntl.h>
#include <cstdlib>
-#define DW_LANG_Objc DW_LANG_ObjC /* fix spelling error in older dwarf.h */
-#include <dwarf.h>
#include <elfutils/libdw.h>
#include <boost/algorithm/string/predicate.hpp>
#include "xbt/log.h"
#include "xbt/string.hpp"
#include "xbt/sysdep.h"
-#include <simgrid_config.h>
+#include <simgrid/config.h>
#include "src/mc/mc_dwarf.hpp"
#include "src/mc/mc_private.hpp"
return dwarf_formstring(&attr);
}
-/** \brief Get the linkage name of a DIE.
- *
- * Use either DW_AT_linkage_name or DW_AT_MIPS_linkage_name.
- * DW_AT_linkage_name is standardized since DWARF 4.
- * Before this version of DWARF, the MIPS extensions
- * DW_AT_MIPS_linkage_name is used (at least by GCC).
- *
- * \param the DIE
- * \return linkage name of the given DIE (or nullptr)
- * */
-static const char *MC_dwarf_at_linkage_name(Dwarf_Die * die)
-{
- const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_linkage_name);
- if (not name)
- name = MC_dwarf_attr_integrate_string(die, DW_AT_MIPS_linkage_name);
- return name;
-}
-
static Dwarf_Off MC_dwarf_attr_dieoffset(Dwarf_Die * die, int attribute)
{
Dwarf_Attribute attr;
/** \brief Find the type/subtype (DW_AT_type) for a DIE
*
- * \param dit the DIE
+ * \param die the DIE
* \return DW_AT_type reference as a global offset in hexadecimal (or nullptr)
*/
static
// This is not really 0, but the code expects this (we do not know):
return 0;
- uint64_t upper_bound =
- MC_dwarf_attr_integrate_uint(die, DW_AT_upper_bound, -1);
+ uint64_t upper_bound = MC_dwarf_attr_integrate_uint(die, DW_AT_upper_bound, static_cast<uint64_t>(-1));
uint64_t lower_bound = 0;
if (dwarf_hasattr_integrate(die, DW_AT_lower_bound))
- lower_bound = MC_dwarf_attr_integrate_uint(die, DW_AT_lower_bound, -1);
+ lower_bound = MC_dwarf_attr_integrate_uint(die, DW_AT_lower_bound, static_cast<uint64_t>(-1));
else
lower_bound = MC_dwarf_default_lower_bound(dwarf_srclang(unit));
return upper_bound - lower_bound + 1;
/** \brief Create a MC type object from a DIE
*
* \param info current object info object
- * \param DIE (for a given type)
+ * \param die DIE (for a given type)
* \param unit compilation unit of the current DIE
* \return MC representation of the type
*/
}
switch (type.type) {
- default:
- XBT_DEBUG("Unhandled type: %d (%s)", type.type, simgrid::dwarf::tagname(type.type));
- break;
-
case DW_TAG_array_type:
type.element_count = MC_dwarf_array_element_count(die, unit);
// TODO, handle DW_byte_stride and (not) DW_bit_stride
case DW_TAG_union_type:
case DW_TAG_class_type:
MC_dwarf_add_members(info, die, unit, &type);
- std::string new_ns = ns ? simgrid::xbt::string_printf("%s::%s", ns, name) : type.name;
- MC_dwarf_handle_children(info, die, unit, frame, new_ns.c_str());
+ MC_dwarf_handle_children(info, die, unit, frame,
+ ns ? simgrid::xbt::string_printf("%s::%s", ns, name).c_str() : type.name.c_str());
+ break;
+
+ default:
+ XBT_DEBUG("Unhandled type: %d (%s)", type.type, simgrid::dwarf::tagname(type.type));
break;
}
// ***** Functions index
-static int MC_compare_frame_index_items(simgrid::mc::FunctionIndexEntry* a,
- simgrid::mc::FunctionIndexEntry* b)
-{
- if (a->low_pc < b->low_pc)
- return -1;
- else if (a->low_pc == b->low_pc)
- return 0;
- else
- return 1;
-}
-
static void MC_make_functions_index(simgrid::mc::ObjectInformation* info)
{
info->functions_index.clear();