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.
This commit is contained in:
Simon Marchi 2019-12-16 16:30:50 -05:00 committed by Simon Marchi
parent 1b61f46da5
commit b61121178e
2 changed files with 23 additions and 11 deletions

View 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.

View file

@ -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;