Ignore:
Timestamp:
Aug 16, 2003, 6:59:22 PM (22 years ago)
Author:
bird
Message:

binutils v2.14 - offical sources.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GNU/src/binutils/bfd/i386msdos.c

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.1.1.2
    r608 r609  
    11/* BFD back-end for MS-DOS executables.
    2    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999
     2   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002
    33   Free Software Foundation, Inc.
    44   Written by Bryan Ford of the University of Utah.
     
    3232struct exe_header
    3333{
    34         unsigned short magic;
    35         unsigned short bytes_in_last_page;
    36         unsigned short npages;  /* number of 512-byte "pages" including this header */
    37         unsigned short nrelocs;
    38         unsigned short header_paras;    /* number of 16-byte paragraphs in header */
    39         unsigned short reserved;
    40         unsigned short load_switch;
    41         unsigned short ss_ofs;
    42         unsigned short sp;
    43         unsigned short checksum;
    44         unsigned short ip;
    45         unsigned short cs_ofs;
    46         unsigned short reloc_ofs;
    47         unsigned short reserved2;
    48         unsigned short something1;
    49         unsigned short something2;
    50         unsigned short something3;
     34  unsigned short magic;
     35  unsigned short bytes_in_last_page;
     36  unsigned short npages;        /* number of 512-byte "pages" including this header */
     37  unsigned short nrelocs;
     38  unsigned short header_paras;  /* number of 16-byte paragraphs in header */
     39  unsigned short reserved;
     40  unsigned short load_switch;
     41  unsigned short ss_ofs;
     42  unsigned short sp;
     43  unsigned short checksum;
     44  unsigned short ip;
     45  unsigned short cs_ofs;
     46  unsigned short reloc_ofs;
     47  unsigned short reserved2;
     48  unsigned short something1;
     49  unsigned short something2;
     50  unsigned short something3;
    5151};
    5252#endif
     
    5757#define EXE_PAGE_SIZE   512
    5858
     59static int msdos_sizeof_headers
     60  PARAMS ((bfd *, bfd_boolean));
     61static bfd_boolean msdos_write_object_contents
     62  PARAMS ((bfd *));
     63static bfd_boolean msdos_set_section_contents
     64  PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
    5965
    6066static int
    6167msdos_sizeof_headers (abfd, exec)
    6268     bfd *abfd ATTRIBUTE_UNUSED;
    63      boolean exec ATTRIBUTE_UNUSED;
     69     bfd_boolean exec ATTRIBUTE_UNUSED;
    6470{
    6571  return 0;
    6672}
    6773
    68 static boolean
     74static bfd_boolean
    6975msdos_write_object_contents (abfd)
    7076     bfd *abfd;
     
    101107    {
    102108      bfd_set_error(bfd_error_file_too_big);
    103       return false;
     109      return FALSE;
    104110    }
    105111
    106   /* constants */
    107   bfd_h_put_16(abfd, EXE_MAGIC, &hdr[0]);
    108   bfd_h_put_16(abfd, EXE_PAGE_SIZE / 16, &hdr[8]);
    109   bfd_h_put_16(abfd, EXE_LOAD_LOW, &hdr[12]);
    110   bfd_h_put_16(abfd, 0x3e, &hdr[24]);
    111   bfd_h_put_16(abfd, 0x0001, &hdr[28]); /* XXX??? */
    112   bfd_h_put_16(abfd, 0x30fb, &hdr[30]); /* XXX??? */
    113   bfd_h_put_16(abfd, 0x726a, &hdr[32]); /* XXX??? */
    114 
    115   /* bytes in last page (0 = full page) */
    116   bfd_h_put_16(abfd, outfile_size & (EXE_PAGE_SIZE - 1), &hdr[2]);
    117 
    118   /* number of pages */
    119   bfd_h_put_16(abfd, (outfile_size + EXE_PAGE_SIZE - 1) / EXE_PAGE_SIZE,
    120                &hdr[4]);
     112  /* Constants.  */
     113  H_PUT_16 (abfd, EXE_MAGIC, &hdr[0]);
     114  H_PUT_16 (abfd, EXE_PAGE_SIZE / 16, &hdr[8]);
     115  H_PUT_16 (abfd, EXE_LOAD_LOW, &hdr[12]);
     116  H_PUT_16 (abfd, 0x3e, &hdr[24]);
     117  H_PUT_16 (abfd, 0x0001, &hdr[28]); /* XXX??? */
     118  H_PUT_16 (abfd, 0x30fb, &hdr[30]); /* XXX??? */
     119  H_PUT_16 (abfd, 0x726a, &hdr[32]); /* XXX??? */
     120
     121  /* Bytes in last page (0 = full page).  */
     122  H_PUT_16 (abfd, outfile_size & (EXE_PAGE_SIZE - 1), &hdr[2]);
     123
     124  /* Number of pages.  */
     125  H_PUT_16 (abfd, (outfile_size + EXE_PAGE_SIZE - 1) / EXE_PAGE_SIZE, &hdr[4]);
    121126
    122127  /* Set the initial stack pointer to the end of the bss.
    123128     The program's crt0 code must relocate it to a real stack.  */
    124   bfd_h_put_16(abfd, high_vma, &hdr[16]);
     129  H_PUT_16 (abfd, high_vma, &hdr[16]);
    125130
    126131  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
    127       || bfd_write (hdr, 1, sizeof(hdr), abfd) != sizeof(hdr))
    128     return false;
    129 
    130   return true;
     132      || bfd_bwrite (hdr, (bfd_size_type) sizeof(hdr), abfd) != sizeof(hdr))
     133    return FALSE;
     134
     135  return TRUE;
    131136}
    132137
    133 static boolean
     138static bfd_boolean
    134139msdos_set_section_contents (abfd, section, location, offset, count)
    135140     bfd *abfd;
     
    141146
    142147  if (count == 0)
    143     return true;
     148    return TRUE;
    144149
    145150  section->filepos = EXE_PAGE_SIZE + bfd_get_section_vma (abfd, section);
     
    147152  if (bfd_get_section_flags (abfd, section) & SEC_LOAD)
    148153    {
    149       if (bfd_seek (abfd, (file_ptr) (section->filepos + offset), SEEK_SET) != 0
    150           || bfd_write (location, 1, count, abfd) != count)
    151         return false;
     154      if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
     155          || bfd_bwrite (location, count, abfd) != count)
     156        return FALSE;
    152157    }
    153158
    154   return true;
     159  return TRUE;
    155160}
    156161
     
    171176#define msdos_bfd_relax_section bfd_generic_relax_section
    172177#define msdos_bfd_gc_sections bfd_generic_gc_sections
     178#define msdos_bfd_merge_sections bfd_generic_merge_sections
     179#define msdos_bfd_discard_group bfd_generic_discard_group
    173180#define msdos_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
     181#define msdos_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
    174182#define msdos_bfd_link_add_symbols _bfd_generic_link_add_symbols
     183#define msdos_bfd_link_just_syms _bfd_generic_link_just_syms
    175184#define msdos_bfd_final_link _bfd_generic_final_link
    176185#define msdos_bfd_link_split_section _bfd_generic_link_split_section
     
    193202
    194203const bfd_target i386msdos_vec =
    195 {
    196   "msdos",                      /* name */
    197   bfd_target_msdos_flavour,
    198   BFD_ENDIAN_LITTLE,            /* target byte order */
    199   BFD_ENDIAN_LITTLE,            /* target headers byte order */
    200   (EXEC_P),                     /* object flags */
    201   (SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS
    202    | SEC_ALLOC | SEC_LOAD),     /* section flags */
    203   0,                            /* leading underscore */
    204   ' ',                          /* ar_pad_char */
    205   16,                           /* ar_max_namelen */
    206   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
    207   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
    208   bfd_getl16, bfd_getl_signed_16, bfd_putl16,   /* data */
    209   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
    210   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
    211   bfd_getl16, bfd_getl_signed_16, bfd_putl16,   /* hdrs */
    212 
    213204  {
    214     _bfd_dummy_target,
    215     _bfd_dummy_target,          /* bfd_check_format */
    216     _bfd_dummy_target,
    217     _bfd_dummy_target,
    218   },
    219   {
    220     bfd_false,
    221     msdos_mkobject,
    222     _bfd_generic_mkarchive,
    223     bfd_false,
    224   },
    225   {                             /* bfd_write_contents */
    226     bfd_false,
    227     msdos_write_object_contents,
    228     _bfd_write_archive_contents,
    229     bfd_false,
    230   },
    231 
    232   BFD_JUMP_TABLE_GENERIC (msdos),
    233   BFD_JUMP_TABLE_COPY (_bfd_generic),
    234   BFD_JUMP_TABLE_CORE (_bfd_nocore),
    235   BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
    236   BFD_JUMP_TABLE_SYMBOLS (msdos),
    237   BFD_JUMP_TABLE_RELOCS (msdos),
    238   BFD_JUMP_TABLE_WRITE (msdos),
    239   BFD_JUMP_TABLE_LINK (msdos),
    240   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
    241 
    242   NULL,
    243  
    244   (PTR) 0
    245 };
    246 
    247 
     205    "msdos",                    /* name */
     206    bfd_target_msdos_flavour,
     207    BFD_ENDIAN_LITTLE,          /* target byte order */
     208    BFD_ENDIAN_LITTLE,          /* target headers byte order */
     209    (EXEC_P),                   /* object flags */
     210    (SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS
     211     | SEC_ALLOC | SEC_LOAD),   /* section flags */
     212    0,                          /* leading underscore */
     213    ' ',                                /* ar_pad_char */
     214    16,                         /* ar_max_namelen */
     215    bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     216    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
     217    bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
     218    bfd_getl64, bfd_getl_signed_64, bfd_putl64,
     219    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
     220    bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
     221
     222    {
     223      _bfd_dummy_target,
     224      _bfd_dummy_target,                /* bfd_check_format */
     225      _bfd_dummy_target,
     226      _bfd_dummy_target,
     227    },
     228    {
     229      bfd_false,
     230      msdos_mkobject,
     231      _bfd_generic_mkarchive,
     232      bfd_false,
     233    },
     234    {                           /* bfd_write_contents */
     235      bfd_false,
     236      msdos_write_object_contents,
     237      _bfd_write_archive_contents,
     238      bfd_false,
     239    },
     240
     241    BFD_JUMP_TABLE_GENERIC (msdos),
     242    BFD_JUMP_TABLE_COPY (_bfd_generic),
     243    BFD_JUMP_TABLE_CORE (_bfd_nocore),
     244    BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
     245    BFD_JUMP_TABLE_SYMBOLS (msdos),
     246    BFD_JUMP_TABLE_RELOCS (msdos),
     247    BFD_JUMP_TABLE_WRITE (msdos),
     248    BFD_JUMP_TABLE_LINK (msdos),
     249    BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
     250
     251    NULL,
     252
     253    (PTR) 0
     254  };
     255
     256
Note: See TracChangeset for help on using the changeset viewer.