From 4023ae762ed9b52e4925242b705d0b3a50f6ed13 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 28 Apr 2017 17:16:16 -0400 Subject: [PATCH] Class-ify lm_info_frv This patches makes lm_info_frv a "real" class. It adds a destructor, initializes the fields and replaces XCNEW/xfree with new/delete. gdb/ChangeLog: * solib-frv.c (struct lm_info_frv): Add destructor, initialize fields. (frv_current_sos): Allocate lm_info_frv with new. (frv_relocate_main_executable): Free lm_info_frv with delete, allocate with new. (frv_clear_solib, frv_free_so): Free lm_info_frv with delete. --- gdb/ChangeLog | 9 +++++++++ gdb/solib-frv.c | 42 +++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aadb63e685..9952e28b56 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2017-04-28 Simon Marchi + + * solib-frv.c (struct lm_info_frv): Add destructor, initialize + fields. + (frv_current_sos): Allocate lm_info_frv with new. + (frv_relocate_main_executable): Free lm_info_frv with delete, + allocate with new. + (frv_clear_solib, frv_free_so): Free lm_info_frv with delete. + 2017-04-28 Simon Marchi * solib-frv.c (struct lm_info_frv): Fix indentation. diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index e11de253b0..f0265e3f25 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -204,13 +204,19 @@ struct ext_link_map struct lm_info_frv : public lm_info_base { + ~lm_info_frv () + { + xfree (this->map); + xfree (this->dyn_syms); + xfree (this->dyn_relocs); + } /* The loadmap, digested into an easier to use form. */ - struct int_elf32_fdpic_loadmap *map; + int_elf32_fdpic_loadmap *map = NULL; /* The GOT address for this link map entry. */ - CORE_ADDR got_value; + CORE_ADDR got_value = 0; /* The link map address, needed for frv_fetch_objfile_link_map(). */ - CORE_ADDR lm_addr; + CORE_ADDR lm_addr = 0; /* Cached dynamic symbol table and dynamic relocs initialized and used only by find_canonical_descriptor_in_load_object(). @@ -222,10 +228,9 @@ struct lm_info_frv : public lm_info_base supplied to the first call. Thus the caching of the dynamic symbols (dyn_syms) is critical for correct operation. The caching of the dynamic relocations could be dispensed with. */ - asymbol **dyn_syms; - arelent **dyn_relocs; - int dyn_reloc_count; /* Number of dynamic relocs. */ - + asymbol **dyn_syms = NULL; + arelent **dyn_relocs = NULL; + int dyn_reloc_count = 0; /* Number of dynamic relocs. */ }; /* The load map, got value, etc. are not available from the chain @@ -390,7 +395,7 @@ frv_current_sos (void) } sop = XCNEW (struct so_list); - lm_info_frv *li = XCNEW (lm_info_frv); + lm_info_frv *li = new lm_info_frv; sop->lm_info = li; li->map = loadmap; li->got_value = got_addr; @@ -783,9 +788,8 @@ frv_relocate_main_executable (void) if (ldm == NULL) error (_("Unable to load the executable's loadmap.")); - if (main_executable_lm_info) - xfree (main_executable_lm_info); - main_executable_lm_info = XCNEW (lm_info_frv); + delete main_executable_lm_info; + main_executable_lm_info = new lm_info_frv; main_executable_lm_info->map = ldm; new_offsets = XCNEWVEC (struct section_offsets, @@ -859,14 +863,9 @@ frv_clear_solib (void) lm_base_cache = 0; enable_break2_done = 0; main_lm_addr = 0; - if (main_executable_lm_info != 0) - { - xfree (main_executable_lm_info->map); - xfree (main_executable_lm_info->dyn_syms); - xfree (main_executable_lm_info->dyn_relocs); - xfree (main_executable_lm_info); - main_executable_lm_info = 0; - } + + delete main_executable_lm_info; + main_executable_lm_info = NULL; } static void @@ -874,10 +873,7 @@ frv_free_so (struct so_list *so) { lm_info_frv *li = (lm_info_frv *) so->lm_info; - xfree (li->map); - xfree (li->dyn_syms); - xfree (li->dyn_relocs); - xfree (li); + delete li; } static void -- 2.34.1