* symfile.c (reread_symbols): Move free_objfile_separate_debug,
	preserve_values, sym_finish and clear_objfile_data calls before BFD
	close.  Move free_objfile_separate_debug as the very first call.  New
	comment on the ordering.

gdb/testsuite/
	* gdb.base/reread.exp: If srcfile2 fails to build retry it with
	-DNO_SECTIONS.
	* gdb.base/reread2.c <!NO_SECTIONS>: New sections block.
This commit is contained in:
Jan Kratochvil 2011-12-19 22:20:07 +00:00
parent 8de7d199bb
commit f6eeced03d
5 changed files with 49 additions and 22 deletions

View File

@ -1,3 +1,10 @@
2011-12-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* symfile.c (reread_symbols): Move free_objfile_separate_debug,
preserve_values, sym_finish and clear_objfile_data calls before BFD
close. Move free_objfile_separate_debug as the very first call. New
comment on the ordering.
2011-12-19 Ulrich Weigand <uweigand@de.ibm.com>
* s390-tdep.c (s390_push_dummy_call): Set addressing mode bit

View File

@ -2446,6 +2446,29 @@ reread_symbols (void)
exec_file_attach (bfd_get_filename (objfile->obfd), 0);
}
/* Keep the calls order approx. the same as in free_objfile. */
/* Free the separate debug objfiles. It will be
automatically recreated by sym_read. */
free_objfile_separate_debug (objfile);
/* Remove any references to this objfile in the global
value lists. */
preserve_values (objfile);
/* Nuke all the state that we will re-read. Much of the following
code which sets things to NULL really is necessary to tell
other parts of GDB that there is nothing currently there.
Try to keep the freeing order compatible with free_objfile. */
if (objfile->sf != NULL)
{
(*objfile->sf->sym_finish) (objfile);
}
clear_objfile_data (objfile);
/* Clean up any state BFD has sitting around. We don't need
to close the descriptor but BFD lacks a way of closing the
BFD without closing the descriptor. */
@ -2471,27 +2494,6 @@ reread_symbols (void)
memcpy (offsets, objfile->section_offsets,
SIZEOF_N_SECTION_OFFSETS (num_offsets));
/* Remove any references to this objfile in the global
value lists. */
preserve_values (objfile);
/* Nuke all the state that we will re-read. Much of the following
code which sets things to NULL really is necessary to tell
other parts of GDB that there is nothing currently there.
Try to keep the freeing order compatible with free_objfile. */
if (objfile->sf != NULL)
{
(*objfile->sf->sym_finish) (objfile);
}
clear_objfile_data (objfile);
/* Free the separate debug objfiles. It will be
automatically recreated by sym_read. */
free_objfile_separate_debug (objfile);
/* FIXME: Do we have to free a whole linked list, or is this
enough? */
if (objfile->global_psymbols.list)

View File

@ -1,3 +1,9 @@
2011-12-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/reread.exp: If srcfile2 fails to build retry it with
-DNO_SECTIONS.
* gdb.base/reread2.c <!NO_SECTIONS>: New sections block.
2011-12-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.cp/ptype-cv-cp.exp (ptype v_volatile_const_my_int): Make

View File

@ -38,7 +38,8 @@ set testfile2 "reread2"
set srcfile2 ${testfile2}.c
set binfile2 ${objdir}/${subdir}/${testfile2}$EXEEXT
if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings}] != "" } {
if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings}] != ""
&& [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug nowarnings additional_flags=-DNO_SECTIONS}] != ""} {
untested reread.exp
return -1
}

View File

@ -15,3 +15,14 @@ int main()
foo();
return 0;
}
/* Ensure the new file will have more sections. It may exploit code not
updating its SECTION_COUNT on reread_symbols. */
#ifndef NO_SECTIONS
# define VAR0(n) __attribute__ ((section ("sect" #n))) int var##n;
# define VAR1(n) VAR0 (n ## 0) VAR0(n ## 1) VAR0(n ## 2) VAR0(n ## 3)
# define VAR2(n) VAR1 (n ## 0) VAR1(n ## 1) VAR1(n ## 2) VAR1(n ## 3)
# define VAR3(n) VAR2 (n ## 0) VAR2(n ## 1) VAR2(n ## 2) VAR2(n ## 3)
VAR3 (0)
#endif