* libecoff.h (ecoff_data_type): Add linker field.
authorIan Lance Taylor <ian@airs.com>
Mon, 6 Jun 1994 17:44:34 +0000 (17:44 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 6 Jun 1994 17:44:34 +0000 (17:44 +0000)
* ecoff.c (ecoff_write_object_contents): Check new tdata linker
field, rather than outsymbols being non-NULL, to decide whether to
output the symbols and relocs.
(ecoff_bfd_final_link): Set new tdata linker field to true.

bfd/ChangeLog
bfd/ecoff.c
bfd/libecoff.h

index c5658916ab8b0379928ecac5b8e868d31af8208b..f5eb440b40f4ed01c1e87ba558a956245795041e 100644 (file)
@@ -1,5 +1,11 @@
 Mon Jun  6 10:57:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
+       * libecoff.h (ecoff_data_type): Add linker field.
+       * ecoff.c (ecoff_write_object_contents): Check new tdata linker
+       field, rather than outsymbols being non-NULL, to decide whether to
+       output the symbols and relocs.
+       (ecoff_bfd_final_link): Set new tdata linker field to true.
+
        * ecoff.c (ecoff_bfd_copy_private_bfd_data): Don't try to copy
        data to a non-ECOFF file.
 
index 64661cdd18321d3fd46e0d4d43f121f906f1af39..2555c0cbd920d1da6b11e84936c39633788c1e5c 100644 (file)
@@ -2918,11 +2918,10 @@ ecoff_write_object_contents (abfd)
     goto error_return;
 
   /* Build the external symbol information.  This must be done before
-     writing out the relocs so that we know the symbol indices.  The
-     condition checks makes sure this object was not created by
-     ecoff_bfd_final_link, since if it was we do not want to tamper
-     with the external symbols.  */
-  if (bfd_get_outsymbols (abfd) != (asymbol **) NULL)
+     writing out the relocs so that we know the symbol indices.  We
+     don't do this if this BFD was created by the backend linker,
+     since it will have already handled the symbols and relocs.  */
+  if (! ecoff_data (abfd)->linker)
     {
       symhdr->iextMax = 0;
       symhdr->issExtMax = 0;
@@ -4388,6 +4387,8 @@ ecoff_bfd_final_link (abfd, info)
 
   bfd_get_symcount (abfd) = symhdr->iextMax + symhdr->isymMax;
 
+  ecoff_data (abfd)->linker = true;
+
   return true;
 }
 
index a017d6e210dbdd46b61e058e0b57816768eaa8c8..0d20c4ba746f5502954f747cc4f2f70c223f6f5b 100644 (file)
@@ -121,6 +121,9 @@ typedef struct ecoff_tdata
      linking.  */
   asection **symndx_to_section;
 
+  /* True if this BFD was written by the backend linker.  */
+  boolean linker;
+
 } ecoff_data_type;
 
 /* Each canonical asymbol really looks like this.  */
@@ -233,7 +236,7 @@ extern boolean ecoff_get_section_contents PARAMS ((bfd *abfd,
                                                   file_ptr offset,
                                                   bfd_size_type count));
 
-#define ecoff_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
+extern boolean ecoff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *));
 #define ecoff_bfd_copy_private_section_data \
   _bfd_generic_bfd_copy_private_section_data