diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6fb632b038..ae004ebe86 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2017-04-28 Simon Marchi + + * solib-dsbt.c (struct lm_info_dsbt): Add destructor, initialize + map field. + (dsbt_current_sos): Allocate lm_info_dsbt with new. + (dsbt_relocate_main_executable): Free lm_info_dsbt with delete + and allocate with new. + (dsbt_clear_solib, dsbt_free_so): Free lm_info_dsbt with delete. + 2017-04-28 Simon Marchi * solib-aix.c (struct lm_info_aix): Initialize fields in-class. diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c index 6d410ac90b..facbd93361 100644 --- a/gdb/solib-dsbt.c +++ b/gdb/solib-dsbt.c @@ -125,8 +125,13 @@ struct ext_link_map struct lm_info_dsbt : public lm_info_base { + ~lm_info_dsbt () + { + xfree (this->map); + } + /* The loadmap, digested into an easier to use form. */ - struct int_elf32_dsbt_loadmap *map; + int_elf32_dsbt_loadmap *map = NULL; }; /* Per pspace dsbt specific data. */ @@ -711,7 +716,7 @@ dsbt_current_sos (void) } sop = XCNEW (struct so_list); - lm_info_dsbt *li = XCNEW (lm_info_dsbt); + lm_info_dsbt *li = new lm_info_dsbt; sop->lm_info = li; li->map = loadmap; /* Fetch the name. */ @@ -930,8 +935,8 @@ dsbt_relocate_main_executable (void) dsbt_get_initial_loadmaps (); ldm = info->exec_loadmap; - xfree (info->main_executable_lm_info); - info->main_executable_lm_info = XCNEW (lm_info_dsbt); + delete info->main_executable_lm_info; + info->main_executable_lm_info = new lm_info_dsbt; info->main_executable_lm_info->map = ldm; new_offsets = XCNEWVEC (struct section_offsets, @@ -1006,12 +1011,9 @@ dsbt_clear_solib (void) info->lm_base_cache = 0; info->main_lm_addr = 0; - if (info->main_executable_lm_info != 0) - { - xfree (info->main_executable_lm_info->map); - xfree (info->main_executable_lm_info); - info->main_executable_lm_info = 0; - } + + delete info->main_executable_lm_info; + info->main_executable_lm_info = NULL; } static void @@ -1019,8 +1021,7 @@ dsbt_free_so (struct so_list *so) { lm_info_dsbt *li = (lm_info_dsbt *) so->lm_info; - xfree (li->map); - xfree (li); + delete li; } static void