[binutils-gdb] Use delete instead of xfree for varobj_item

Yao Qi qiyao@sourceware.org
Thu Feb 23 11:05:00 GMT 2017


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

commit 0a8beaba19a991bbfcf03756c4a150bf9512a164
Author: Yao Qi <yao.qi@linaro.org>
Date:   Thu Feb 23 11:05:03 2017 +0000

    Use delete instead of xfree for varobj_item
    
    In commit 2f408ec (Use ui_file_as_string throughout more), we start to
    new varobj_item,
    
    > -  vitem = XNEW (struct varobj_item);
    > +  vitem = new varobj_item ();
    
    but we still use xfree.  This causes some ASAN errors,
    
    -var-update container^M
    =================================================================^M
    ^[[1m^[[31m==20660==ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new vs free) on 0x602000090c10^M
    ^[[1m^[[0m    #0 0x2baa77d03631 in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x54631)^M
        #1 0x80e0c8 in xfree(void*) /home/yao/SourceCode/gnu/gdb/git/gdb/common/common-utils.c:100^M
        #2 0xc13670 in varobj_clear_saved_item /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:727^M
        #3 0xc13957 in update_dynamic_varobj_children /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:752^M
        #4 0xc1841c in varobj_update(varobj**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:1699^M
        #5 0x5a2bf7 in varobj_update_one /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:712^M
        #6 0x5a2a41 in mi_cmd_var_update(char*, char**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:695^
    ........
    ^M
    ^[[1m^[[32m0x602000090c10 is located 0 bytes inside of 16-byte region [0x602000090c10,0x602000090c20)^M
    ^[[1m^[[0m^[[1m^[[35mallocated by thread T0 here:^[[1m^[[0m^M
        #0 0x2baa77d0415f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x5515f)^M
        #1 0x63613e in py_varobj_iter_next /home/yao/SourceCode/gnu/gdb/git/gdb/python/py-varobj.c:112^M
        #2 0xc13b89 in update_dynamic_varobj_children /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:776^M
        #3 0xc1841c in varobj_update(varobj**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:1699^M
        #4 0x5a2bf7 in varobj_update_one /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:712^M
        #5 0x5a2a41 in mi_cmd_var_update(char*, char**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:695^M
    
    gdb:
    
    2017-02-23  Yao Qi  <yao.qi@linaro.org>
    
    	* varobj.c (varobj_clear_saved_item): Use delete instead of
    	xfree.
    	(update_dynamic_varobj_children): Likewise.

Diff:
---
 gdb/ChangeLog | 6 ++++++
 gdb/varobj.c  | 4 ++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3ac5170..ade40bd 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2017-02-23  Yao Qi  <yao.qi@linaro.org>
+
+	* varobj.c (varobj_clear_saved_item): Use delete instead of
+	xfree.
+	(update_dynamic_varobj_children): Likewise.
+
 2017-02-21  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* dwarf2read.c (dwarf2_record_block_ranges): Add forgotten BASEADDR.
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 4b12826..173abf3 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -724,7 +724,7 @@ varobj_clear_saved_item (struct varobj_dynamic *var)
   if (var->saved_item != NULL)
     {
       value_free (var->saved_item->value);
-      xfree (var->saved_item);
+      delete var->saved_item;
       var->saved_item = NULL;
     }
 }
@@ -799,7 +799,7 @@ update_dynamic_varobj_children (struct varobj *var,
 				 can_mention ? cchanged : NULL, i,
 				 item);
 
-	  xfree (item);
+	  delete item;
 	}
       else
 	{



More information about the Gdb-cvs mailing list