2000-11-27 Philip Blundell <pb@futuretv.com>
authorPhil Blundell <philb@gnu.org>
Mon, 27 Nov 2000 12:45:17 +0000 (12:45 +0000)
committerPhil Blundell <philb@gnu.org>
Mon, 27 Nov 2000 12:45:17 +0000 (12:45 +0000)
* libcoff-in.h (coff_tdata): Add `strings_written' flag.
(obj_coff_strings_written): New accessor macro for above.
* libcoff.h: Regenerate.
* cofflink.c (_bfd_coff_final_link): Say that we wrote the
strings.
* coffcode.h (coff_write_object_contents): No need to write out
the string table if it's already been done.

bfd/ChangeLog
bfd/coffcode.h
bfd/cofflink.c
bfd/libcoff-in.h
bfd/libcoff.h

index 99de567..9c7572c 100644 (file)
@@ -1,3 +1,13 @@
+2000-11-27  Philip Blundell  <pb@futuretv.com>
+
+       * libcoff-in.h (coff_tdata): Add `strings_written' flag.
+       (obj_coff_strings_written): New accessor macro for above.
+       * libcoff.h: Regenerate.
+       * cofflink.c (_bfd_coff_final_link): Say that we wrote the
+       strings.
+       * coffcode.h (coff_write_object_contents): No need to write out
+       the string table if it's already been done.
+
 2000-11-22  Philip Blundell  <pb@futuretv.com>
 
        * cofflink.c (_bfd_coff_generic_relocate_section): Don't object to 
index c5025fb..a5721e0 100644 (file)
@@ -3798,7 +3798,7 @@ coff_write_object_contents (abfd)
        return false;
     }
 #ifdef COFF_LONG_SECTION_NAMES
-  else if (long_section_names)
+  else if (long_section_names && ! obj_coff_strings_written (abfd))
     {
       /* If we have long section names we have to write out the string
          table even if there are no symbols.  */
index 05c0689..4e16f64 100644 (file)
@@ -1102,6 +1102,8 @@ _bfd_coff_final_link (abfd, info)
 
       if (! _bfd_stringtab_emit (abfd, finfo.strtab))
        return false;
+
+      obj_coff_strings_written (abfd) = true;
     }
 
   _bfd_stringtab_free (finfo.strtab);
index 3fae93c..544e9e1 100644 (file)
@@ -43,6 +43,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define obj_coff_strings(bfd)  (coff_data (bfd)->strings)
 #define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings)
 #define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes)
+#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
 
 #define obj_coff_local_toc_table(bfd) (coff_data(bfd)->local_toc_sym_map)
 
@@ -83,6 +84,8 @@ typedef struct coff_tdata
   char *strings;
   /* If this is true, the strings may not be freed.  */
   boolean keep_strings;
+  /* If this is true, the strings have been written out already.  */
+  boolean strings_written;
 
   /* is this a PE format coff file */
   int pe;
index 9cf52e8..e66b1cd 100644 (file)
@@ -43,6 +43,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define obj_coff_strings(bfd)  (coff_data (bfd)->strings)
 #define obj_coff_keep_strings(bfd) (coff_data (bfd)->keep_strings)
 #define obj_coff_sym_hashes(bfd) (coff_data (bfd)->sym_hashes)
+#define obj_coff_strings_written(bfd) (coff_data (bfd)->strings_written)
 
 #define obj_coff_local_toc_table(bfd) (coff_data(bfd)->local_toc_sym_map)
 
@@ -83,6 +84,8 @@ typedef struct coff_tdata
   char *strings;
   /* If this is true, the strings may not be freed.  */
   boolean keep_strings;
+  /* If this is true, the strings have been written out already.  */
+  boolean strings_written;
 
   /* is this a PE format coff file */
   int pe;