diff options
Diffstat (limited to 'gdb/jit.c')
-rw-r--r-- | gdb/jit.c | 30 |
1 files changed, 15 insertions, 15 deletions
@@ -136,7 +136,7 @@ mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb) /* Open a BFD from the target's memory. */ -static struct bfd * +static gdb_bfd_ref_ptr bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target) { struct target_buffer *buffer = XNEW (struct target_buffer); @@ -892,7 +892,6 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry, CORE_ADDR entry_addr, struct gdbarch *gdbarch) { - bfd *nbfd; struct section_addr_info *sai; struct bfd_section *sec; struct objfile *objfile; @@ -907,8 +906,9 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry, paddress (gdbarch, code_entry->symfile_addr), pulongest (code_entry->symfile_size)); - nbfd = bfd_open_from_target_memory (code_entry->symfile_addr, - code_entry->symfile_size, gnutarget); + gdb_bfd_ref_ptr nbfd (bfd_open_from_target_memory (code_entry->symfile_addr, + code_entry->symfile_size, + gnutarget)); if (nbfd == NULL) { puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n")); @@ -917,42 +917,42 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry, /* Check the format. NOTE: This initializes important data that GDB uses! We would segfault later without this line. */ - if (!bfd_check_format (nbfd, bfd_object)) + if (!bfd_check_format (nbfd.get (), bfd_object)) { printf_unfiltered (_("\ JITed symbol file is not an object file, ignoring it.\n")); - gdb_bfd_unref (nbfd); return; } /* Check bfd arch. */ b = gdbarch_bfd_arch_info (gdbarch); - if (b->compatible (b, bfd_get_arch_info (nbfd)) != b) + if (b->compatible (b, bfd_get_arch_info (nbfd.get ())) != b) warning (_("JITed object file architecture %s is not compatible " - "with target architecture %s."), bfd_get_arch_info - (nbfd)->printable_name, b->printable_name); + "with target architecture %s."), + bfd_get_arch_info (nbfd.get ())->printable_name, + b->printable_name); /* Read the section address information out of the symbol file. Since the file is generated by the JIT at runtime, it should all of the absolute addresses that we care about. */ - sai = alloc_section_addr_info (bfd_count_sections (nbfd)); + sai = alloc_section_addr_info (bfd_count_sections (nbfd.get ())); old_cleanups = make_cleanup_free_section_addr_info (sai); i = 0; for (sec = nbfd->sections; sec != NULL; sec = sec->next) - if ((bfd_get_section_flags (nbfd, sec) & (SEC_ALLOC|SEC_LOAD)) != 0) + if ((bfd_get_section_flags (nbfd.get (), sec) & (SEC_ALLOC|SEC_LOAD)) != 0) { /* We assume that these virtual addresses are absolute, and do not treat them as offsets. */ - sai->other[i].addr = bfd_get_section_vma (nbfd, sec); - sai->other[i].name = xstrdup (bfd_get_section_name (nbfd, sec)); + sai->other[i].addr = bfd_get_section_vma (nbfd.get (), sec); + sai->other[i].name = xstrdup (bfd_get_section_name (nbfd.get (), sec)); sai->other[i].sectindex = sec->index; ++i; } sai->num_sections = i; /* This call does not take ownership of SAI. */ - make_cleanup_bfd_unref (nbfd); - objfile = symbol_file_add_from_bfd (nbfd, bfd_get_filename (nbfd), 0, sai, + objfile = symbol_file_add_from_bfd (nbfd.get (), + bfd_get_filename (nbfd.get ()), 0, sai, OBJF_SHARED | OBJF_NOT_FILENAME, NULL); do_cleanups (old_cleanups); |