summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f18d5d8)
info->subprograms is now a dict and not an array.
frame->end = -1; // This one is now useless:
// Register it:
frame->end = -1; // This one is now useless:
// Register it:
- xbt_dynar_push(info->subprograms, &frame);
+ const char* key = bprintf("%" PRIx64, (uint64_t) frame->start);
+ xbt_dict_set(info->subprograms, key, frame, NULL);
// Handle children:
MC_dwarf_handle_children(info, die, unit, frame, namespace);
// Handle children:
MC_dwarf_handle_children(info, die, unit, frame, namespace);
/************************** Free functions *************************/
/************************** Free functions *************************/
+void mc_frame_free(dw_frame_t frame){
+ xbt_free(frame->name);
+ mc_dwarf_location_list_clear(&(frame->frame_base));
+ xbt_dynar_free(&(frame->variables));
+ xbt_free(frame);
+}
+
void dw_type_free(dw_type_t t){
xbt_free(t->name);
xbt_free(t->dw_type_id);
void dw_type_free(dw_type_t t){
xbt_free(t->name);
xbt_free(t->dw_type_id);
mc_object_info_t MC_new_object_info(void) {
mc_object_info_t res = xbt_new0(s_mc_object_info_t, 1);
mc_object_info_t MC_new_object_info(void) {
mc_object_info_t res = xbt_new0(s_mc_object_info_t, 1);
- res->subprograms = xbt_dynar_new(sizeof(dw_frame_t), NULL);
+ res->subprograms = xbt_dict_new_homogeneous((void (*)(void*))mc_frame_free);
res->global_variables = xbt_dynar_new(sizeof(dw_variable_t), dw_variable_free_voidp);
res->types = xbt_dict_new_homogeneous(NULL);
res->full_types_by_name = xbt_dict_new_homogeneous(NULL);
res->global_variables = xbt_dynar_new(sizeof(dw_variable_t), dw_variable_free_voidp);
res->types = xbt_dict_new_homogeneous(NULL);
res->full_types_by_name = xbt_dict_new_homogeneous(NULL);
void MC_free_object_info(mc_object_info_t* info) {
xbt_free(&(*info)->file_name);
void MC_free_object_info(mc_object_info_t* info) {
xbt_free(&(*info)->file_name);
- xbt_dynar_free(&(*info)->subprograms);
+ 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_dynar_free(&(*info)->global_variables);
xbt_dict_free(&(*info)->types);
xbt_dict_free(&(*info)->full_types_by_name);
// Populate the array:
dw_frame_t frame = NULL;
// Populate the array:
dw_frame_t frame = NULL;
- unsigned cursor = 0;
- xbt_dynar_foreach(info->subprograms, cursor, frame) {
+ xbt_dict_cursor_t cursor;
+ char* key;
+ xbt_dict_foreach(info->subprograms, cursor, key, frame) {
if(frame->low_pc==NULL)
continue;
s_mc_function_index_item_t entry;
if(frame->low_pc==NULL)
continue;
s_mc_function_index_item_t entry;
}
static void MC_post_process_functions(mc_object_info_t info) {
}
static void MC_post_process_functions(mc_object_info_t info) {
+ xbt_dict_cursor_t cursor;
+ char* key;
dw_frame_t function = NULL;
dw_frame_t function = NULL;
- xbt_dynar_foreach(info->subprograms, cursor, function) {
+ xbt_dict_foreach(info->subprograms, cursor, key, function) {
unsigned cursor2 = 0;
dw_variable_t variable = NULL;
xbt_dynar_foreach(function->variables, cursor2, variable) {
unsigned cursor2 = 0;
dw_variable_t variable = NULL;
xbt_dynar_foreach(function->variables, cursor2, variable) {
}
static void MC_ignore_local_variable_in_object(const char *var_name, const char *frame_name, mc_object_info_t info) {
}
static void MC_ignore_local_variable_in_object(const char *var_name, const char *frame_name, mc_object_info_t info) {
+ xbt_dict_cursor_t cursor2;
dw_frame_t frame;
int start, end;
int cursor = 0;
dw_variable_t current_var;
dw_frame_t frame;
int start, end;
int cursor = 0;
dw_variable_t current_var;
-
- xbt_dynar_foreach(info->subprograms, cursor2, frame) {
+ char* key;
+ xbt_dict_foreach(info->subprograms, cursor2, key, frame) {
if(frame_name && strcmp(frame_name, frame->name))
continue;
if(frame_name && strcmp(frame_name, frame->name))
continue;
char *start_exec, *end_exec; // Executable segment
char *start_rw, *end_rw; // Read-write segment
char *start_ro, *end_ro; // read-only segment
char *start_exec, *end_exec; // Executable segment
char *start_rw, *end_rw; // Read-write segment
char *start_ro, *end_ro; // read-only segment
- xbt_dynar_t subprograms; // xbt_dynar_t<dw_frame_t>
+ xbt_dict_t subprograms; // xbt_dict_t<origin as hexadecimal string, dw_frame_t>
xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
xbt_dict_t full_types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
xbt_dict_t full_types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
+void mc_frame_free(dw_frame_t freme);
+
void dw_type_free(dw_type_t t);
void dw_variable_free(dw_variable_t v);
void dw_variable_free_voidp(void *t);
void dw_type_free(dw_type_t t);
void dw_variable_free(dw_variable_t v);
void dw_variable_free_voidp(void *t);
}
static dw_frame_t find_function_by_name(mc_object_info_t info, const char* name) {
}
static dw_frame_t find_function_by_name(mc_object_info_t info, const char* name) {
- unsigned int cursor = 0;
+ xbt_dict_cursor_t cursor = 0;
- xbt_dynar_foreach(info->subprograms, cursor, subprogram){
+ char* key;
+ xbt_dict_foreach(info->subprograms, cursor, key, subprogram){
if(!strcmp(name, subprogram->name))
return subprogram;
}
if(!strcmp(name, subprogram->name))
return subprogram;
}