Fixed bug where stringtable size wasn't being swapped.
authorSteve Chamberlain <steve@cygnus>
Thu, 8 Aug 1991 23:48:27 +0000 (23:48 +0000)
committerSteve Chamberlain <steve@cygnus>
Thu, 8 Aug 1991 23:48:27 +0000 (23:48 +0000)
bfd/coffcode.h

index d020ee8ef9638ec272877e73df032692dce44f21..117a04fe64eb20325d910dd9fb40d370a9842327 100644 (file)
@@ -1,22 +1,22 @@
-/* Support for Intel 960 COFF and Motorola 88k BCS COFF (and maybe others) */
+/* Support for Intel 960 COFF and Motorola 88k BCS COFF (and maybe others)
+   Copyright (C) 1990-1991 Free Software Foundation, Inc.
+   Written by Cygnus Support.
 
-/* Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+This file is part of BFD, the Binary File Descriptor library.
 
-This file is part of BFD, the Binary File Diddler.
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
 
-BFD is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 1, or (at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
-BFD is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License along with
-BFD; see the file COPYING.  If not, write to the Free Software Foundation,
-675 Mass Ave, Cambridge, MA 02139, USA.
-*/
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /*doc*
 @section coff backends
@@ -238,8 +238,6 @@ $ } coff_symbol_type;
 /* $Id$ */
 /* Most of this hacked by Steve Chamberlain, steve@cygnus.com */
 
-#include "archures.h"          /* Machine architectures and types */
-
 /* Align an address upward to a boundary, expressed as a number of bytes.
    E.g. align to an 8-byte boundary with argument of 8.  */
 #define ALIGN(this, boundary) \
@@ -448,6 +446,7 @@ DEFUN(bfd_swap_filehdr_out,(abfd, filehdr_in, filehdr_out),
 }
 
 
+#ifndef NO_COFF_SYMBOLS
 
 static void 
 DEFUN(coff_swap_sym_in,(abfd, ext1, in1),
@@ -623,6 +622,10 @@ DEFUN(coff_swap_aux_out,(abfd, in, type, class, ext),
   }
 }
 
+#endif /* NO_COFF_SYMBOLS */
+
+#ifndef NO_COFF_LINENOS
+
 static void
 DEFUN(coff_swap_lineno_in,(abfd, ext1, in1),
       bfd            *abfd AND
@@ -654,7 +657,7 @@ DEFUN(coff_swap_lineno_out,(abfd, in, ext),
 #endif
 }
 
-
+#endif /* NO_COFF_LINENOS */
 
 
 static void 
@@ -1072,30 +1075,7 @@ DEFUN(coff_object_p,(abfd),
 
 
 
-
-/* 
-Takes a bfd and a symbol, returns a pointer to the coff specific area
-of the symbol if there is one.
-*/
-static coff_symbol_type *
-DEFUN(coff_symbol_from,(abfd, symbol),
-      bfd            *abfd AND
-      asymbol        *symbol)
-{
-  if (symbol->the_bfd->xvec->flavour != bfd_target_coff_flavour_enum) 
-    return (coff_symbol_type *)NULL;
-    
-  if (symbol->the_bfd->tdata == (PTR)NULL)
-    return (coff_symbol_type *)NULL;
-    
-  return  (coff_symbol_type *) symbol;
-}
-
-
-
-
-
-
+#ifndef NO_COFF_LINENOS
 
 static void 
 DEFUN(coff_count_linenumbers,(abfd),
@@ -1134,6 +1114,28 @@ DEFUN(coff_count_linenumbers,(abfd),
   }
 }
 
+#endif /* NO_COFF_LINENOS */
+
+#ifndef NO_COFF_SYMBOLS
+
+/* 
+Takes a bfd and a symbol, returns a pointer to the coff specific area
+of the symbol if there is one.
+*/
+static coff_symbol_type *
+DEFUN(coff_symbol_from,(abfd, symbol),
+      bfd            *abfd AND
+      asymbol        *symbol)
+{
+  if (symbol->the_bfd->xvec->flavour != bfd_target_coff_flavour_enum) 
+    return (coff_symbol_type *)NULL;
+    
+  if (symbol->the_bfd->tdata == (PTR)NULL)
+    return (coff_symbol_type *)NULL;
+    
+  return  (coff_symbol_type *) symbol;
+}
+
 
 
 static void
@@ -1666,15 +1668,17 @@ DEFUN(coff_write_symbols,(abfd),
   if (string_size != 0) 
    {
      unsigned int    size = string_size + 4;
-     size =  size;
-     bfd_write((PTR) &size, 1, sizeof(size), abfd);
+     char buffer[4];
+     bfd_h_put_32(abfd, size, buffer);
+     bfd_write((PTR) buffer, 1, sizeof(buffer), abfd);
      for (p = abfd->outsymbols, i = 0; i < limit; i++, p++) 
         {
           asymbol        *q = *p;
           size_t          name_length = strlen(q->name);
           int maxlen;
           coff_symbol_type*       c_symbol = coff_symbol_from(abfd, q);
-          maxlen = ((c_symbol != NULL && c_symbol->native != NULL) && (c_symbol->native->u.syment.n_sclass == C_FILE)) ?
+          maxlen = ((c_symbol != NULL && c_symbol->native != NULL) &&
+                    (c_symbol->native->u.syment.n_sclass == C_FILE)) ?
             FILNMLEN : SYMNMLEN;
        
           if (name_length > maxlen) {
@@ -1694,6 +1698,8 @@ DEFUN(coff_write_symbols,(abfd),
       
   }
 }
+#endif /* NO_COFF_SYMBOLS */
+
 /*doc*
 @subsubsection Writing Relocations
 To write a relocations, all the back end does is step though the
@@ -1738,6 +1744,8 @@ DEFUN(coff_write_relocs,(abfd),
   }
 }
 
+#ifndef NO_COFF_LINENOS
+
 static void 
 DEFUN(coff_write_linenumbers,(abfd),
       bfd            *abfd)
@@ -1775,6 +1783,15 @@ DEFUN(coff_write_linenumbers,(abfd),
   }
 }
 
+static alent   *
+DEFUN(coff_get_lineno,(ignore_abfd, symbol),
+      bfd            *ignore_abfd AND
+      asymbol        *symbol)
+{
+  return coffsymbol(symbol)->lineno;
+}
+
+#endif /* NO_COFF_LINENOS */
 
 static asymbol *
 coff_make_empty_symbol(abfd)
@@ -1791,6 +1808,8 @@ bfd            *abfd;
   return &new->symbol;
 }
 
+#ifndef NO_COFF_SYMBOLS
+
 static void 
 DEFUN(coff_print_symbol,(ignore_abfd, filep, symbol, how),
       bfd            *ignore_abfd AND
@@ -1825,18 +1844,11 @@ DEFUN(coff_print_symbol,(ignore_abfd, filep, symbol, how),
   }
 }
 
-static alent   *
-DEFUN(coff_get_lineno,(ignore_abfd, symbol),
-      bfd            *ignore_abfd AND
-      asymbol        *symbol)
-{
-  return coffsymbol(symbol)->lineno;
-}
+#endif /* NO_COFF_SYMBOLS */
+
+/* Set flags and magic number of a coff file from architecture and machine
+   type.  Result is true if we can represent the arch&type, false if not.  */
 
-/*
-Set flags and magic number of a coff file from architecture and machine
-type.  Result is true if we can represent the arch&type, false if not.
-*/
 static          boolean
 DEFUN(coff_set_flags,(abfd, magicp, flagsp),
       bfd            *abfd AND
@@ -2037,14 +2049,18 @@ DEFUN(coff_write_object_contents,(abfd),
   /* Make a pass through the symbol table to count line number entries and
      put them into the correct asections */
     
+#ifndef NO_COFF_LINENOS
   coff_count_linenumbers(abfd);
+#endif
   data_base = scn_base;
     
   /* Work out the size of the reloc and linno areas */
     
   for (current = abfd->sections; current != NULL; current = current->next) {
     reloc_size += current->reloc_count * RELSZ;
+#ifndef NO_COFF_LINENOS
     lnno_size += current->lineno_count * LINESZ;
+#endif
     data_base += SCNHSZ;
   }
     
@@ -2056,7 +2072,9 @@ DEFUN(coff_write_object_contents,(abfd),
     if (current->lineno_count) {
       current->line_filepos = lineno_base;
       current->moving_line_filepos = lineno_base;
+#ifndef NO_COFF_LINENOS
       lineno_base += current->lineno_count * LINESZ;
+#endif
     }
     else {
       current->line_filepos = 0;
@@ -2231,6 +2249,7 @@ DEFUN(coff_write_object_contents,(abfd),
   /* Now should write relocs, strings, syms */
   obj_sym_filepos(abfd) = sym_base;
 
+#ifndef NO_COFF_SYMBOLS
   if (bfd_get_symcount(abfd) != 0) {
     coff_renumber_symbols(abfd);
     coff_mangle_symbols(abfd);
@@ -2238,6 +2257,7 @@ DEFUN(coff_write_object_contents,(abfd),
     coff_write_linenumbers(abfd);
     coff_write_relocs(abfd);
   }
+#endif /* NO_COFF_SYMBOLS */
   if (text_sec) {
     internal_a.tsize = text_sec->size;
     internal_a.text_start =text_sec->size ? text_sec->vma : 0;
@@ -2269,6 +2289,8 @@ DEFUN(coff_write_object_contents,(abfd),
   return true;
 }
 
+#ifndef NO_COFF_SYMBOLS
+
 /*
 this function transforms the offsets into the symbol table into
 pointers to syments.
@@ -2293,14 +2315,13 @@ combined_entry_type *auxent)
       auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l;
     auxent->fix_end = 1;
   }
-if (auxent->u.auxent.x_sym.x_tagndx.l != 0) {
-  auxent->u.auxent.x_sym.x_tagndx.p = table_base +  auxent->u.auxent.x_sym.x_tagndx.l;
-  auxent->fix_tag = 1;
+  if (auxent->u.auxent.x_sym.x_tagndx.l != 0) {
+    auxent->u.auxent.x_sym.x_tagndx.p = table_base +  auxent->u.auxent.x_sym.x_tagndx.l;
+    auxent->fix_tag = 1;
+  }
 }
 
-
-
-}
+#endif /* NO_COFF_SYMBOLS */
 
 static          boolean
 DEFUN(coff_set_section_contents,(abfd, section, location, offset, count),
@@ -2367,6 +2388,7 @@ buy_and_read(abfd, where, seek_direction, size)
 }                              /* buy_and_read() */
 
 
+#ifndef NO_COFF_SYMBOLS
 
 static char *
 DEFUN(build_string_table,(abfd),
@@ -2545,6 +2567,8 @@ bfd            *abfd)
   return (internal);
 }                              /* get_normalized_symtab() */
 
+#endif /* NO_COFF_SYMBOLS */
+
 static
 struct sec *
 DEFUN(section_from_bfd_index,(abfd, index),
@@ -2561,7 +2585,7 @@ DEFUN(section_from_bfd_index,(abfd, index),
   return 0;
 }
 
-
+#ifndef NO_COFF_LINENOS
 
 /*doc*
 @subsubsection Reading Linenumbers
@@ -2636,6 +2660,10 @@ asection       *asect;
     return true;
   }                            /* coff_slurp_line_table() */
 
+#endif /* NO_COFF_LINENOS */
+
+#ifndef NO_COFF_LINENOS
+
 static          boolean
 DEFUN(coff_slurp_symbol_table,(abfd),
       bfd            *abfd)
@@ -2862,6 +2890,8 @@ asymbol       **alocation;
     return bfd_get_symcount(abfd);
   }
 
+#endif /* NO_COFF_SYMBOLS */
+
 static unsigned int
 coff_get_reloc_upper_bound(abfd, asect)
 bfd            *abfd;
@@ -2913,8 +2943,10 @@ DEFUN(coff_slurp_reloc_table,(abfd, asect, symbols),
       return true;
     if (asect->reloc_count == 0)
       return true;
+#ifndef NO_COFF_SYMBOLS
     if (!coff_slurp_symbol_table(abfd))
       return false;
+#endif
     native_relocs =
       (RELOC *) buy_and_read(abfd,
                             asect->rel_filepos,
@@ -3044,6 +3076,7 @@ asymbol       **symbols;
     return section->reloc_count;
   }
 
+#ifndef NO_COFF_SYMBOLS
 
 /*
 provided a bfd, a section and an offset into the section, calculate and
@@ -3165,6 +3198,8 @@ bfd *abfd;
   }
 #endif
 
+#endif /* NO_COFF_SYMBOLS */
+
 
 static int 
 DEFUN(coff_sizeof_headers,(abfd, reloc),