Remove remaining cleanups from compile-object-load.c
This removes the remaining cleanups from compile-object-load.c. gdb/ChangeLog 2018-09-18 Tom Tromey <tom@tromey.com> * compile/compile-object-load.c (struct link_hash_table_cleanup_data): Add constructor and destructor. Use DISABLE_COPY_AND_ASSIGN. (~link_hash_table_cleanup_data): Rename from link_hash_table_free. Now a destructor. (copy_sections): Use gdb::unique_xmalloc_ptr. Remove cleanups.
This commit is contained in:
parent
c9e0a7e333
commit
40f03055a2
2 changed files with 46 additions and 27 deletions
|
@ -1,3 +1,12 @@
|
|||
2018-09-18 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* compile/compile-object-load.c (struct
|
||||
link_hash_table_cleanup_data): Add constructor and destructor.
|
||||
Use DISABLE_COPY_AND_ASSIGN.
|
||||
(~link_hash_table_cleanup_data): Rename from
|
||||
link_hash_table_free. Now a destructor.
|
||||
(copy_sections): Use gdb::unique_xmalloc_ptr. Remove cleanups.
|
||||
|
||||
2018-09-18 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* compile/compile-object-run.c (do_module_cleanup): Use delete.
|
||||
|
|
|
@ -49,7 +49,18 @@ munmap_list::add (CORE_ADDR addr, CORE_ADDR size)
|
|||
munmap_list::~munmap_list ()
|
||||
{
|
||||
for (auto &item : items)
|
||||
gdbarch_infcall_munmap (target_gdbarch (), item.addr, item.size);
|
||||
{
|
||||
TRY
|
||||
{
|
||||
gdbarch_infcall_munmap (target_gdbarch (), item.addr, item.size);
|
||||
}
|
||||
CATCH (ex, RETURN_MASK_ERROR)
|
||||
{
|
||||
/* There's not much the user can do, so just ignore
|
||||
this. */
|
||||
}
|
||||
END_CATCH
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper data for setup_sections. */
|
||||
|
@ -282,35 +293,37 @@ static const struct bfd_link_callbacks link_callbacks =
|
|||
|
||||
struct link_hash_table_cleanup_data
|
||||
{
|
||||
explicit link_hash_table_cleanup_data (bfd *abfd_)
|
||||
: abfd (abfd_),
|
||||
link_next (abfd->link.next)
|
||||
{
|
||||
}
|
||||
|
||||
~link_hash_table_cleanup_data ()
|
||||
{
|
||||
if (abfd->is_linker_output)
|
||||
(*abfd->link.hash->hash_table_free) (abfd);
|
||||
abfd->link.next = link_next;
|
||||
}
|
||||
|
||||
DISABLE_COPY_AND_ASSIGN (link_hash_table_cleanup_data);
|
||||
|
||||
private:
|
||||
|
||||
bfd *abfd;
|
||||
bfd *link_next;
|
||||
};
|
||||
|
||||
/* Cleanup callback for struct bfd_link_info. */
|
||||
|
||||
static void
|
||||
link_hash_table_free (void *d)
|
||||
{
|
||||
struct link_hash_table_cleanup_data *data
|
||||
= (struct link_hash_table_cleanup_data *) d;
|
||||
|
||||
if (data->abfd->is_linker_output)
|
||||
(*data->abfd->link.hash->hash_table_free) (data->abfd);
|
||||
data->abfd->link.next = data->link_next;
|
||||
}
|
||||
|
||||
/* Relocate and store into inferior memory each section SECT of ABFD. */
|
||||
|
||||
static void
|
||||
copy_sections (bfd *abfd, asection *sect, void *data)
|
||||
{
|
||||
asymbol **symbol_table = (asymbol **) data;
|
||||
bfd_byte *sect_data, *sect_data_got;
|
||||
struct cleanup *cleanups;
|
||||
bfd_byte *sect_data_got;
|
||||
struct bfd_link_info link_info;
|
||||
struct bfd_link_order link_order;
|
||||
CORE_ADDR inferior_addr;
|
||||
struct link_hash_table_cleanup_data cleanup_data;
|
||||
|
||||
if ((bfd_get_section_flags (abfd, sect) & (SEC_ALLOC | SEC_LOAD))
|
||||
!= (SEC_ALLOC | SEC_LOAD))
|
||||
|
@ -326,13 +339,11 @@ copy_sections (bfd *abfd, asection *sect, void *data)
|
|||
link_info.input_bfds = abfd;
|
||||
link_info.input_bfds_tail = &abfd->link.next;
|
||||
|
||||
cleanup_data.abfd = abfd;
|
||||
cleanup_data.link_next = abfd->link.next;
|
||||
struct link_hash_table_cleanup_data cleanup_data (abfd);
|
||||
|
||||
abfd->link.next = NULL;
|
||||
link_info.hash = bfd_link_hash_table_create (abfd);
|
||||
|
||||
cleanups = make_cleanup (link_hash_table_free, &cleanup_data);
|
||||
link_info.callbacks = &link_callbacks;
|
||||
|
||||
memset (&link_order, 0, sizeof (link_order));
|
||||
|
@ -342,21 +353,22 @@ copy_sections (bfd *abfd, asection *sect, void *data)
|
|||
link_order.size = bfd_get_section_size (sect);
|
||||
link_order.u.indirect.section = sect;
|
||||
|
||||
sect_data = (bfd_byte *) xmalloc (bfd_get_section_size (sect));
|
||||
make_cleanup (xfree, sect_data);
|
||||
gdb::unique_xmalloc_ptr<gdb_byte> sect_data
|
||||
((bfd_byte *) xmalloc (bfd_get_section_size (sect)));
|
||||
|
||||
sect_data_got = bfd_get_relocated_section_contents (abfd, &link_info,
|
||||
&link_order, sect_data,
|
||||
&link_order,
|
||||
sect_data.get (),
|
||||
FALSE, symbol_table);
|
||||
|
||||
if (sect_data_got == NULL)
|
||||
error (_("Cannot map compiled module \"%s\" section \"%s\": %s"),
|
||||
bfd_get_filename (abfd), bfd_get_section_name (abfd, sect),
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
gdb_assert (sect_data_got == sect_data);
|
||||
gdb_assert (sect_data_got == sect_data.get ());
|
||||
|
||||
inferior_addr = bfd_get_section_vma (abfd, sect);
|
||||
if (0 != target_write_memory (inferior_addr, sect_data,
|
||||
if (0 != target_write_memory (inferior_addr, sect_data.get (),
|
||||
bfd_get_section_size (sect)))
|
||||
error (_("Cannot write compiled module \"%s\" section \"%s\" "
|
||||
"to inferior memory range %s-%s."),
|
||||
|
@ -364,8 +376,6 @@ copy_sections (bfd *abfd, asection *sect, void *data)
|
|||
paddress (target_gdbarch (), inferior_addr),
|
||||
paddress (target_gdbarch (),
|
||||
inferior_addr + bfd_get_section_size (sect)));
|
||||
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
|
||||
/* Fetch the type of COMPILE_I_EXPR_PTR_TYPE and COMPILE_I_EXPR_VAL
|
||||
|
|
Loading…
Add table
Reference in a new issue