diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2019-12-16 16:30:50 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2019-12-16 16:30:50 -0500 |
commit | b61121178ec07f9da1242e439fe1a23a314ad30e (patch) | |
tree | a8049a4df7e4ab02933f0ee393ec43ea3c53c3c0 /gdb/jit.c | |
parent | 1b61f46da5e55bf2df243215f34ffbca4bcf6d9e (diff) | |
download | gdb-b61121178ec07f9da1242e439fe1a23a314ad30e.zip gdb-b61121178ec07f9da1242e439fe1a23a314ad30e.tar.gz 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.
Diffstat (limited to 'gdb/jit.c')
-rw-r--r-- | gdb/jit.c | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -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; |