]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 19 Dec 2011 22:28:22 +0000 (22:28 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 19 Dec 2011 22:28:22 +0000 (22:28 +0000)
* 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.

gdb/ChangeLog
gdb/symfile.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/reread.exp
gdb/testsuite/gdb.base/reread2.c

index 6b4b889471bb48b66cf935c6071cf94f7c9ef372..98f778989e38ff1c22f5e1f1957ffa9dfaa659a2 100644 (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
index 72080acdf8dcbb53bd7f63d18bcfc072347063c8..e9c290c4da864132b678efe09fcbd3ae40bc3a8c 100644 (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)
index c4e0f3c03ecc68b10fe89bac167df480ef2113f1..5e6f94912e9df313002df19f17f82b5973050e10 100644 (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-16  Phil Muldoon  <pmuldoon@redhat.com>
 
        * gdb.python/py-function.exp: Change "on" to "full" for
index 291de546e81f416f5d0012dc17054c9ac0437478..dca25f89b5e8a4754915ef43ff424590d719bee9 100644 (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
 }
index fd9f7b7ad64be423a721543b10ab8a6814ffa0a8..6b630f72c6fc3476a773a906d1ff692d1a072efe 100644 (file)
@@ -19,3 +19,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