Minor tweaks to make COFF code support both new and old style linker.
authorIan Lance Taylor <ian@airs.com>
Tue, 6 Sep 1994 20:40:37 +0000 (20:40 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 6 Sep 1994 20:40:37 +0000 (20:40 +0000)
bfd/ChangeLog
bfd/coffcode.h

index fc4a4f7b0bc715327a78dbb522d2897f09b645ec..c3e16fdd6a1e5e7dd1cb84b39c7584310fb896bd 100644 (file)
@@ -31,7 +31,8 @@ Tue Sep  6 14:51:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
        is positive, since it always is.  Remove use of pad, which is
        always zero.  Check obj_raw_syment_count, not bfd_get_symcount,
        for the number of symbols, but only write them out if
-       bfd_get_symcount is non-zero.
+       bfd_get_symcount is non-zero.  Don't check obj_raw_syment_count
+       until after coff_write_symbols is called.
        (coff_slurp_symbol_table): Use obj_raw_syment_count, not
        bfd_get_symcount for the number of symbols.  Don't set
        obj_conv_table_size.
@@ -48,7 +49,8 @@ Tue Sep  6 14:51:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)
        and obj_conv_table_size here.
        (coff_count_linenumbers): Reindent.  If bfd_get_symcount is zero,
        add up the line numbers from the sections.
-       (coff_write_symbols): Don't set bfd_get_symcount.
+       (coff_write_symbols): Set obj_raw_syment_count, not
+       bfd_get_symcount.
        (coff_pointerize_aux): Don't pointerize a nonpositive x_endndx
        field.
        (coff_get_normalized_symtab): Use obj_raw_syment_count, not
index f1729dda1d6e2bd7eda963db2dc68b4e34db827d..4c3850d7134eba59c6518055570fa4c84620ed81 100644 (file)
@@ -1741,11 +1741,6 @@ coff_write_object_contents (abfd)
     */
   internal_f.f_timdat = 0;
 
-  if (obj_raw_syment_count (abfd) != 0)
-    internal_f.f_symptr = sym_base;
-  else
-    internal_f.f_symptr = 0;
-
   internal_f.f_flags = 0;
 
   if (abfd->flags & EXEC_P)
@@ -1757,8 +1752,6 @@ coff_write_object_contents (abfd)
     internal_f.f_flags |= F_RELFLG;
   if (!haslinno)
     internal_f.f_flags |= F_LNNO;
-  if (obj_raw_syment_count (abfd) == 0)
-    internal_f.f_flags |= F_LSYMS;
   if (abfd->flags & EXEC_P)
     internal_f.f_flags |= F_EXEC;
 
@@ -1866,6 +1859,18 @@ coff_write_object_contents (abfd)
       if (! coff_write_relocs (abfd))
        return false;
     }
+
+  /* If bfd_get_symcount (abfd) != 0, then we are not using the COFF
+     backend linker, and obj_raw_syment_count is not valid until after
+     coff_write_symbols is called.  */
+  if (obj_raw_syment_count (abfd) != 0)
+    internal_f.f_symptr = sym_base;
+  else
+    {
+      internal_f.f_symptr = 0;
+      internal_f.f_flags |= F_LSYMS;
+    }
+
   if (text_sec)
     {
       internal_a.tsize = bfd_get_section_size_before_reloc (text_sec);