Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
oups, forgot to adapt MC to my last change in config
[simgrid.git] / src / mc / mc_dwarf.cpp
index a8f58bb..af30422 100644 (file)
@@ -11,6 +11,7 @@
 #include <memory>
 #include <utility>
 
+#include <fcntl.h>
 #include <cstdlib>
 #define DW_LANG_Objc DW_LANG_ObjC       /* fix spelling error in older dwarf.h */
 #include <dwarf.h>
@@ -24,7 +25,6 @@
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_dwarf.hpp"
 
-#include "src/mc/mc_object_info.h"
 #include "src/mc/Process.hpp"
 #include "src/mc/ObjectInformation.hpp"
 #include "src/mc/Variable.hpp"
@@ -679,7 +679,7 @@ static simgrid::mc::Type MC_dwarf_die_to_type(
     break;
   }
 
-  return std::move(type);
+  return type;
 }
 
 static void MC_dwarf_handle_type_die(simgrid::mc::ObjectInformation* info, Dwarf_Die * die,
@@ -714,7 +714,7 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
 
   std::unique_ptr<simgrid::mc::Variable> variable =
     std::unique_ptr<simgrid::mc::Variable>(new simgrid::mc::Variable());
-  variable->dwarf_offset = dwarf_dieoffset(die);
+  variable->id = dwarf_dieoffset(die);
   variable->global = frame == nullptr;     // Can be override base on DW_AT_location
   variable->object_info = info;
 
@@ -740,12 +740,12 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
         xbt_die(
           "Could not read location expression in DW_AT_location "
           "of variable <%" PRIx64 ">%s",
-          (uint64_t) variable->dwarf_offset,
+          (uint64_t) variable->id,
           variable->name.c_str());
       }
 
       if (len == 1 && expr[0].atom == DW_OP_addr) {
-        variable->global = 1;
+        variable->global = true;
         uintptr_t offset = (uintptr_t) expr[0].number;
         uintptr_t base = (uintptr_t) info->base_address();
         variable->address = (void *) (base + offset);
@@ -767,7 +767,7 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
     xbt_die("Unexpected form 0x%x (%i), class 0x%x (%i) list for location "
             "in <%" PRIx64 ">%s",
             form, form, (int) form_class, (int) form_class,
-            (uint64_t) variable->dwarf_offset,
+            (uint64_t) variable->id,
             variable->name.c_str());
   }
 
@@ -804,7 +804,7 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
     variable->name =
       "@anonymous#" + std::to_string(mc_anonymous_variable_index++);
 
-  return std::move(variable);
+  return variable;
 }
 
 static void MC_dwarf_handle_variable_die(simgrid::mc::ObjectInformation* info, Dwarf_Die * die,
@@ -998,11 +998,11 @@ void read_dwarf_info(simgrid::mc::ObjectInformation* info, Dwarf* dwarf)
   Dwarf_Off next_offset = 0;
   size_t length;
 
-  while (dwarf_nextcu(dwarf, offset, &next_offset, &length, nullptr, NULL, NULL) ==
+  while (dwarf_nextcu(dwarf, offset, &next_offset, &length, nullptr, nullptr, nullptr) ==
          0) {
     Dwarf_Die unit_die;
     if (dwarf_offdie(dwarf, offset + length, &unit_die) != nullptr)
-      MC_dwarf_handle_children(info, &unit_die, &unit_die, nullptr, NULL);
+      MC_dwarf_handle_children(info, &unit_die, &unit_die, nullptr, nullptr);
     offset = next_offset;
   }
 }
@@ -1065,7 +1065,9 @@ static char hexdigits[16] = {
 static inline
 std::array<char, 2> to_hex(std::uint8_t byte)
 {
-  return { hexdigits[byte >> 4], hexdigits[byte & 0xF] };
+  // Horrid double braces!
+  // Apparently, this is needed in C++11 (not in C++14).
+  return { { hexdigits[byte >> 4], hexdigits[byte & 0xF] } };
 }
 
 /** Binary data to hexadecimal */
@@ -1079,7 +1081,7 @@ std::string to_hex(const char* data, std::size_t count)
     for (int j = 0; j < 2; ++j)
       res[2 * i + j] = hex_byte[j];
   }
-  return std::move(res);
+  return res;
 }
 
 /** Binary data to hexadecimal */
@@ -1090,6 +1092,7 @@ std::string to_hex(std::vector<char> const& data)
 }
 
 /** Base directories for external debug files */
+static
 const char* debug_paths[] = {
   "/usr/lib/debug/",
   "/usr/local/lib/debug/",
@@ -1110,7 +1113,7 @@ std::string find_by_build_id(std::vector<char> id)
       + 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)
-      return std::move(filename);
+      return filename;
   }
   return std::string();
 }
@@ -1304,8 +1307,11 @@ static void MC_post_process_types(simgrid::mc::ObjectInformation* info)
   }
 }
 
+namespace simgrid {
+namespace mc {
+
 /** \brief Finds informations about a given shared object/executable */
-std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
+std::shared_ptr<simgrid::mc::ObjectInformation> createObjectInformation(
   std::vector<simgrid::xbt::VmMap> const& maps, const char *name)
 {
   std::shared_ptr<simgrid::mc::ObjectInformation> result =
@@ -1318,12 +1324,12 @@ std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
   for (auto& entry : result.get()->subprograms)
     mc_post_process_scope(result.get(), &entry.second);
   MC_make_functions_index(result.get());
-  return std::move(result);
+  return result;
 }
 
 /*************************************************************************/
 
-void MC_post_process_object_info(simgrid::mc::Process* process, simgrid::mc::ObjectInformation* info)
+void postProcessObjectInformation(simgrid::mc::Process* process, simgrid::mc::ObjectInformation* info)
 {
   for (auto& i : info->types) {
 
@@ -1352,6 +1358,9 @@ void MC_post_process_object_info(simgrid::mc::Process* process, simgrid::mc::Obj
   }
 }
 
+}
+}
+
 namespace simgrid {
 namespace dwarf {