Linux target variants for elfxx-hppa.
[deliverable/binutils-gdb.git] / bfd / i386aout.c
index 8ca794131ccf63a5c25eccc99d88f2c50b6a5386..d0b2cffef235621e6303c7ec87f5f4fe076887fd 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for i386 a.out binaries.
 /* BFD back-end for i386 a.out binaries.
-   Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+   Copyright 1990, 91, 92, 94, 95, 96, 1997 Free Software Foundation, Inc.
 
 This file is part of BFD, the Binary File Descriptor library.
 
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -15,144 +15,77 @@ 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
 
 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.  */
 
 
-#define        PAGE_SIZE       4096
-#define        SEGMENT_SIZE    PAGE_SIZE
-#define TEXT_START_ADDR        0x8000 
-#define ARCH 32
-#define BYTES_IN_WORD 4
 
 
-#include <ansidecl.h>
-#include <sysdep.h>
-#include "bfd.h"
-#include "libbfd.h"
-#include "aout64.h"
+/* The only 386 aout system we have here is GO32 from DJ. 
+   These numbers make BFD work with that. If your aout 386 system
+   doesn't work with these, we'll have to split them into different
+   files.  Send me (sac@cygnus.com) the runes to make it work on your
+   system, and I'll stick it in for the next release.  */
 
 
-/**From: bothner@cs.wisc.edu***********************************************/
-#undef N_TXTOFF
-#define N_TXTOFF(x)   ( (N_MAGIC((x)) == ZMAGIC) ? PAGE_SIZE : EXEC_BYTES_SIZE)
-/**************************************************************************/
+#define N_HEADER_IN_TEXT(x) 0
+#define BYTES_IN_WORD 4
 
 
-#include "stab.gnu.h"
-#include "ar.h"
-#include "libaout.h"           /* BFD a.out internal data structures */
+#define N_TXTOFF(x) 0x20
+#define N_TXTADDR(x) (N_MAGIC(x)==ZMAGIC ? 0x1020 : 0)
 
 
-bfd_target *aout386_callback ();
+#define N_TXTSIZE(x) ((x).a_text)
+#if 0
+#define N_DATADDR(x) (N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+(x).a_text) : (SEGMENT_SIZE + ((0x1020+(x).a_text-1) & ~(SEGMENT_SIZE-1))))
+#define NOSUBEXECB
 
 
-bfd_target *
-DEFUN(aout386_object_p,(abfd),
-     bfd *abfd)
-{
-  struct external_exec exec_bytes;
-  struct internal_exec exec;
-
-  if (bfd_read ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
-      != EXEC_BYTES_SIZE) {
-    bfd_error = wrong_format;
-    return 0;
-  }
+#endif
+#define TARGET_PAGE_SIZE 4096
+#define SEGMENT_SIZE 0x400000
+#define DEFAULT_ARCH bfd_arch_i386
 
 
-  exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
+#define MY(OP) CAT(i386aout_,OP)
+#define TARGETNAME "a.out-i386"
+#define NO_WRITE_HEADER_KLUDGE 1
 
 
-  if (N_BADMAG (exec)) return 0;
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "aout/aout64.h"
+#include "libaout.h"
 
 
-  NAME(aout,swap_exec_header_in)(abfd, &exec_bytes, &exec);
-  return aout_32_some_aout_object_p (abfd, &exec, aout386_callback);
-}
+/* Set the machine type correctly.  */
 
 
-/* Finish up the reading of the file header */
-bfd_target *
-DEFUN(aout386_callback,(abfd),
-      bfd *abfd)
+static boolean
+i386aout_write_object_contents (abfd)
+     bfd *abfd;
 {
 {
+  struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
   struct internal_exec *execp = exec_hdr (abfd);
-  
-  WORK_OUT_FILE_POSITIONS(abfd, execp) ;
-  
-  /* Determine the architecture and machine type of the object file.  */
-  bfd_default_set_arch_mach(abfd, bfd_arch_i386, 0);
 
 
-  return abfd->xvec;
-}
+  N_SET_MACHTYPE (*execp, M_386);
 
 
-/* Write an object file.
-   Section contents have already been written.  We write the
-   file header, symbols, and relocation.  */
+  obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
 
 
-boolean
-DEFUN(aout386_write_object_contents,(abfd),
-      bfd *abfd)
-{
-  bfd_size_type data_pad = 0;
-  struct external_exec exec_bytes;
-  struct internal_exec *execp = exec_hdr (abfd);
+  WRITE_HEADERS (abfd, execp);
 
 
-  WRITE_HEADERS(abfd, execp);
   return true;
 }
   return true;
 }
-\f
-/* Transfer vector */
-
-/* We use BSD archive files.  */
-#define        aout386_openr_next_archived_file        bfd_generic_openr_next_archived_file
-#define        aout386_generic_stat_arch_elt   bfd_generic_stat_arch_elt
-#define        aout386_slurp_armap             bfd_slurp_bsd_armap
-#define        aout386_slurp_extended_name_table       bfd_true
-#define        aout386_write_armap             bsd_write_armap
-#define        aout386_truncate_arname         bfd_bsd_truncate_arname
-
-/* We don't support core files here.  */
-#define        aout386_core_file_failing_command _bfd_dummy_core_file_failing_command
-#define        aout386_core_file_failing_signal _bfd_dummy_core_file_failing_signal
-#define        aout386_core_file_matches_executable_p  \
-                               _bfd_dummy_core_file_matches_executable_p
-#define        aout386_core_file_p             _bfd_dummy_target
-
-#define aout386_bfd_debug_info_start           bfd_void
-#define aout386_bfd_debug_info_end             bfd_void
-#define aout386_bfd_debug_info_accumulate      (PROTO(void,(*),(bfd*, struct sec *))) bfd_void
-
-#define aout386_mkobject               aout_32_mkobject 
-#define aout386_close_and_cleanup      aout_32_close_and_cleanup
-#define aout386_set_section_contents   aout_32_set_section_contents
-#define aout386_get_section_contents   aout_32_get_section_contents
-#define aout386_new_section_hook       aout_32_new_section_hook
-#define aout386_get_symtab_upper_bound aout_32_get_symtab_upper_bound
-#define aout386_get_symtab             aout_32_get_symtab
-#define aout386_get_reloc_upper_bound  aout_32_get_reloc_upper_bound
-#define aout386_canonicalize_reloc     aout_32_canonicalize_reloc
-#define aout386_make_empty_symbol      aout_32_make_empty_symbol
-#define aout386_print_symbol           aout_32_print_symbol
-#define aout386_get_lineno             aout_32_get_lineno
-#define aout386_set_arch_mach          aout_32_set_arch_mach
-#define aout386_find_nearest_line      aout_32_find_nearest_line
-#define aout386_sizeof_headers         aout_32_sizeof_headers
-
-bfd_target i386aout_vec =      /* Intel 386 running a.out, embedded. */
-{
-  "a.out-i386",                        /* name */
-  bfd_target_aout_flavour,
-  false,                       /* target byte order */
-  false,                       /* target headers byte order */
-  (HAS_RELOC | EXEC_P |                /* object flags */
-   HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
-  ' ',                         /* ar_pad_char */
-  16,                          /* ar_max_namelen */
-  1,                           /* minimum alignment */
-                               /* data swap routines */
-  _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16,
-                               /* header swap routines */
-  _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16,
-
-  {_bfd_dummy_target, aout386_object_p, /* bfd_check_format */
-     bfd_generic_archive_p, aout386_core_file_p},
-  {bfd_false, aout386_mkobject,        /* bfd_set_format */
-     _bfd_generic_mkarchive, bfd_false},
-  {bfd_false, aout386_write_object_contents, /* bfd_write_contents */
-     _bfd_write_archive_contents, bfd_false},
-
-  JUMP_TABLE(aout386)
+
+#define MY_write_object_contents i386aout_write_object_contents
+
+static boolean MY(set_sizes)();
+#define MY_backend_data &MY(backend_data)
+static CONST struct aout_backend_data MY(backend_data) = {
+  0,                           /* zmagic contiguous */
+  1,                           /* text incl header */
+  0,                           /* entry is text address */
+  0,                           /* exec_hdr_flags */
+  0,                           /* text vma? */
+  MY(set_sizes),
+  1,                           /* exec header not counted */
+  0,                           /* add_dynamic_symbols */
+  0,                           /* add_one_symbol */
+  0,                           /* link_dynamic_object */
+  0,                           /* write_dynamic_symbol */
+  0,                           /* check_dynamic_reloc */
+  0                            /* finish_dynamic_link */
 };
 };
+
+#include "aout-target.h"
This page took 0.024944 seconds and 4 git commands to generate.