jit: c++-ify gdb_block
authorSimon Marchi <simon.marchi@polymtl.ca>
Mon, 16 Dec 2019 21:30:50 +0000 (16:30 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Mon, 16 Dec 2019 21:30:50 +0000 (16:30 -0500)
Add a constructor to gdb_block, change the name field to be a
gdb::unique_xmalloc_ptr.  This is in preparation for using an
std::forward_list<gdb_block> in the next patch.

gdb/ChangeLog:

* jit.c (struct gdb_block): Add constructor, initialize
real_block and next fields.
<name>: Change type to gdb::unique_xmalloc_ptr.
(struct gdb_symtab) <~gdb_symtab>: Free blocks with delete.
(jit_block_open_impl): Allocate gdb_block with new.
(finalize_symtab): Adjust to gdb::unique_xmalloc_ptr.

gdb/ChangeLog
gdb/jit.c

index b70f3fa04fd926f5b69eaeae318093f74f318632..c797e87703f43491c00128658e14f1d85a79241f 100644 (file)
@@ -1,3 +1,12 @@
+2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * jit.c (struct gdb_block): Add constructor, initialize
+       real_block and next fields.
+       <name>: Change type to gdb::unique_xmalloc_ptr.
+       (struct gdb_symtab) <~gdb_symtab>: Free blocks with delete.
+       (jit_block_open_impl): Allocate gdb_block with new.
+       (finalize_symtab): Adjust to gdb::unique_xmalloc_ptr.
+
 2019-12-16  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * jit.c: Include forward_list.
index a731edd870d38049ec13cc8dee115012ea0ce70e..bb6b6bacb5d17a5c3218c284e976ac310e071143 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -429,22 +429,30 @@ jit_read_code_entry (struct gdbarch *gdbarch,
 
 struct gdb_block
 {
+  gdb_block (gdb_block *parent, CORE_ADDR begin, CORE_ADDR end,
+            const char *name)
+    : parent (parent),
+      begin (begin),
+      end (end),
+      name (name != nullptr ? xstrdup (name) : nullptr)
+  {}
+
   /* gdb_blocks are linked into a tree structure.  Next points to the
      next node at the same depth as this block and parent to the
      parent gdb_block.  */
-  struct gdb_block *next, *parent;
+  struct gdb_block *next = nullptr, *parent;
 
   /* Points to the "real" block that is being built out of this
      instance.  This block will be added to a blockvector, which will
      then be added to a symtab.  */
-  struct block *real_block;
+  struct block *real_block = nullptr;
 
   /* The first and last code address corresponding to this block.  */
   CORE_ADDR begin, end;
 
   /* The name of this block (if any).  If this is non-NULL, the
      FUNCTION symbol symbol is set to this value.  */
-  const char *name;
+  gdb::unique_xmalloc_ptr<char> name;
 };
 
 /* Proxy object for building a symtab.  */
@@ -465,8 +473,7 @@ struct gdb_symtab
          gdb_block_iter = gdb_block_iter_tmp)
       {
         gdb_block_iter_tmp = gdb_block_iter->next;
-        xfree ((void *) gdb_block_iter->name);
-        xfree (gdb_block_iter);
+       delete gdb_block_iter;
       }
   }
 
@@ -574,13 +581,9 @@ jit_block_open_impl (struct gdb_symbol_callbacks *cb,
                     struct gdb_symtab *symtab, struct gdb_block *parent,
                     GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
 {
-  struct gdb_block *block = XCNEW (struct gdb_block);
+  struct gdb_block *block = new gdb_block (parent, begin, end, name);
 
   block->next = symtab->blocks;
-  block->begin = (CORE_ADDR) begin;
-  block->end = (CORE_ADDR) end;
-  block->name = name ? xstrdup (name) : NULL;
-  block->parent = parent;
 
   /* Ensure that the blocks are inserted in the correct (reverse of
      the order expected by blockvector).  */
@@ -721,7 +724,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       SYMBOL_BLOCK_VALUE (block_name) = new_block;
 
       block_name->name = obstack_strdup (&objfile->objfile_obstack,
-                                        gdb_block_iter->name);
+                                        gdb_block_iter->name.get ());
 
       BLOCK_FUNCTION (new_block) = block_name;