diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/symfile.c | 44 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/reread.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/reread2.c | 11 |
5 files changed, 49 insertions, 22 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 16748d1f9e9..7c8d38f0caa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 diff --git a/gdb/symfile.c b/gdb/symfile.c index 72080acdf8d..e9c290c4da8 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -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) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index bca2d34f341..e815b07dbb2 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,11 @@ 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 PR gcc/45997 XFAIL conditional for gcc <= 4.5. * gdb.python/py-type.exp (python print ttype.template_argument(2)): diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp index 291de546e81..dca25f89b5e 100644 --- a/gdb/testsuite/gdb.base/reread.exp +++ b/gdb/testsuite/gdb.base/reread.exp @@ -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 } diff --git a/gdb/testsuite/gdb.base/reread2.c b/gdb/testsuite/gdb.base/reread2.c index 181616c7aca..f45f29e3c0e 100644 --- a/gdb/testsuite/gdb.base/reread2.c +++ b/gdb/testsuite/gdb.base/reread2.c @@ -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 |