Home | History | Annotate | Download | only in bfd
      1 /* Target definitions for 32/64-bit NLM (NetWare Loadable Module)
      2    Copyright (C) 1993-2014 Free Software Foundation, Inc.
      3 
      4    This file is part of BFD, the Binary File Descriptor library.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software
     18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19    MA 02110-1301, USA.  */
     20 
     21 #define nlm_core_file_p _bfd_dummy_target
     22 
     23 #define nlm_get_symtab_upper_bound              nlmNAME (get_symtab_upper_bound)
     24 #define nlm_canonicalize_symtab                 nlmNAME (canonicalize_symtab)
     25 #define nlm_make_empty_symbol                   nlmNAME (make_empty_symbol)
     26 #define nlm_print_symbol                        nlmNAME (print_symbol)
     27 #define nlm_get_symbol_info                     nlmNAME (get_symbol_info)
     28 #define nlm_bfd_is_local_label_name             bfd_generic_is_local_label_name
     29 #define nlm_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
     30 #define nlm_get_lineno                          _bfd_nosymbols_get_lineno
     31 #define nlm_find_nearest_line                   _bfd_nosymbols_find_nearest_line
     32 #define nlm_find_line                           _bfd_nosymbols_find_line
     33 #define nlm_find_inliner_info                   _bfd_nosymbols_find_inliner_info
     34 #define nlm_bfd_make_debug_symbol               _bfd_nosymbols_bfd_make_debug_symbol
     35 #define nlm_read_minisymbols                    _bfd_generic_read_minisymbols
     36 #define nlm_minisymbol_to_symbol                _bfd_generic_minisymbol_to_symbol
     37 
     38 #define nlm_get_reloc_upper_bound               nlmNAME (get_reloc_upper_bound)
     39 #define nlm_canonicalize_reloc                  nlmNAME (canonicalize_reloc)
     40 #define nlm_bfd_reloc_type_lookup               bfd_default_reloc_type_lookup
     41 #define nlm_bfd_reloc_name_lookup         _bfd_norelocs_bfd_reloc_name_lookup
     42 #define nlm_set_section_contents                nlmNAME (set_section_contents)
     43 
     44 #define nlm_sizeof_headers                      _bfd_nolink_sizeof_headers
     45 #define nlm_bfd_get_relocated_section_contents  bfd_generic_get_relocated_section_contents
     46 #define nlm_bfd_relax_section                   bfd_generic_relax_section
     47 #define nlm_bfd_gc_sections                     bfd_generic_gc_sections
     48 #define nlm_bfd_lookup_section_flags		bfd_generic_lookup_section_flags
     49 #define nlm_bfd_merge_sections                  bfd_generic_merge_sections
     50 #define nlm_bfd_is_group_section                bfd_generic_is_group_section
     51 #define nlm_bfd_discard_group                   bfd_generic_discard_group
     52 #define nlm_section_already_linked              _bfd_generic_section_already_linked
     53 #define nlm_bfd_define_common_symbol            bfd_generic_define_common_symbol
     54 #define nlm_bfd_link_hash_table_create          _bfd_generic_link_hash_table_create
     55 #define nlm_bfd_link_add_symbols                _bfd_generic_link_add_symbols
     56 #define nlm_bfd_link_just_syms                  _bfd_generic_link_just_syms
     57 #define nlm_bfd_copy_link_hash_symbol_type \
     58   _bfd_generic_copy_link_hash_symbol_type
     59 #define nlm_bfd_final_link                      _bfd_generic_final_link
     60 #define nlm_bfd_link_split_section              _bfd_generic_link_split_section
     61 
     62 /* This structure contains everything that BFD knows about a target.
     63    It includes things like its byte order, name, what routines to call
     64    to do various operations, etc.  Every BFD points to a target structure
     65    with its "xvec" member.
     66 
     67    There are two such structures here:  one for big-endian machines and
     68    one for little-endian machines.   */
     69 
     70 /* Forward declaration for use when initialising alternative_target field.  */
     71 #ifdef TARGET_LITTLE_SYM
     72 extern const bfd_target TARGET_LITTLE_SYM;
     73 #endif
     74 
     75 #ifdef TARGET_BIG_SYM
     76 const bfd_target TARGET_BIG_SYM =
     77 {
     78   /* Name: identify kind of target.  */
     79   TARGET_BIG_NAME,
     80 
     81   /* Flavour: general indication about file.  */
     82   bfd_target_nlm_flavour,
     83 
     84   /* Byteorder: data is big endian.  */
     85   BFD_ENDIAN_BIG,
     86 
     87   /* Header_byteorder: header is also big endian.  */
     88   BFD_ENDIAN_BIG,
     89 
     90   /* Object_flags: mask of all file flags.  */
     91   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
     92    | WP_TEXT),
     93 
     94   /* Section_flags: mask of all section flags.  */
     95   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
     96    | SEC_CODE | SEC_DATA),
     97 
     98    /* Leading_symbol_char: is the first char of a user symbol
     99       predictable, and if so what is it.  */
    100    0,
    101 
    102   /* AR_pad_char: pad character for filenames within an archive header
    103      FIXME:  this really has nothing to do with NLM, this is a characteristic
    104      of the archiver and/or os and should be independently tunable.  */
    105   '/',
    106 
    107   /* AR_max_namelen: maximum number of characters in an archive header
    108      FIXME:  this really has nothing to do with NLM, this is a characteristic
    109      of the archiver and should be independently tunable.  This value is
    110      a WAG (wild a** guess).  */
    111   15,
    112   0,				/* match priority.  */
    113 
    114   /* Routines to byte-swap various sized integers from the data sections.  */
    115   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
    116   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
    117   bfd_getb16, bfd_getb_signed_16, bfd_putb16,
    118 
    119   /* Routines to byte-swap various sized integers from the file headers.  */
    120   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
    121   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
    122   bfd_getb16, bfd_getb_signed_16, bfd_putb16,
    123 
    124   /* bfd_check_format: check the format of a file being read.  */
    125   { _bfd_dummy_target,		/* Unknown format.  */
    126     nlmNAME (object_p),		/* Assembler/linker output (object file).  */
    127     bfd_generic_archive_p,	/* An archive.  */
    128     nlm_core_file_p		/* A core file.  */
    129   },
    130 
    131   /* bfd_set_format: set the format of a file being written.  */
    132   { bfd_false,
    133     nlm_mkobject,
    134     _bfd_generic_mkarchive,
    135     bfd_false
    136   },
    137 
    138   /* bfd_write_contents: write cached information into a file being written.  */
    139   { bfd_false,
    140     nlmNAME (write_object_contents),
    141     _bfd_write_archive_contents,
    142     bfd_false
    143   },
    144 
    145   /* Initialize a jump table with the standard macro.
    146      All names start with "nlm".  */
    147   BFD_JUMP_TABLE_GENERIC (_bfd_generic),
    148   BFD_JUMP_TABLE_COPY (_bfd_generic),
    149   BFD_JUMP_TABLE_CORE (_bfd_nocore),
    150   BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
    151   BFD_JUMP_TABLE_SYMBOLS (nlm),
    152   BFD_JUMP_TABLE_RELOCS (nlm),
    153   BFD_JUMP_TABLE_WRITE (nlm),
    154   BFD_JUMP_TABLE_LINK (nlm),
    155   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
    156 
    157   /* Alternative endian target.  */
    158 #ifdef TARGET_LITTLE_SYM
    159   & TARGET_LITTLE_SYM,
    160 #else
    161   NULL,
    162 #endif
    163 
    164   /* Backend_data.  */
    165   (void *) TARGET_BACKEND_DATA
    166 };
    167 #endif
    168 
    169 #ifdef TARGET_LITTLE_SYM
    170 const bfd_target TARGET_LITTLE_SYM =
    171 {
    172   /* Name: identify kind of target.  */
    173   TARGET_LITTLE_NAME,
    174 
    175   /* Flavour: general indication about file.  */
    176   bfd_target_nlm_flavour,
    177 
    178   /* Byteorder: data is little endian.  */
    179   BFD_ENDIAN_LITTLE,
    180 
    181   /* Header_byteorder: header is also little endian.  */
    182   BFD_ENDIAN_LITTLE,
    183 
    184   /* Object_flags: mask of all file flags.  */
    185   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
    186    | WP_TEXT),
    187 
    188   /* Section_flags: mask of all section flags.  */
    189   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
    190    | SEC_DATA),
    191 
    192    /* Leading_symbol_char: is the first char of a user symbol
    193       predictable, and if so what is it.  */
    194    0,
    195 
    196   /* AR_pad_char: pad character for filenames within an archive header
    197      FIXME:  this really has nothing to do with NLM, this is a characteristic
    198      of the archiver and/or os and should be independently tunable.  */
    199   '/',
    200 
    201   /* AR_max_namelen: maximum number of characters in an archive header
    202      FIXME:  this really has nothing to do with NLM, this is a characteristic
    203      of the archiver and should be independently tunable.  This value is
    204      a WAG (wild a** guess).  */
    205   15,
    206   0,				/* match priority.  */
    207 
    208   /* Routines to byte-swap various sized integers from the data sections.  */
    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,
    212 
    213   /* Routines to byte-swap various sized integers from the file headers.  */
    214   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
    215   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
    216   bfd_getl16, bfd_getl_signed_16, bfd_putl16,
    217 
    218   /* bfd_check_format: check the format of a file being read.  */
    219   { _bfd_dummy_target,		/* Unknown format.  */
    220     nlmNAME(object_p),		/* Assembler/linker output (object file).  */
    221     bfd_generic_archive_p,	/* An archive.  */
    222     nlm_core_file_p		/* A core file.  */
    223   },
    224 
    225   /* bfd_set_format: set the format of a file being written.  */
    226   { bfd_false,
    227     nlm_mkobject,
    228     _bfd_generic_mkarchive,
    229     bfd_false
    230   },
    231 
    232   /* bfd_write_contents: write cached information into a file being written.  */
    233   { bfd_false,
    234     nlmNAME(write_object_contents),
    235     _bfd_write_archive_contents,
    236     bfd_false
    237   },
    238 
    239   /* Initialize a jump table with the standard macro.
    240      All names start with "nlm".  */
    241   BFD_JUMP_TABLE_GENERIC (_bfd_generic),
    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 (nlm),
    246   BFD_JUMP_TABLE_RELOCS (nlm),
    247   BFD_JUMP_TABLE_WRITE (nlm),
    248   BFD_JUMP_TABLE_LINK (nlm),
    249   BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
    250 
    251   /* Alternative endian target.  */
    252 #ifdef TARGET_BIG_SYM
    253   & TARGET_BIG_SYM,
    254 #else
    255   NULL,
    256 #endif
    257 
    258   /* Backend_data.  */
    259   (void *) TARGET_BACKEND_DATA
    260 };
    261 #endif
    262