This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Class-ify lm_info_frv


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4023ae762ed9b52e4925242b705d0b3a50f6ed13

commit 4023ae762ed9b52e4925242b705d0b3a50f6ed13
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Fri Apr 28 17:16:16 2017 -0400

    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.

Diff:
---
 gdb/ChangeLog   |  9 +++++++++
 gdb/solib-frv.c | 42 +++++++++++++++++++-----------------------
 2 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index aadb63e..9952e28 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
 2017-04-28  Simon Marchi  <simon.marchi@ericsson.com>
 
+	* 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  <simon.marchi@ericsson.com>
+
 	* solib-frv.c (struct lm_info_frv): Fix indentation.
 
 2017-04-28  Simon Marchi  <simon.marchi@ericsson.com>
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index e11de25..f0265e3 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]