Fixed xgettext invocation in .Sanitize files
[binutils-gdb.git] / bfd / libaout.h
index fc4e3c5d27b58f70fcc0a2131a95733175c02b55..a08af0a11fa5f06b3ee08c988fd0b28c15b914c8 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end data structures for a.out (and similar) files.
-   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
+   Copyright 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 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.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef LIBAOUT_H
 #define LIBAOUT_H
@@ -127,7 +127,9 @@ struct aout_backend_data
 
   /* Callback from the add symbols phase of the linker code to handle
      a dynamic object.  */
-  boolean (*add_dynamic_symbols) PARAMS ((bfd *, struct bfd_link_info *));
+  boolean (*add_dynamic_symbols) PARAMS ((bfd *, struct bfd_link_info *,
+                                         struct external_nlist **,
+                                         bfd_size_type *, char **));
 
   /* Callback from the add symbols phase of the linker code to handle
      adding a single symbol to the global linker hash table.  */
@@ -145,14 +147,17 @@ struct aout_backend_data
   boolean (*write_dynamic_symbol) PARAMS ((bfd *, struct bfd_link_info *,
                                           struct aout_link_hash_entry *));
 
-  /* This callback is called by the linker for each reloc against an
-     external symbol.  RELOC is a pointer to the unswapped reloc.  If
-     *SKIP is set to true, the reloc will be skipped.  */
+  /* If this callback is not NULL, the linker calls it for each reloc.
+     RELOC is a pointer to the unswapped reloc.  If *SKIP is set to
+     true, the reloc will be skipped.  *RELOCATION may be changed to
+     change the effects of the relocation.  */
   boolean (*check_dynamic_reloc) PARAMS ((struct bfd_link_info *info,
                                          bfd *input_bfd,
                                          asection *input_section,
                                          struct aout_link_hash_entry *h,
-                                         PTR reloc, boolean *skip));
+                                         PTR reloc, bfd_byte *contents,
+                                         boolean *skip,
+                                         bfd_vma *relocation));
 
   /* Called at the end of a link to finish up any dynamic linking
      information.  */
@@ -187,14 +192,14 @@ struct internal_exec
 };
 
 /* Magic number is written 
-< MSB        >
+< MSB          >
 3130292827262524232221201918171615141312111009080706050403020100
-< FLAGS      >< MACHINE TYPE ><  MAGIC NUMBER                 >
+< FLAGS        >< MACHINE TYPE ><  MAGIC NUMBER                >
 */
 /* Magic number for NetBSD is
-<MSB         >
+<MSB           >
 3130292827262524232221201918171615141312111009080706050403020100
-< FLAGS    ><                  ><  MAGIC NUMBER                >
+< FLAGS    >< MACHINE TYPE     ><  MAGIC NUMBER                >
 */
 
 enum machine_type {
@@ -203,10 +208,20 @@ enum machine_type {
   M_68020 = 2,
   M_SPARC = 3,
   /* skip a bunch so we don't run into any of suns numbers */
+  /* make these up for the ns32k*/
+  M_NS32032 = (64),            /* ns32032 running ? */
+  M_NS32532 = (64 + 5),                /* ns32532 running mach */
+
   M_386 = 100,
   M_29K = 101,          /* AMD 29000 */
   M_386_DYNIX = 102,   /* Sequent running dynix */
-  M_386_NETBSD = 134,          /* NetBSD/386 binary */
+  M_ARM = 103,         /* Advanced Risc Machines ARM */
+  M_SPARCLET = 131,    /* SPARClet = M_SPARC + 128 */
+  M_386_NETBSD = 134,  /* NetBSD/i386 binary */
+  M_68K_NETBSD = 135,  /* NetBSD/m68k binary */
+  M_68K4K_NETBSD = 136,        /* NetBSD/m68k4k binary */
+  M_532_NETBSD = 137,  /* NetBSD/ns32k binary */
+  M_SPARC_NETBSD = 138,        /* NetBSD/sparc binary */
   M_MIPS1 = 151,        /* MIPS R2000/R3000 binary */
   M_MIPS2 = 152,        /* MIPS R4000/R6000 binary */
   M_HP200 = 200,       /* HP 200 (68010) BSD binary */
@@ -295,6 +310,10 @@ struct aoutdata {
   /* Segment size - needed for alignment of demand paged files. */
   unsigned long segment_size;
 
+  /* Zmagic disk block size - need to align the start of the text
+     section in ZMAGIC binaries.  Normally the same as page_size.  */
+  unsigned long zmagic_disk_block_size;
+
   unsigned exec_bytes_size;
   unsigned vma_adjusted : 1;
 
@@ -316,15 +335,25 @@ struct aoutdata {
       n_magic
     } magic;
 
+  /* A buffer for find_nearest_line.  */
+  char *line_buf;
+
   /* The external symbol information.  */
   struct external_nlist *external_syms;
   bfd_size_type external_sym_count;
+  bfd_window sym_window;
   char *external_strings;
   bfd_size_type external_string_size;
+  bfd_window string_window;
   struct aout_link_hash_entry **sym_hashes;
 
   /* A pointer for shared library information.  */
   PTR dynamic_info;
+
+  /* A mapping from local symbols to offsets into the global offset
+     table, used when linking on SunOS.  This is indexed by the symbol
+     index.  */
+  bfd_vma *local_got_offsets;
 };
 
 struct  aout_data_struct {
@@ -345,8 +374,10 @@ struct  aout_data_struct {
 #define obj_aout_subformat(bfd)        (adata(bfd).subformat)
 #define obj_aout_external_syms(bfd) (adata(bfd).external_syms)
 #define obj_aout_external_sym_count(bfd) (adata(bfd).external_sym_count)
+#define obj_aout_sym_window(bfd) (adata(bfd).sym_window)
 #define obj_aout_external_strings(bfd) (adata(bfd).external_strings)
 #define obj_aout_external_string_size(bfd) (adata(bfd).external_string_size)
+#define obj_aout_string_window(bfd) (adata(bfd).string_window)
 #define obj_aout_sym_hashes(bfd) (adata(bfd).sym_hashes)
 #define obj_aout_dynamic_info(bfd) (adata(bfd).dynamic_info)
 
@@ -366,6 +397,9 @@ struct aout_section_data_struct
 #define aout_section_data(s) \
   ((struct aout_section_data_struct *) (s)->used_by_bfd)
 
+#define set_aout_section_data(s,v) \
+  ((s)->used_by_bfd = (PTR)&(v)->relocs)
+
 /* Prototype declarations for functions defined in aoutx.h  */
 
 boolean
@@ -374,10 +408,10 @@ NAME(aout,squirt_out_relocs) PARAMS ((bfd *abfd, asection *section));
 boolean
 NAME(aout,make_sections) PARAMS ((bfd *));
 
-bfd_target *
+const bfd_target *
 NAME(aout,some_aout_object_p) PARAMS ((bfd *abfd,
-                       struct internal_exec *execp,
-                       bfd_target * (*callback)(bfd *)));
+                                      struct internal_exec *execp,
+                                      const bfd_target *(*callback)(bfd *)));
 
 boolean
 NAME(aout,mkobject) PARAMS ((bfd *abfd));
@@ -425,10 +459,14 @@ NAME(aout,get_symtab) PARAMS ((bfd *abfd, asymbol **location));
 
 void
 NAME(aout,swap_ext_reloc_in) PARAMS ((bfd *, struct reloc_ext_external *,
-                                     arelent *, asymbol **));
+                                     arelent *, asymbol **, bfd_size_type));
 void
 NAME(aout,swap_std_reloc_in) PARAMS ((bfd *, struct reloc_std_external *,
-                                     arelent *, asymbol **));
+                                     arelent *, asymbol **, bfd_size_type));
+
+reloc_howto_type *
+NAME(aout,reloc_type_lookup) PARAMS ((bfd *abfd,
+                                     bfd_reloc_code_real_type code));
 
 boolean
 NAME(aout,slurp_reloc_table) PARAMS ((bfd *abfd, sec_ptr asect,
@@ -460,6 +498,13 @@ NAME(aout,find_nearest_line) PARAMS ((bfd *abfd, asection *section,
       asymbol **symbols, bfd_vma offset, CONST char **filename_ptr,
       CONST char **functionname_ptr, unsigned int *line_ptr));
 
+long
+NAME(aout,read_minisymbols) PARAMS ((bfd *, boolean, PTR *, unsigned int *));
+
+asymbol *
+NAME(aout,minisymbol_to_symbol) PARAMS ((bfd *, boolean, const PTR,
+                                        asymbol *));
+
 int
 NAME(aout,sizeof_headers) PARAMS ((bfd *abfd, boolean exec));
 
@@ -500,11 +545,6 @@ NAME(aout,final_link) PARAMS ((bfd *, struct bfd_link_info *,
 boolean
 NAME(aout,bfd_free_cached_info) PARAMS ((bfd *));
 
-/* Prototypes for functions in stab-syms.c. */
-
-CONST char *
-aout_stab_name PARAMS ((int code));
-
 /* A.out uses the generic versions of these routines... */
 
 #define        aout_32_get_section_contents    _bfd_generic_get_section_contents
@@ -543,26 +583,22 @@ aout_stab_name PARAMS ((int code));
                                                                              \
        if (bfd_get_outsymbols (abfd) != (asymbol **) NULL                    \
            && bfd_get_symcount (abfd) != 0)                                  \
-           {                                                                 \
-             if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET)     \
-                 != 0)                                                       \
-               return false;                                                 \
-                                                                             \
-             if (! NAME(aout,write_syms)(abfd)) return false;                \
+         {                                                                   \
+           if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET) != 0) \
+             return false;                                                   \
                                                                              \
-             if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET)    \
-                 != 0)                                                       \
-               return false;                                                 \
+           if (! NAME(aout,write_syms)(abfd)) return false;                  \
+         }                                                                   \
                                                                              \
-             if (!NAME(aout,squirt_out_relocs) (abfd, obj_textsec (abfd)))   \
-               return false;                                                 \
-             if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET)    \
-                 != 0)                                                       \
-               return false;                                                 \
+       if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET) != 0)    \
+         return false;                                                       \
+       if (!NAME(aout,squirt_out_relocs) (abfd, obj_textsec (abfd)))         \
+         return false;                                                       \
                                                                              \
-             if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd)))    \
-               return false;                                                 \
-           }                                                                 \
+       if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET) != 0)    \
+         return false;                                                       \
+       if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd)))          \
+         return false;                                                       \
       }                                                                              
 #endif