diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2019-12-16 16:30:49 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2019-12-16 16:30:49 -0500 |
commit | 89867184294da399078d77bae3cd4b27ce640f27 (patch) | |
tree | f5e655fde291286da3523a949b2e65cf99210857 /gdb | |
parent | d043f8c867f85f1c36cc957da8204fe2907b3aea (diff) | |
download | gdb-89867184294da399078d77bae3cd4b27ce640f27.zip gdb-89867184294da399078d77bae3cd4b27ce640f27.tar.gz gdb-89867184294da399078d77bae3cd4b27ce640f27.tar.bz2 |
jit: c++-ify gdb_symtab
This patch makes the gdb_symtab bit more c++y, in preparation for the
next patch that will use an std::forward_list<gdb_symtab>. It changes
the fields to use automatic memory management, in the form of
std::string and gdb::unique_xmalloc_ptr, and adds a constructor and a
destructor.
gdb/ChangeLog:
* jit.c (struct gdb_symtab): Add constructor, destructor,
initialize fields.
<linetable>: Change type to unique_xmalloc_ptr.
<file_name>: Change type to std::string.
(jit_symtab_open_impl): Allocate gdb_symtab with new.
(jit_symtab_line_mapping_add_impl): Adjust.
(finalize_symtab): Adjust, call delete on stab.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/jit.c | 62 |
2 files changed, 43 insertions, 29 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c30b60e..86718ad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + * jit.c (struct gdb_symtab): Add constructor, destructor, + initialize fields. + <linetable>: Change type to unique_xmalloc_ptr. + <file_name>: Change type to std::string. + (jit_symtab_open_impl): Allocate gdb_symtab with new. + (jit_symtab_line_mapping_add_impl): Adjust. + (finalize_symtab): Adjust, call delete on stab. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + * jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop. 2019-12-16 Tom Tromey <tromey@adacore.com> @@ -450,19 +450,39 @@ struct gdb_block struct gdb_symtab { + explicit gdb_symtab (const char *file_name) + : file_name (file_name != nullptr ? file_name : "") + {} + + ~gdb_symtab () + { + gdb_block *gdb_block_iter, *gdb_block_iter_tmp; + + for ((gdb_block_iter = this->blocks, + gdb_block_iter_tmp = gdb_block_iter->next); + gdb_block_iter; + 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); + } + } + /* The list of blocks in this symtab. These will eventually be converted to real blocks. */ - struct gdb_block *blocks; + struct gdb_block *blocks = nullptr; /* The number of blocks inserted. */ - int nblocks; + int nblocks = 0; /* A mapping between line numbers to PC. */ - struct linetable *linetable; + gdb::unique_xmalloc_ptr<struct linetable> linetable; /* The source file for this symtab. */ - const char *file_name; - struct gdb_symtab *next; + std::string file_name; + + struct gdb_symtab *next = nullptr; }; /* Proxy object for building an object. */ @@ -512,12 +532,9 @@ jit_symtab_open_impl (struct gdb_symbol_callbacks *cb, struct gdb_object *object, const char *file_name) { - struct gdb_symtab *ret; - /* CB stays unused. See comment in jit_object_open_impl. */ - ret = XCNEW (struct gdb_symtab); - ret->file_name = file_name ? xstrdup (file_name) : xstrdup (""); + gdb_symtab *ret = new gdb_symtab (file_name); ret->next = object->symtabs; object->symtabs = ret; return ret; @@ -605,7 +622,7 @@ jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb, alloc_len = sizeof (struct linetable) + (nlines - 1) * sizeof (struct linetable_entry); - stab->linetable = (struct linetable *) xmalloc (alloc_len); + stab->linetable.reset (XNEWVAR (struct linetable, alloc_len)); stab->linetable->nitems = nlines; for (i = 0; i < nlines; i++) { @@ -632,7 +649,7 @@ static void finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) { struct compunit_symtab *cust; - struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp; + struct gdb_block *gdb_block_iter; struct block *block_iter; int actual_nblocks, i; size_t blockvector_size; @@ -641,8 +658,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks; - cust = allocate_compunit_symtab (objfile, stab->file_name); - allocate_symtab (cust, stab->file_name); + cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ()); + allocate_symtab (cust, stab->file_name.c_str ()); add_compunit_symtab_to_objfile (cust); /* JIT compilers compile in memory. */ @@ -656,8 +673,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) + sizeof (struct linetable)); SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)) = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size); - memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), stab->linetable, - size); + memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), + stab->linetable.get (), size); } blockvector_size = (sizeof (struct blockvector) @@ -758,20 +775,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) } } - /* Free memory. */ - gdb_block_iter = stab->blocks; - - for (gdb_block_iter = stab->blocks, gdb_block_iter_tmp = gdb_block_iter->next; - gdb_block_iter; - 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); - } - xfree (stab->linetable); - xfree ((char *) stab->file_name); - xfree (stab); + delete stab; } /* Called when closing a gdb_objfile. Converts OBJ to a proper |