* symfile-mem.c (symbol_file_add_from_memory): Call do_cleanups.
* solib-svr4.c (open_symbol_file_object): Call do_cleanups on all return paths. Defer final do_cleanups until last return. * arm-tdep.c (arm_exidx_new_objfile): Make null cleanup after early return.
This commit is contained in:
parent
4727bad393
commit
3bb47e8bce
4 changed files with 31 additions and 9 deletions
|
@ -1,3 +1,11 @@
|
|||
2011-06-30 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* symfile-mem.c (symbol_file_add_from_memory): Call do_cleanups.
|
||||
* solib-svr4.c (open_symbol_file_object): Call do_cleanups on all
|
||||
return paths. Defer final do_cleanups until last return.
|
||||
* arm-tdep.c (arm_exidx_new_objfile): Make null cleanup after
|
||||
early return.
|
||||
|
||||
2011-06-30 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* Makefile.in (SUBDIR_MI_CFLAGS): Don't add -DMI_OUT=1.
|
||||
|
|
|
@ -2211,7 +2211,7 @@ arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
|
|||
static void
|
||||
arm_exidx_new_objfile (struct objfile *objfile)
|
||||
{
|
||||
struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
|
||||
struct cleanup *cleanups;
|
||||
struct arm_exidx_data *data;
|
||||
asection *exidx, *extab;
|
||||
bfd_vma exidx_vma = 0, extab_vma = 0;
|
||||
|
@ -2222,6 +2222,7 @@ arm_exidx_new_objfile (struct objfile *objfile)
|
|||
/* If we've already touched this file, do nothing. */
|
||||
if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
|
||||
return;
|
||||
cleanups = make_cleanup (null_cleanup, NULL);
|
||||
|
||||
/* Read contents of exception table and index. */
|
||||
exidx = bfd_get_section_by_name (objfile->obfd, ".ARM.exidx");
|
||||
|
|
|
@ -1021,17 +1021,26 @@ open_symbol_file_object (void *from_ttyp)
|
|||
|
||||
if (symfile_objfile)
|
||||
if (!query (_("Attempt to reload symbols from process? ")))
|
||||
return 0;
|
||||
{
|
||||
do_cleanups (cleanups);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Always locate the debug struct, in case it has moved. */
|
||||
info->debug_base = 0;
|
||||
if (locate_base (info) == 0)
|
||||
return 0; /* failed somehow... */
|
||||
{
|
||||
do_cleanups (cleanups);
|
||||
return 0; /* failed somehow... */
|
||||
}
|
||||
|
||||
/* First link map member should be the executable. */
|
||||
lm = solib_svr4_r_map (info);
|
||||
if (lm == 0)
|
||||
return 0; /* failed somehow... */
|
||||
{
|
||||
do_cleanups (cleanups);
|
||||
return 0; /* failed somehow... */
|
||||
}
|
||||
|
||||
/* Read address of name from target memory to GDB. */
|
||||
read_memory (lm + lmo->l_name_offset, l_name_buf, l_name_size);
|
||||
|
@ -1039,11 +1048,11 @@ open_symbol_file_object (void *from_ttyp)
|
|||
/* Convert the address to host format. */
|
||||
l_name = extract_typed_address (l_name_buf, ptr_type);
|
||||
|
||||
/* Free l_name_buf. */
|
||||
do_cleanups (cleanups);
|
||||
|
||||
if (l_name == 0)
|
||||
return 0; /* No filename. */
|
||||
{
|
||||
do_cleanups (cleanups);
|
||||
return 0; /* No filename. */
|
||||
}
|
||||
|
||||
/* Now fetch the filename from target memory. */
|
||||
target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||
|
@ -1053,12 +1062,14 @@ open_symbol_file_object (void *from_ttyp)
|
|||
{
|
||||
warning (_("failed to read exec filename from attached file: %s"),
|
||||
safe_strerror (errcode));
|
||||
do_cleanups (cleanups);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Have a pathname: read the symbol file. */
|
||||
symbol_file_add_main (filename, from_tty);
|
||||
|
||||
do_cleanups (cleanups);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
|
|||
bfd_vma loadbase;
|
||||
struct section_addr_info *sai;
|
||||
unsigned int i;
|
||||
struct cleanup *cleanup;
|
||||
|
||||
if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
|
||||
error (_("add-symbol-file-from-memory not supported for this target"));
|
||||
|
@ -97,7 +98,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
|
|||
}
|
||||
|
||||
sai = alloc_section_addr_info (bfd_count_sections (nbfd));
|
||||
make_cleanup (xfree, sai);
|
||||
cleanup = make_cleanup (xfree, sai);
|
||||
i = 0;
|
||||
for (sec = nbfd->sections; sec != NULL; sec = sec->next)
|
||||
if ((bfd_get_section_flags (nbfd, sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
|
||||
|
@ -114,6 +115,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
|
|||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
|
||||
do_cleanups (cleanup);
|
||||
return objf;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue