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] Return unique_xmalloc_ptr for generate_c_for_variable_locations


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

commit bd923e510884a92514a4f9d90d79592d248d5d92
Author: Keith Seitz <keiths@redhat.com>
Date:   Fri Aug 10 10:38:56 2018 -0700

    Return unique_xmalloc_ptr for generate_c_for_variable_locations
    
    This patch eliminates two cleanups in compile/ by changing
    generate_c_for_variable_locations so that it returns a unique_ptr.
    
    gdb/ChangeLog:
            * compile/compile-c-support.c (c_compute_program): Use
            unique_xmalloc_ptr to eliminate cleanup.
            * compile/compile-c-symbols.c (generate_c_for_variable_locations):
            Return a unique_xmalloc_ptr and eliminate cleanup.
            * compile/compile-internal.h (generate_c_for_variable_locations):
            Return unique_xmalloc_ptr and update description.

Diff:
---
 gdb/ChangeLog                   |  9 +++++++++
 gdb/compile/compile-c-support.c | 10 ++++------
 gdb/compile/compile-c-symbols.c | 11 ++++-------
 gdb/compile/compile-internal.h  |  9 +++++----
 4 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index bc68519..7414f0e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2018-08-10  Keith Seitz  <keiths@redhat.com>
+
+	* compile/compile-c-support.c (c_compute_program): Use
+	unique_xmalloc_ptr to eliminate cleanup.
+	* compile/compile-c-symbols.c (generate_c_for_variable_locations):
+	Return a unique_xmalloc_ptr and eliminate cleanup.
+	* compile/compile-internal.h (generate_c_for_variable_locations):
+	Return unique_xmalloc_ptr and update description.
+
 2018-08-10  Alan Hayward  <alan.hayward@arm.com>
 
 	* corelow.c (core_target::get_core_register_section): Rename
diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
index e694648..696bb9f 100644
--- a/gdb/compile/compile-c-support.c
+++ b/gdb/compile/compile-c-support.c
@@ -351,17 +351,15 @@ c_compute_program (struct compile_instance *inst,
      and the user's code may only refer to globals.  */
   if (inst->scope != COMPILE_I_RAW_SCOPE)
     {
-      unsigned char *registers_used;
       int i;
 
       /* Generate the code to compute variable locations, but do it
 	 before generating the function header, so we can define the
 	 register struct before the function body.  This requires a
 	 temporary stream.  */
-      registers_used = generate_c_for_variable_locations (context,
-							  var_stream, gdbarch,
-							  expr_block, expr_pc);
-      make_cleanup (xfree, registers_used);
+      gdb::unique_xmalloc_ptr<unsigned char> registers_used
+	= generate_c_for_variable_locations (context, var_stream, gdbarch,
+					     expr_block, expr_pc);
 
       buf.puts ("typedef unsigned int"
 		" __attribute__ ((__mode__(__pointer__)))"
@@ -382,7 +380,7 @@ c_compute_program (struct compile_instance *inst,
 		      mode, mode);
 	}
 
-      generate_register_struct (&buf, gdbarch, registers_used);
+      generate_register_struct (&buf, gdbarch, registers_used.get ());
     }
 
   add_code_header (inst->scope, &buf);
diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c
index 43de7df..6987fa3 100644
--- a/gdb/compile/compile-c-symbols.c
+++ b/gdb/compile/compile-c-symbols.c
@@ -708,24 +708,22 @@ generate_c_for_for_one_variable (struct compile_c_instance *compiler,
 
 /* See compile-internal.h.  */
 
-unsigned char *
+gdb::unique_xmalloc_ptr<unsigned char>
 generate_c_for_variable_locations (struct compile_c_instance *compiler,
 				   string_file &stream,
 				   struct gdbarch *gdbarch,
 				   const struct block *block,
 				   CORE_ADDR pc)
 {
-  struct cleanup *outer;
   const struct block *static_block = block_static_block (block);
-  unsigned char *registers_used;
 
   /* If we're already in the static or global block, there is nothing
      to write.  */
   if (static_block == NULL || block == static_block)
     return NULL;
 
-  registers_used = XCNEWVEC (unsigned char, gdbarch_num_regs (gdbarch));
-  outer = make_cleanup (xfree, registers_used);
+  gdb::unique_xmalloc_ptr<unsigned char> registers_used
+    (XCNEWVEC (unsigned char, gdbarch_num_regs (gdbarch)));
 
   /* Ensure that a given name is only entered once.  This reflects the
      reality of shadowing.  */
@@ -745,7 +743,7 @@ generate_c_for_variable_locations (struct compile_c_instance *compiler,
 	{
 	  if (!symbol_seen (symhash.get (), sym))
 	    generate_c_for_for_one_variable (compiler, stream, gdbarch,
-					     registers_used, pc, sym);
+					     registers_used.get (), pc, sym);
 	}
 
       /* If we just finished the outermost block of a function, we're
@@ -755,6 +753,5 @@ generate_c_for_variable_locations (struct compile_c_instance *compiler,
       block = BLOCK_SUPERBLOCK (block);
     }
 
-  discard_cleanups (outer);
   return registers_used;
 }
diff --git a/gdb/compile/compile-internal.h b/gdb/compile/compile-internal.h
index c92cb64..01beb1d 100644
--- a/gdb/compile/compile-internal.h
+++ b/gdb/compile/compile-internal.h
@@ -128,11 +128,12 @@ extern gcc_c_symbol_address_function gcc_symbol_address;
 extern struct compile_instance *new_compile_instance (struct gcc_c_context *fe);
 
 /* Emit code to compute the address for all the local variables in
-   scope at PC in BLOCK.  Returns a malloc'd vector, indexed by gdb
-   register number, where each element indicates if the corresponding
-   register is needed to compute a local variable.  */
+   scope at PC in BLOCK.  Returns a vector, indexed by gdb register
+   number, where each element indicates if the corresponding register
+   is needed to compute a local variable.  */
 
-extern unsigned char *generate_c_for_variable_locations
+extern gdb::unique_xmalloc_ptr<unsigned char>
+  generate_c_for_variable_locations
      (struct compile_c_instance *compiler,
       string_file &stream,
       struct gdbarch *gdbarch,


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