Author: ycwu
Date: 2011-07-26 05:19:24 -0400 (Tue, 26 Jul 2011)
New Revision: 3702

Modified:
   trunk/osprey/be/cg/cgdwarf.cxx
   trunk/osprey/libdwarf/dwf_section.c
   trunk/osprey/libdwarf/libdwarf/pro_section.c
Log:
fix several memory leaks. 

CR by Sun Chan



Modified: trunk/osprey/be/cg/cgdwarf.cxx
===================================================================
--- trunk/osprey/be/cg/cgdwarf.cxx      2011-07-26 08:20:18 UTC (rev 3701)
+++ trunk/osprey/be/cg/cgdwarf.cxx      2011-07-26 09:19:24 UTC (rev 3702)
@@ -101,6 +101,7 @@
 #include "data_layout.h"
 #include "dwarf_DST.h"
 #include "dwarf_DST_mem.h"
+#include "ir_reader.h"
 #include "const.h"
 #include "cg.h"
 #include "cgtarget.h"
@@ -136,6 +137,17 @@
 #define GLOBAL_LEVEL 0
 #define LOCAL_LEVEL 1
 
+// the class Scope_Dwarf_Expr_Ptr is used for deallocate the allocated 
+// Dwarf_P_Expr pointer in C++ way
+class Scope_Dwarf_Expr_Ptr
+{
+   public:
+      Scope_Dwarf_Expr_Ptr(Dwarf_P_Expr p) : _ptr(p) {}
+      ~Scope_Dwarf_Expr_Ptr() { dwarf_p_dealloc(_ptr, DW_DLA_STRING); }
+   private:
+     Dwarf_P_Expr _ptr; 
+};
+
 struct CGD_SYMTAB_ENTRY {
   CGD_SYMTAB_ENTRY_TYPE type;
   Dwarf_Unsigned        index;
@@ -681,7 +693,6 @@
               DST_SUBPROGRAM *attr,
               Dwarf_P_Die die)
 {
-  Dwarf_P_Expr expr;
 
   if (DST_IS_memdef(flag))  /* Not yet supported */ {
     ErrMsg (EC_Unimplemented, 
@@ -710,7 +721,8 @@
        dwarf_add_AT_unsigned_const(dw_dbg, die, DW_AT_virtuality,
                                   DST_SUBPROGRAM_decl_virtuality(attr),
                                   &dw_error);
-       expr = dwarf_new_expr(dw_dbg, &dw_error);
+       Dwarf_P_Expr expr = dwarf_new_expr(dw_dbg, &dw_error);
+       Scope_Dwarf_Expr_Ptr expr_ptr(expr);
        dwarf_add_expr_gen(expr,
                          DW_OP_const2u,
                          DST_SUBPROGRAM_decl_vtable_elem_location(attr),
@@ -797,7 +809,8 @@
        dwarf_add_AT_unsigned_const(dw_dbg, die, DW_AT_virtuality,
                                   DST_SUBPROGRAM_def_virtuality(attr),
                                   &dw_error);
-       expr = dwarf_new_expr(dw_dbg, &dw_error);
+       Dwarf_P_Expr expr = dwarf_new_expr(dw_dbg, &dw_error);
+       Scope_Dwarf_Expr_Ptr expr_ptr(expr);
        dwarf_add_expr_gen(expr,
                          DW_OP_const2u,
                          DST_SUBPROGRAM_def_vtable_elem_location(attr),
@@ -913,7 +926,6 @@
   Dwarf_P_Die die,
   Dwarf_Half loc_attr)
 {
-  Dwarf_P_Expr expr;
   ST *st;
   ST *base_st;
   INT64 base_ofst;
@@ -950,7 +962,8 @@
   if (DST_IS_deref(flag))  /* f90 formals, dope, etc */
        deref = TRUE;
 
-  expr = dwarf_new_expr (dw_dbg, &dw_error);
+  Dwarf_P_Expr expr = dwarf_new_expr (dw_dbg, &dw_error);
+  Scope_Dwarf_Expr_Ptr expr_ptr(expr);
 
   if (st == base_st && ST_class(st) != CLASS_BLOCK 
        && ST_sclass(st) != SCLASS_COMMON && ST_sclass(st) != SCLASS_EXTERN) 
@@ -1565,8 +1578,6 @@
 static void
 put_member(DST_flag flag, DST_MEMBER *attr, Dwarf_P_Die die)
 {
-  Dwarf_P_Expr expr;
-
   put_decl(DST_MEMBER_decl(attr), die);
   put_name (DST_MEMBER_name(attr), die, pb_none);
   put_reference (DST_MEMBER_type(attr), DW_AT_type, die);
@@ -1587,7 +1598,8 @@
         * decl and static flags are set at same time,
         * so use decl flag. */
        /* For now, assume that the member location is always a constant. */
-       expr = dwarf_new_expr (dw_dbg, &dw_error);
+        Dwarf_P_Expr expr = dwarf_new_expr (dw_dbg, &dw_error);
+        Scope_Dwarf_Expr_Ptr expr_ptr(expr);
 #ifdef KEY
         // the dwarf spec says that the location expression for a structure 
member
         // assumes that the location of the struct itself is on the stack.  
This
@@ -1647,10 +1659,11 @@
 static void
 put_inheritance(DST_flag flag, DST_INHERITANCE *attr, Dwarf_P_Die die)
 {
+  put_reference (DST_INHERITANCE_type(attr), DW_AT_type, die);
+
   Dwarf_P_Expr expr;
-
-  put_reference (DST_INHERITANCE_type(attr), DW_AT_type, die);
   expr = dwarf_new_expr (dw_dbg, &dw_error);
+  Scope_Dwarf_Expr_Ptr expr_ptr( expr);
 #ifdef KEY
   // Bug 3107
   // Quote from Dave's last fix:
@@ -2335,7 +2348,6 @@
 {
   DST_INFO *info;
   Dwarf_P_Die PU_die;
-  Dwarf_P_Expr expr;
   Dwarf_P_Fde fde;
 #ifdef TARG_X8664
   Dwarf_P_Fde eh_fde = 0;
@@ -2396,7 +2408,8 @@
   }
 
   /* setup the frame_base attribute. */
-  expr = dwarf_new_expr (dw_dbg, &dw_error);
+  Dwarf_P_Expr expr = dwarf_new_expr (dw_dbg, &dw_error);
+  Scope_Dwarf_Expr_Ptr expr_ptr(expr);
 #ifndef TARG_X8664
 #ifndef TARG_NVISA /* no stack frames yet */
   if (Current_PU_Stack_Model != SMODEL_SMALL)
@@ -2733,7 +2746,6 @@
 #endif
 
   }
-
 }
 
 #ifdef KEY

Modified: trunk/osprey/libdwarf/dwf_section.c
===================================================================
--- trunk/osprey/libdwarf/dwf_section.c 2011-07-26 08:20:18 UTC (rev 3701)
+++ trunk/osprey/libdwarf/dwf_section.c 2011-07-26 09:19:24 UTC (rev 3702)
@@ -636,6 +636,7 @@
        curfde = curfde->fde_next;
     }
 
+    _dwarf_p_dealloc(dbg, cie_offs);
 
     return (int)dbg->de_n_debug_sect;
 }

Modified: trunk/osprey/libdwarf/libdwarf/pro_section.c
===================================================================
--- trunk/osprey/libdwarf/libdwarf/pro_section.c        2011-07-26 08:20:18 UTC 
(rev 3701)
+++ trunk/osprey/libdwarf/libdwarf/pro_section.c        2011-07-26 09:19:24 UTC 
(rev 3702)
@@ -904,6 +904,7 @@
        }
        curline = curline->dpl_next;
     }
+    _dwarf_p_dealloc(dbg, prevline);
 
     /* write total length field */
     du = sum_bytes - uwordb_size - extension_size;     /* subtract
@@ -1400,6 +1401,7 @@
        curfde = curfde->fde_next;
     }
 
+    _dwarf_p_dealloc(dbg, cie_offs);
 
     return (int) dbg->de_n_debug_sect;
 }


------------------------------------------------------------------------------
Magic Quadrant for Content-Aware Data Loss Prevention
Research study explores the data loss prevention market. Includes in-depth
analysis on the changes within the DLP market, and the criteria used to
evaluate the strengths and weaknesses of these DLP solutions.
http://www.accelacomm.com/jaw/sfnl/114/51385063/
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to