aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2019-12-16 16:30:50 -0500
committerSimon Marchi <simon.marchi@efficios.com>2019-12-16 16:30:50 -0500
commitb61121178ec07f9da1242e439fe1a23a314ad30e (patch)
treea8049a4df7e4ab02933f0ee393ec43ea3c53c3c0
parent1b61f46da5e55bf2df243215f34ffbca4bcf6d9e (diff)
downloadfsf-binutils-gdb-b61121178ec07f9da1242e439fe1a23a314ad30e.zip
fsf-binutils-gdb-b61121178ec07f9da1242e439fe1a23a314ad30e.tar.gz
fsf-binutils-gdb-b61121178ec07f9da1242e439fe1a23a314ad30e.tar.bz2
jit: c++-ify gdb_block
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.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/jit.c25
2 files changed, 23 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b70f3fa..c797e87 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
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.
(struct gdb_symtab) <next>: Remove field.
(struct gdb_object) <symtabs>: Change type to
diff --git a/gdb/jit.c b/gdb/jit.c
index a731edd..bb6b6ba 100644
--- 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;