2007-08-08 Michael Snyder <msnyder@access-company.com>
authorMichael Snyder <msnyder@vmware.com>
Wed, 8 Aug 2007 18:01:35 +0000 (18:01 +0000)
committerMichael Snyder <msnyder@vmware.com>
Wed, 8 Aug 2007 18:01:35 +0000 (18:01 +0000)
* dwarf2read.c (add_partial_symbol): Memory leak.

gdb/ChangeLog
gdb/dwarf2read.c

index 46ba53957843f81551e2e13b3e6fe60b0de371e1..d657eea21c11360015da56ac2ed668a092f419a3 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-08  Michael Snyder  <msnyder@access-company.com>
+
+       * dwarf2read.c (add_partial_symbol): Memory leak.
+
 2007-08-06  Michael Snyder  <msnyder@access-company.com>
 
        * ada-lang.c (desc_bounds): Comparison of function address to NULL.
index c12e3da62798e53f7c0de220b39dd54af01d1ea1..9cc1b568d9d5d0b61ba50810c45feb3ab161b697 100644 (file)
@@ -1886,7 +1886,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 {
   struct objfile *objfile = cu->objfile;
   CORE_ADDR addr = 0;
-  char *actual_name;
+  char *actual_name = NULL;
   const char *my_prefix;
   const struct partial_symbol *psym = NULL;
   CORE_ADDR baseaddr;
@@ -1894,8 +1894,6 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 
   baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
 
-  actual_name = NULL;
-
   if (pdi_needs_namespace (pdi->tag))
     {
       actual_name = partial_die_full_name (pdi, cu);
@@ -1959,7 +1957,11 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
        {
          /* Static Variable. Skip symbols without location descriptors.  */
          if (pdi->locdesc == NULL)
-           return;
+           {
+             if (built_actual_name)
+               xfree (actual_name);
+             return;
+           }
          addr = decode_locdesc (pdi->locdesc, cu);
          /*prim_record_minimal_symbol (actual_name, addr + baseaddr,
             mst_file_data, objfile); */
@@ -1994,7 +1996,11 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
          union or class entry that does not have a byte size attribute
          and that has a DW_AT_declaration attribute."  */
       if (!pdi->has_byte_size && pdi->is_declaration)
-        return;
+       {
+         if (built_actual_name)
+           xfree (actual_name);
+         return;
+       }
 
       /* NOTE: carlton/2003-10-07: See comment in new_symbol about
         static vs. global.  */