mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
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:

committed by
Simon Marchi

parent
1b61f46da5
commit
b61121178e
@ -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>
|
2019-12-16 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* jit.c: Include forward_list.
|
* jit.c: Include forward_list.
|
||||||
|
25
gdb/jit.c
25
gdb/jit.c
@ -429,22 +429,30 @@ jit_read_code_entry (struct gdbarch *gdbarch,
|
|||||||
|
|
||||||
struct gdb_block
|
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
|
/* 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
|
next node at the same depth as this block and parent to the
|
||||||
parent gdb_block. */
|
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
|
/* Points to the "real" block that is being built out of this
|
||||||
instance. This block will be added to a blockvector, which will
|
instance. This block will be added to a blockvector, which will
|
||||||
then be added to a symtab. */
|
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. */
|
/* The first and last code address corresponding to this block. */
|
||||||
CORE_ADDR begin, end;
|
CORE_ADDR begin, end;
|
||||||
|
|
||||||
/* The name of this block (if any). If this is non-NULL, the
|
/* The name of this block (if any). If this is non-NULL, the
|
||||||
FUNCTION symbol symbol is set to this value. */
|
FUNCTION symbol symbol is set to this value. */
|
||||||
const char *name;
|
gdb::unique_xmalloc_ptr<char> name;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Proxy object for building a symtab. */
|
/* Proxy object for building a symtab. */
|
||||||
@ -465,8 +473,7 @@ struct gdb_symtab
|
|||||||
gdb_block_iter = gdb_block_iter_tmp)
|
gdb_block_iter = gdb_block_iter_tmp)
|
||||||
{
|
{
|
||||||
gdb_block_iter_tmp = gdb_block_iter->next;
|
gdb_block_iter_tmp = gdb_block_iter->next;
|
||||||
xfree ((void *) gdb_block_iter->name);
|
delete gdb_block_iter;
|
||||||
xfree (gdb_block_iter);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,13 +581,9 @@ jit_block_open_impl (struct gdb_symbol_callbacks *cb,
|
|||||||
struct gdb_symtab *symtab, struct gdb_block *parent,
|
struct gdb_symtab *symtab, struct gdb_block *parent,
|
||||||
GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
|
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->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
|
/* Ensure that the blocks are inserted in the correct (reverse of
|
||||||
the order expected by blockvector). */
|
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;
|
SYMBOL_BLOCK_VALUE (block_name) = new_block;
|
||||||
|
|
||||||
block_name->name = obstack_strdup (&objfile->objfile_obstack,
|
block_name->name = obstack_strdup (&objfile->objfile_obstack,
|
||||||
gdb_block_iter->name);
|
gdb_block_iter->name.get ());
|
||||||
|
|
||||||
BLOCK_FUNCTION (new_block) = block_name;
|
BLOCK_FUNCTION (new_block) = block_name;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user