* bfd-in.h: Remove "taken from the source" comment.
[deliverable/binutils-gdb.git] / bfd / i386msdos.c
index c9ec86482c57f0114e17ec4dc435cd0e56a9926c..5c060ecf58e4a0d8f76fafdabf6e79b6819cda4a 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for MS-DOS executables.
 /* BFD back-end for MS-DOS executables.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002
    Free Software Foundation, Inc.
    Written by Bryan Ford of the University of Utah.
 
    Free Software Foundation, Inc.
    Written by Bryan Ford of the University of Utah.
 
 #if 0
 struct exe_header
 {
 #if 0
 struct exe_header
 {
-       unsigned short magic;
-       unsigned short bytes_in_last_page;
-       unsigned short npages;  /* number of 512-byte "pages" including this header */
-       unsigned short nrelocs;
-       unsigned short header_paras;    /* number of 16-byte paragraphs in header */
-       unsigned short reserved;
-       unsigned short load_switch;
-       unsigned short ss_ofs;
-       unsigned short sp;
-       unsigned short checksum;
-       unsigned short ip;
-       unsigned short cs_ofs;
-       unsigned short reloc_ofs;
-       unsigned short reserved2;
-       unsigned short something1;
-       unsigned short something2;
-       unsigned short something3;
+  unsigned short magic;
+  unsigned short bytes_in_last_page;
+  unsigned short npages;       /* number of 512-byte "pages" including this header */
+  unsigned short nrelocs;
+  unsigned short header_paras; /* number of 16-byte paragraphs in header */
+  unsigned short reserved;
+  unsigned short load_switch;
+  unsigned short ss_ofs;
+  unsigned short sp;
+  unsigned short checksum;
+  unsigned short ip;
+  unsigned short cs_ofs;
+  unsigned short reloc_ofs;
+  unsigned short reserved2;
+  unsigned short something1;
+  unsigned short something2;
+  unsigned short something3;
 };
 #endif
 
 };
 #endif
 
@@ -56,6 +56,9 @@ struct exe_header
 #define EXE_LOAD_LOW   0xffff
 #define EXE_PAGE_SIZE  512
 
 #define EXE_LOAD_LOW   0xffff
 #define EXE_PAGE_SIZE  512
 
+static int     msdos_sizeof_headers PARAMS ((bfd *, boolean));
+static boolean msdos_write_object_contents PARAMS ((bfd *));
+static boolean msdos_set_section_contents PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
 
 static int
 msdos_sizeof_headers (abfd, exec)
 
 static int
 msdos_sizeof_headers (abfd, exec)
@@ -103,28 +106,27 @@ msdos_write_object_contents (abfd)
       return false;
     }
 
       return false;
     }
 
-  /* constants */
-  bfd_h_put_16(abfd, EXE_MAGIC, &hdr[0]);
-  bfd_h_put_16(abfd, EXE_PAGE_SIZE / 16, &hdr[8]);
-  bfd_h_put_16(abfd, EXE_LOAD_LOW, &hdr[12]);
-  bfd_h_put_16(abfd, 0x3e, &hdr[24]);
-  bfd_h_put_16(abfd, 0x0001, &hdr[28]); /* XXX??? */
-  bfd_h_put_16(abfd, 0x30fb, &hdr[30]); /* XXX??? */
-  bfd_h_put_16(abfd, 0x726a, &hdr[32]); /* XXX??? */
+  /* Constants.  */
+  H_PUT_16 (abfd, EXE_MAGIC, &hdr[0]);
+  H_PUT_16 (abfd, EXE_PAGE_SIZE / 16, &hdr[8]);
+  H_PUT_16 (abfd, EXE_LOAD_LOW, &hdr[12]);
+  H_PUT_16 (abfd, 0x3e, &hdr[24]);
+  H_PUT_16 (abfd, 0x0001, &hdr[28]); /* XXX??? */
+  H_PUT_16 (abfd, 0x30fb, &hdr[30]); /* XXX??? */
+  H_PUT_16 (abfd, 0x726a, &hdr[32]); /* XXX??? */
 
 
-  /* bytes in last page (0 = full page) */
-  bfd_h_put_16(abfd, outfile_size & (EXE_PAGE_SIZE - 1), &hdr[2]);
+  /* Bytes in last page (0 = full page).  */
+  H_PUT_16 (abfd, outfile_size & (EXE_PAGE_SIZE - 1), &hdr[2]);
 
 
-  /* number of pages */
-  bfd_h_put_16(abfd, (outfile_size + EXE_PAGE_SIZE - 1) / EXE_PAGE_SIZE,
-              &hdr[4]);
+  /* Number of pages.  */
+  H_PUT_16 (abfd, (outfile_size + EXE_PAGE_SIZE - 1) / EXE_PAGE_SIZE, &hdr[4]);
 
   /* Set the initial stack pointer to the end of the bss.
      The program's crt0 code must relocate it to a real stack.  */
 
   /* Set the initial stack pointer to the end of the bss.
      The program's crt0 code must relocate it to a real stack.  */
-  bfd_h_put_16(abfd, high_vma, &hdr[16]);
+  H_PUT_16 (abfd, high_vma, &hdr[16]);
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || bfd_write (hdr, 1, sizeof(hdr), abfd) != sizeof(hdr))
+      || bfd_bwrite (hdr, (bfd_size_type) sizeof(hdr), abfd) != sizeof(hdr))
     return false;
 
   return true;
     return false;
 
   return true;
@@ -146,8 +148,8 @@ msdos_set_section_contents (abfd, section, location, offset, count)
 
   if (bfd_get_section_flags (abfd, section) & SEC_LOAD)
     {
 
   if (bfd_get_section_flags (abfd, section) & SEC_LOAD)
     {
-      if (bfd_seek (abfd, (file_ptr) (section->filepos + offset), SEEK_SET) != 0
-          || bfd_write (location, 1, count, abfd) != count)
+      if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
+          || bfd_bwrite (location, count, abfd) != count)
         return false;
     }
 
         return false;
     }
 
@@ -170,8 +172,12 @@ msdos_set_section_contents (abfd, section, location, offset, count)
   bfd_generic_get_relocated_section_contents
 #define msdos_bfd_relax_section bfd_generic_relax_section
 #define msdos_bfd_gc_sections bfd_generic_gc_sections
   bfd_generic_get_relocated_section_contents
 #define msdos_bfd_relax_section bfd_generic_relax_section
 #define msdos_bfd_gc_sections bfd_generic_gc_sections
+#define msdos_bfd_merge_sections bfd_generic_merge_sections
+#define msdos_bfd_discard_group bfd_generic_discard_group
 #define msdos_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
 #define msdos_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
+#define msdos_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
 #define msdos_bfd_link_add_symbols _bfd_generic_link_add_symbols
 #define msdos_bfd_link_add_symbols _bfd_generic_link_add_symbols
+#define msdos_bfd_link_just_syms _bfd_generic_link_just_syms
 #define msdos_bfd_final_link _bfd_generic_final_link
 #define msdos_bfd_link_split_section _bfd_generic_link_split_section
 #define msdos_set_arch_mach _bfd_generic_set_arch_mach
 #define msdos_bfd_final_link _bfd_generic_final_link
 #define msdos_bfd_link_split_section _bfd_generic_link_split_section
 #define msdos_set_arch_mach _bfd_generic_set_arch_mach
@@ -192,56 +198,56 @@ msdos_set_section_contents (abfd, section, location, offset, count)
 #define msdos_32_bfd_link_split_section  _bfd_generic_link_split_section
 
 const bfd_target i386msdos_vec =
 #define msdos_32_bfd_link_split_section  _bfd_generic_link_split_section
 
 const bfd_target i386msdos_vec =
-{
-  "msdos",                     /* name */
-  bfd_target_msdos_flavour,
-  BFD_ENDIAN_LITTLE,           /* target byte order */
-  BFD_ENDIAN_LITTLE,           /* target headers byte order */
-  (EXEC_P),                    /* object flags */
-  (SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS
-   | SEC_ALLOC | SEC_LOAD),    /* section flags */
-  0,                           /* leading underscore */
-  ' ',                         /* ar_pad_char */
-  16,                          /* ar_max_namelen */
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-  bfd_getl16, bfd_getl_signed_16, bfd_putl16,  /* data */
-  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
-  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
-  bfd_getl16, bfd_getl_signed_16, bfd_putl16,  /* hdrs */
-
   {
   {
-    _bfd_dummy_target,
-    _bfd_dummy_target,         /* bfd_check_format */
-    _bfd_dummy_target,
-    _bfd_dummy_target,
-  },
-  {
-    bfd_false,
-    msdos_mkobject,
-    _bfd_generic_mkarchive,
-    bfd_false,
-  },
-  {                            /* bfd_write_contents */
-    bfd_false,
-    msdos_write_object_contents,
-    _bfd_write_archive_contents,
-    bfd_false,
-  },
-
-  BFD_JUMP_TABLE_GENERIC (msdos),
-  BFD_JUMP_TABLE_COPY (_bfd_generic),
-  BFD_JUMP_TABLE_CORE (_bfd_nocore),
-  BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
-  BFD_JUMP_TABLE_SYMBOLS (msdos),
-  BFD_JUMP_TABLE_RELOCS (msdos),
-  BFD_JUMP_TABLE_WRITE (msdos),
-  BFD_JUMP_TABLE_LINK (msdos),
-  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
-
-  NULL,
-  
-  (PTR) 0
-};
+    "msdos",                   /* name */
+    bfd_target_msdos_flavour,
+    BFD_ENDIAN_LITTLE,         /* target byte order */
+    BFD_ENDIAN_LITTLE,         /* target headers byte order */
+    (EXEC_P),                  /* object flags */
+    (SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS
+     | SEC_ALLOC | SEC_LOAD),  /* section flags */
+    0,                         /* leading underscore */
+    ' ',                               /* ar_pad_char */
+    16,                                /* ar_max_namelen */
+    bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+    bfd_getl16, bfd_getl_signed_16, bfd_putl16,        /* data */
+    bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+    bfd_getl16, bfd_getl_signed_16, bfd_putl16,        /* hdrs */
+
+    {
+      _bfd_dummy_target,
+      _bfd_dummy_target,               /* bfd_check_format */
+      _bfd_dummy_target,
+      _bfd_dummy_target,
+    },
+    {
+      bfd_false,
+      msdos_mkobject,
+      _bfd_generic_mkarchive,
+      bfd_false,
+    },
+    {                          /* bfd_write_contents */
+      bfd_false,
+      msdos_write_object_contents,
+      _bfd_write_archive_contents,
+      bfd_false,
+    },
+
+    BFD_JUMP_TABLE_GENERIC (msdos),
+    BFD_JUMP_TABLE_COPY (_bfd_generic),
+    BFD_JUMP_TABLE_CORE (_bfd_nocore),
+    BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
+    BFD_JUMP_TABLE_SYMBOLS (msdos),
+    BFD_JUMP_TABLE_RELOCS (msdos),
+    BFD_JUMP_TABLE_WRITE (msdos),
+    BFD_JUMP_TABLE_LINK (msdos),
+    BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+    NULL,
+
+    (PTR) 0
+  };
 
 
 
 
This page took 0.027916 seconds and 4 git commands to generate.