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