From c7e058ac1143ed684438971ac1e1859ee22e16f1 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 8 Jun 2015 23:02:50 +0200 Subject: [PATCH] [mc] Add ctor/dtor for s_mc_object_info --- src/mc/mc_dwarf.cpp | 33 ++++++++++++++------------------- src/mc/mc_object_info.h | 32 ++++++++++++++++++++------------ src/mc/mc_process.cpp | 3 ++- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/mc/mc_dwarf.cpp b/src/mc/mc_dwarf.cpp index 5a994b0b90..4369550a35 100644 --- a/src/mc/mc_dwarf.cpp +++ b/src/mc/mc_dwarf.cpp @@ -1100,29 +1100,24 @@ void dw_variable_free_voidp(void *t) // ***** object_info - - -mc_object_info_t MC_new_object_info(void) +s_mc_object_info::s_mc_object_info() { - mc_object_info_t res = xbt_new0(s_mc_object_info_t, 1); - res->subprograms = xbt_dict_new_homogeneous((void (*)(void *)) mc_frame_free); - res->global_variables = + this->types = xbt_dict_new_homogeneous((void (*)(void *)) dw_type_free); + this->subprograms = xbt_dict_new_homogeneous((void (*)(void *)) mc_frame_free); + this->global_variables = xbt_dynar_new(sizeof(dw_variable_t), dw_variable_free_voidp); - res->types = xbt_dict_new_homogeneous((void (*)(void *)) dw_type_free); - res->full_types_by_name = xbt_dict_new_homogeneous(NULL); - return res; + + this->full_types_by_name = xbt_dict_new_homogeneous(NULL); } -void MC_free_object_info(mc_object_info_t * info) +s_mc_object_info::~s_mc_object_info() { - xbt_free((*info)->file_name); - xbt_dict_free(&(*info)->subprograms); - xbt_dynar_free(&(*info)->global_variables); - xbt_dict_free(&(*info)->types); - xbt_dict_free(&(*info)->full_types_by_name); - xbt_free(*info); - xbt_dynar_free(&(*info)->functions_index); - *info = NULL; + xbt_free(this->file_name); + xbt_dict_free(&this->subprograms); + xbt_dynar_free(&this->global_variables); + xbt_dict_free(&this->types); + xbt_dict_free(&this->full_types_by_name); + xbt_dynar_free(&this->functions_index); } // ***** Helpers @@ -1281,7 +1276,7 @@ static void MC_post_process_types(mc_object_info_t info) mc_object_info_t MC_find_object_info( std::vector const& maps, const char *name, int executable) { - mc_object_info_t result = MC_new_object_info(); + mc_object_info_t result = new s_mc_object_info_t(); if (executable) result->flags |= MC_OBJECT_INFO_EXECUTABLE; result->file_name = xbt_strdup(name); diff --git a/src/mc/mc_object_info.h b/src/mc/mc_object_info.h index 40d6955287..4843d338e4 100644 --- a/src/mc/mc_object_info.h +++ b/src/mc/mc_object_info.h @@ -59,21 +59,30 @@ typedef int mc_object_info_flags; #define MC_OBJECT_INFO_EXECUTABLE 1 struct s_mc_object_info { - mc_object_info_flags flags; - char* file_name; - const void* start, *end; - char *start_exec, *end_exec; // Executable segment - char *start_rw, *end_rw; // Read-write segment - char *start_ro, *end_ro; // read-only segment - xbt_dict_t subprograms; // xbt_dict_t - xbt_dynar_t global_variables; // xbt_dynar_t - xbt_dict_t types; // xbt_dict_t - xbt_dict_t full_types_by_name; // xbt_dict_t (full defined type only) + s_mc_object_info(); + ~s_mc_object_info(); + s_mc_object_info(s_mc_object_info const&) = delete; + s_mc_object_info& operator=(s_mc_object_info const&) = delete; + + mc_object_info_flags flags = 0; + char* file_name = nullptr; + const void* start = nullptr; + const void *end = nullptr; + char *start_exec = nullptr; + char *end_exec = nullptr; // Executable segment + char *start_rw = nullptr; + char *end_rw = nullptr; // Read-write segment + char *start_ro = nullptr; + char *end_ro = nullptr; // read-only segment + xbt_dict_t subprograms = nullptr; // xbt_dict_t + xbt_dynar_t global_variables = nullptr; // xbt_dynar_t + xbt_dict_t types = nullptr; // xbt_dict_t + xbt_dict_t full_types_by_name = nullptr; // xbt_dict_t (full defined type only) // Here we sort the minimal information for an efficient (and cache-efficient) // lookup of a function given an instruction pointer. // The entries are sorted by low_pc and a binary search can be used to look them up. - xbt_dynar_t functions_index; + xbt_dynar_t functions_index = nullptr; }; static inline __attribute__ ((always_inline)) @@ -104,7 +113,6 @@ bool MC_object_info_is_privatized(mc_object_info_t info) */ XBT_INTERNAL void* MC_object_base_address(mc_object_info_t info); -XBT_INTERNAL mc_object_info_t MC_new_object_info(void); XBT_INTERNAL mc_object_info_t MC_find_object_info( std::vector const& maps, const char* name, int executable); XBT_INTERNAL void MC_free_object_info(mc_object_info_t* p); diff --git a/src/mc/mc_process.cpp b/src/mc/mc_process.cpp index 836cf4b393..de73e05729 100644 --- a/src/mc/mc_process.cpp +++ b/src/mc/mc_process.cpp @@ -254,7 +254,8 @@ Process::~Process() size_t i; for (i=0; i!=process->object_infos_size; ++i) { - MC_free_object_info(&process->object_infos[i]); + delete process->object_infos[i]; + process->object_infos[i] = nullptr; } free(process->object_infos); process->object_infos = NULL; -- 2.20.1