PR symtab/13208
	* jit.c (jit_register_code): Remove unused variable my_cleanups.  Check
	for NULL from bfd_open_from_target_memory.  Fix ownership of NBFD and
	SAI.
This commit is contained in:
Jan Kratochvil 2011-10-28 22:40:58 +00:00
parent 4323feccfd
commit 4dfb236562
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2011-10-28 Jan Kratochvil <jan.kratochvil@redhat.com>
PR symtab/13208
* jit.c (jit_register_code): Remove unused variable my_cleanups. Check
for NULL from bfd_open_from_target_memory. Fix ownership of NBFD and
SAI.
2011-10-28 Pedro Alves <pedro@codesourcery.com> 2011-10-28 Pedro Alves <pedro@codesourcery.com>
* linux-nat.c (linux_nat_filter_event): Remove `options' * linux-nat.c (linux_nat_filter_event): Remove `options'

View File

@ -253,7 +253,7 @@ jit_register_code (struct gdbarch *gdbarch,
struct section_addr_info *sai; struct section_addr_info *sai;
struct bfd_section *sec; struct bfd_section *sec;
struct objfile *objfile; struct objfile *objfile;
struct cleanup *old_cleanups, *my_cleanups; struct cleanup *old_cleanups;
int i; int i;
const struct bfd_arch_info *b; const struct bfd_arch_info *b;
CORE_ADDR *entry_addr_ptr; CORE_ADDR *entry_addr_ptr;
@ -267,7 +267,11 @@ jit_register_code (struct gdbarch *gdbarch,
nbfd = bfd_open_from_target_memory (code_entry->symfile_addr, nbfd = bfd_open_from_target_memory (code_entry->symfile_addr,
code_entry->symfile_size, gnutarget); code_entry->symfile_size, gnutarget);
old_cleanups = make_cleanup_bfd_close (nbfd); if (nbfd == NULL)
{
puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
return;
}
/* Check the format. NOTE: This initializes important data that GDB uses! /* Check the format. NOTE: This initializes important data that GDB uses!
We would segfault later without this line. */ We would segfault later without this line. */
@ -275,7 +279,7 @@ jit_register_code (struct gdbarch *gdbarch,
{ {
printf_unfiltered (_("\ printf_unfiltered (_("\
JITed symbol file is not an object file, ignoring it.\n")); JITed symbol file is not an object file, ignoring it.\n"));
do_cleanups (old_cleanups); bfd_close (nbfd);
return; return;
} }
@ -290,7 +294,7 @@ JITed symbol file is not an object file, ignoring it.\n"));
file is generated by the JIT at runtime, it should all of the absolute file is generated by the JIT at runtime, it should all of the absolute
addresses that we care about. */ addresses that we care about. */
sai = alloc_section_addr_info (bfd_count_sections (nbfd)); sai = alloc_section_addr_info (bfd_count_sections (nbfd));
make_cleanup_free_section_addr_info (sai); old_cleanups = make_cleanup_free_section_addr_info (sai);
i = 0; i = 0;
for (sec = nbfd->sections; sec != NULL; sec = sec->next) 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, sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
@ -303,7 +307,7 @@ JITed symbol file is not an object file, ignoring it.\n"));
++i; ++i;
} }
/* This call takes ownership of sai. */ /* This call takes ownership of NBFD. It does not take ownership of SAI. */
objfile = symbol_file_add_from_bfd (nbfd, 0, sai, OBJF_SHARED, NULL); objfile = symbol_file_add_from_bfd (nbfd, 0, sai, OBJF_SHARED, NULL);
/* Remember a mapping from entry_addr to objfile. */ /* Remember a mapping from entry_addr to objfile. */
@ -311,7 +315,7 @@ JITed symbol file is not an object file, ignoring it.\n"));
*entry_addr_ptr = entry_addr; *entry_addr_ptr = entry_addr;
set_objfile_data (objfile, jit_objfile_data, entry_addr_ptr); set_objfile_data (objfile, jit_objfile_data, entry_addr_ptr);
discard_cleanups (old_cleanups); do_cleanups (old_cleanups);
} }
/* This function unregisters JITed code and frees the corresponding /* This function unregisters JITed code and frees the corresponding