1 /* Generic COFF swapping routines, for BFD. 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000 3 Free Software Foundation, Inc. 4 Written by Cygnus Support. 5 6 This file is part of BFD, the Binary File Descriptor library. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 21 22 /* This file contains routines used to swap COFF data. It is a header 23 file because the details of swapping depend on the details of the 24 structures used by each COFF implementation. This is included by 25 coffcode.h, as well as by the ECOFF backend. 26 27 Any file which uses this must first include "coff/internal.h" and 28 "coff/CPU.h". The functions will then be correct for that CPU. */ 29 30 #define PUTWORD bfd_h_put_32 31 #define PUTHALF bfd_h_put_16 32 #define PUTBYTE bfd_h_put_8 33 34 #ifndef GET_FCN_LNNOPTR 35 #define GET_FCN_LNNOPTR(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_lnnoptr) 36 #endif 37 38 #ifndef GET_FCN_ENDNDX 39 #define GET_FCN_ENDNDX(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_endndx) 40 #endif 41 42 #ifndef PUT_FCN_LNNOPTR 43 #define PUT_FCN_LNNOPTR(abfd, in, ext) PUTWORD(abfd, in, (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_lnnoptr) 44 #endif 45 #ifndef PUT_FCN_ENDNDX 46 #define PUT_FCN_ENDNDX(abfd, in, ext) PUTWORD(abfd, in, (bfd_byte *) ext->x_sym.x_fcnary.x_fcn.x_endndx) 47 #endif 48 #ifndef GET_LNSZ_LNNO 49 #define GET_LNSZ_LNNO(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_lnno) 50 #endif 51 #ifndef GET_LNSZ_SIZE 52 #define GET_LNSZ_SIZE(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_size) 53 #endif 54 #ifndef PUT_LNSZ_LNNO 55 #define PUT_LNSZ_LNNO(abfd, in, ext) bfd_h_put_16(abfd, in, (bfd_byte *)ext->x_sym.x_misc.x_lnsz.x_lnno) 56 #endif 57 #ifndef PUT_LNSZ_SIZE 58 #define PUT_LNSZ_SIZE(abfd, in, ext) bfd_h_put_16(abfd, in, (bfd_byte*) ext->x_sym.x_misc.x_lnsz.x_size) 59 #endif 60 #ifndef GET_SCN_SCNLEN 61 #define GET_SCN_SCNLEN(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_scn.x_scnlen) 62 #endif 63 #ifndef GET_SCN_NRELOC 64 #define GET_SCN_NRELOC(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *)ext->x_scn.x_nreloc) 65 #endif 66 #ifndef GET_SCN_NLINNO 67 #define GET_SCN_NLINNO(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *)ext->x_scn.x_nlinno) 68 #endif 69 #ifndef PUT_SCN_SCNLEN 70 #define PUT_SCN_SCNLEN(abfd,in, ext) bfd_h_put_32(abfd, in, (bfd_byte *) ext->x_scn.x_scnlen) 71 #endif 72 #ifndef PUT_SCN_NRELOC 73 #define PUT_SCN_NRELOC(abfd,in, ext) bfd_h_put_16(abfd, in, (bfd_byte *)ext->x_scn.x_nreloc) 74 #endif 75 #ifndef PUT_SCN_NLINNO 76 #define PUT_SCN_NLINNO(abfd,in, ext) bfd_h_put_16(abfd,in, (bfd_byte *) ext->x_scn.x_nlinno) 77 #endif 78 #ifndef GET_LINENO_LNNO 79 #define GET_LINENO_LNNO(abfd, ext) bfd_h_get_16(abfd, (bfd_byte *) (ext->l_lnno)); 80 #endif 81 #ifndef PUT_LINENO_LNNO 82 #define PUT_LINENO_LNNO(abfd,val, ext) bfd_h_put_16(abfd,val, (bfd_byte *) (ext->l_lnno)); 83 #endif 84 85 /* The f_symptr field in the filehdr is sometimes 64 bits. */ 86 #ifndef GET_FILEHDR_SYMPTR 87 #define GET_FILEHDR_SYMPTR bfd_h_get_32 88 #endif 89 #ifndef PUT_FILEHDR_SYMPTR 90 #define PUT_FILEHDR_SYMPTR bfd_h_put_32 91 #endif 92 93 /* Some fields in the aouthdr are sometimes 64 bits. */ 94 #ifndef GET_AOUTHDR_TSIZE 95 #define GET_AOUTHDR_TSIZE bfd_h_get_32 96 #endif 97 #ifndef PUT_AOUTHDR_TSIZE 98 #define PUT_AOUTHDR_TSIZE bfd_h_put_32 99 #endif 100 #ifndef GET_AOUTHDR_DSIZE 101 #define GET_AOUTHDR_DSIZE bfd_h_get_32 102 #endif 103 #ifndef PUT_AOUTHDR_DSIZE 104 #define PUT_AOUTHDR_DSIZE bfd_h_put_32 105 #endif 106 #ifndef GET_AOUTHDR_BSIZE 107 #define GET_AOUTHDR_BSIZE bfd_h_get_32 108 #endif 109 #ifndef PUT_AOUTHDR_BSIZE 110 #define PUT_AOUTHDR_BSIZE bfd_h_put_32 111 #endif 112 #ifndef GET_AOUTHDR_ENTRY 113 #define GET_AOUTHDR_ENTRY bfd_h_get_32 114 #endif 115 #ifndef PUT_AOUTHDR_ENTRY 116 #define PUT_AOUTHDR_ENTRY bfd_h_put_32 117 #endif 118 #ifndef GET_AOUTHDR_TEXT_START 119 #define GET_AOUTHDR_TEXT_START bfd_h_get_32 120 #endif 121 #ifndef PUT_AOUTHDR_TEXT_START 122 #define PUT_AOUTHDR_TEXT_START bfd_h_put_32 123 #endif 124 #ifndef GET_AOUTHDR_DATA_START 125 #define GET_AOUTHDR_DATA_START bfd_h_get_32 126 #endif 127 #ifndef PUT_AOUTHDR_DATA_START 128 #define PUT_AOUTHDR_DATA_START bfd_h_put_32 129 #endif 130 131 /* Some fields in the scnhdr are sometimes 64 bits. */ 132 #ifndef GET_SCNHDR_PADDR 133 #define GET_SCNHDR_PADDR bfd_h_get_32 134 #endif 135 #ifndef PUT_SCNHDR_PADDR 136 #define PUT_SCNHDR_PADDR bfd_h_put_32 137 #endif 138 #ifndef GET_SCNHDR_VADDR 139 #define GET_SCNHDR_VADDR bfd_h_get_32 140 #endif 141 #ifndef PUT_SCNHDR_VADDR 142 #define PUT_SCNHDR_VADDR bfd_h_put_32 143 #endif 144 #ifndef GET_SCNHDR_SIZE 145 #define GET_SCNHDR_SIZE bfd_h_get_32 146 #endif 147 #ifndef PUT_SCNHDR_SIZE 148 #define PUT_SCNHDR_SIZE bfd_h_put_32 149 #endif 150 #ifndef GET_SCNHDR_SCNPTR 151 #define GET_SCNHDR_SCNPTR bfd_h_get_32 152 #endif 153 #ifndef PUT_SCNHDR_SCNPTR 154 #define PUT_SCNHDR_SCNPTR bfd_h_put_32 155 #endif 156 #ifndef GET_SCNHDR_RELPTR 157 #define GET_SCNHDR_RELPTR bfd_h_get_32 158 #endif 159 #ifndef PUT_SCNHDR_RELPTR 160 #define PUT_SCNHDR_RELPTR bfd_h_put_32 161 #endif 162 #ifndef GET_SCNHDR_LNNOPTR 163 #define GET_SCNHDR_LNNOPTR bfd_h_get_32 164 #endif 165 #ifndef PUT_SCNHDR_LNNOPTR 166 #define PUT_SCNHDR_LNNOPTR bfd_h_put_32 167 #endif 168 #ifndef GET_SCNHDR_NRELOC 169 #define GET_SCNHDR_NRELOC bfd_h_get_16 170 #endif 171 #ifndef MAX_SCNHDR_NRELOC 172 #define MAX_SCNHDR_NRELOC 0xffff 173 #endif 174 #ifndef PUT_SCNHDR_NRELOC 175 #define PUT_SCNHDR_NRELOC bfd_h_put_16 176 #endif 177 #ifndef GET_SCNHDR_NLNNO 178 #define GET_SCNHDR_NLNNO bfd_h_get_16 179 #endif 180 #ifndef MAX_SCNHDR_NLNNO 181 #define MAX_SCNHDR_NLNNO 0xffff 182 #endif 183 #ifndef PUT_SCNHDR_NLNNO 184 #define PUT_SCNHDR_NLNNO bfd_h_put_16 185 #endif 186 #ifndef GET_SCNHDR_FLAGS 187 #define GET_SCNHDR_FLAGS bfd_h_get_32 188 #endif 189 #ifndef PUT_SCNHDR_FLAGS 190 #define PUT_SCNHDR_FLAGS bfd_h_put_32 191 #endif 192 193 #ifndef GET_RELOC_VADDR 194 #define GET_RELOC_VADDR bfd_h_get_32 195 #endif 196 #ifndef PUT_RELOC_VADDR 197 #define PUT_RELOC_VADDR bfd_h_put_32 198 #endif 199 200 static void coff_swap_aouthdr_in PARAMS ((bfd *, PTR, PTR)); 201 static unsigned int coff_swap_aouthdr_out PARAMS ((bfd *, PTR, PTR)); 202 static void coff_swap_scnhdr_in PARAMS ((bfd *, PTR, PTR)); 203 static unsigned int coff_swap_scnhdr_out PARAMS ((bfd *, PTR, PTR)); 204 static void coff_swap_filehdr_in PARAMS ((bfd *, PTR, PTR)); 205 static unsigned int coff_swap_filehdr_out PARAMS ((bfd *, PTR, PTR)); 206 #ifndef NO_COFF_RELOCS 207 static void coff_swap_reloc_in PARAMS ((bfd *, PTR, PTR)); 208 static unsigned int coff_swap_reloc_out PARAMS ((bfd *, PTR, PTR)); 209 #endif /* NO_COFF_RELOCS */ 210 #ifndef NO_COFF_SYMBOLS 211 static void coff_swap_sym_in PARAMS ((bfd *, PTR, PTR)); 212 static unsigned int coff_swap_sym_out PARAMS ((bfd *, PTR, PTR)); 213 static void coff_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR)); 214 static unsigned int coff_swap_aux_out PARAMS ((bfd *, PTR, int, int, int, int, PTR)); 215 #endif /* NO_COFF_SYMBOLS */ 216 #ifndef NO_COFF_LINENOS 217 static void coff_swap_lineno_in PARAMS ((bfd *, PTR, PTR)); 218 static unsigned int coff_swap_lineno_out PARAMS ((bfd *, PTR, PTR)); 219 #endif /* NO_COFF_LINENOS */ 220 221 #ifndef NO_COFF_RELOCS 222 223 static void 224 coff_swap_reloc_in (abfd, src, dst) 225 bfd *abfd; 226 PTR src; 227 PTR dst; 228 { 229 RELOC *reloc_src = (RELOC *) src; 230 struct internal_reloc *reloc_dst = (struct internal_reloc *) dst; 231 232 reloc_dst->r_vaddr = GET_RELOC_VADDR (abfd, (bfd_byte *)reloc_src->r_vaddr); 233 reloc_dst->r_symndx = bfd_h_get_signed_32(abfd, (bfd_byte *) reloc_src->r_symndx); 234 235 #ifdef RS6000COFF_C 236 reloc_dst->r_type = bfd_h_get_8(abfd, reloc_src->r_type); 237 reloc_dst->r_size = bfd_h_get_8(abfd, reloc_src->r_size); 238 #else 239 reloc_dst->r_type = bfd_h_get_16(abfd, (bfd_byte *) reloc_src->r_type); 240 #endif 241 242 #ifdef SWAP_IN_RELOC_OFFSET 243 reloc_dst->r_offset = SWAP_IN_RELOC_OFFSET(abfd, 244 (bfd_byte *) reloc_src->r_offset); 245 #endif 246 } 247 248 static unsigned int 249 coff_swap_reloc_out (abfd, src, dst) 250 bfd *abfd; 251 PTR src; 252 PTR dst; 253 { 254 struct internal_reloc *reloc_src = (struct internal_reloc *)src; 255 struct external_reloc *reloc_dst = (struct external_reloc *)dst; 256 PUT_RELOC_VADDR (abfd, reloc_src->r_vaddr, (bfd_byte *) reloc_dst->r_vaddr); 257 bfd_h_put_32(abfd, reloc_src->r_symndx, (bfd_byte *) reloc_dst->r_symndx); 258 259 #ifdef RS6000COFF_C 260 bfd_h_put_8 (abfd, reloc_src->r_type, (bfd_byte *) reloc_dst->r_type); 261 bfd_h_put_8 (abfd, reloc_src->r_size, (bfd_byte *) reloc_dst->r_size); 262 #else 263 bfd_h_put_16(abfd, reloc_src->r_type, (bfd_byte *) 264 reloc_dst->r_type); 265 #endif 266 267 #ifdef SWAP_OUT_RELOC_OFFSET 268 SWAP_OUT_RELOC_OFFSET(abfd, 269 reloc_src->r_offset, 270 (bfd_byte *) reloc_dst->r_offset); 271 #endif 272 #ifdef SWAP_OUT_RELOC_EXTRA 273 SWAP_OUT_RELOC_EXTRA(abfd,reloc_src, reloc_dst); 274 #endif 275 276 return bfd_coff_relsz (abfd); 277 } 278 279 #endif /* NO_COFF_RELOCS */ 280 281 static void 282 coff_swap_filehdr_in (abfd, src, dst) 283 bfd *abfd; 284 PTR src; 285 PTR dst; 286 { 287 FILHDR *filehdr_src = (FILHDR *) src; 288 struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst; 289 290 #ifdef COFF_ADJUST_FILEHDR_IN_PRE 291 COFF_ADJUST_FILEHDR_IN_PRE (abfd, src, dst); 292 #endif 293 filehdr_dst->f_magic = bfd_h_get_16(abfd, (bfd_byte *) filehdr_src->f_magic); 294 filehdr_dst->f_nscns = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_nscns); 295 filehdr_dst->f_timdat = bfd_h_get_32(abfd, (bfd_byte *)filehdr_src-> f_timdat); 296 filehdr_dst->f_symptr = 297 GET_FILEHDR_SYMPTR (abfd, (bfd_byte *) filehdr_src->f_symptr); 298 filehdr_dst->f_nsyms = bfd_h_get_32(abfd, (bfd_byte *)filehdr_src-> f_nsyms); 299 filehdr_dst->f_opthdr = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_opthdr); 300 filehdr_dst->f_flags = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_flags); 301 #ifdef TIC80_TARGET_ID 302 filehdr_dst->f_target_id = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_target_id); 303 #endif 304 305 #ifdef COFF_ADJUST_FILEHDR_IN_POST 306 COFF_ADJUST_FILEHDR_IN_POST (abfd, src, dst); 307 #endif 308 } 309 310 static unsigned int 311 coff_swap_filehdr_out (abfd, in, out) 312 bfd *abfd; 313 PTR in; 314 PTR out; 315 { 316 struct internal_filehdr *filehdr_in = (struct internal_filehdr *)in; 317 FILHDR *filehdr_out = (FILHDR *)out; 318 319 #ifdef COFF_ADJUST_FILEHDR_OUT_PRE 320 COFF_ADJUST_FILEHDR_OUT_PRE (abfd, in, out); 321 #endif 322 bfd_h_put_16(abfd, filehdr_in->f_magic, (bfd_byte *) filehdr_out->f_magic); 323 bfd_h_put_16(abfd, filehdr_in->f_nscns, (bfd_byte *) filehdr_out->f_nscns); 324 bfd_h_put_32(abfd, filehdr_in->f_timdat, (bfd_byte *) filehdr_out->f_timdat); 325 PUT_FILEHDR_SYMPTR (abfd, (bfd_vma) filehdr_in->f_symptr, 326 (bfd_byte *) filehdr_out->f_symptr); 327 bfd_h_put_32(abfd, filehdr_in->f_nsyms, (bfd_byte *) filehdr_out->f_nsyms); 328 bfd_h_put_16(abfd, filehdr_in->f_opthdr, (bfd_byte *) filehdr_out->f_opthdr); 329 bfd_h_put_16(abfd, filehdr_in->f_flags, (bfd_byte *) filehdr_out->f_flags); 330 #ifdef TIC80_TARGET_ID 331 bfd_h_put_16(abfd, filehdr_in->f_target_id, (bfd_byte *) filehdr_out->f_target_id); 332 #endif 333 334 #ifdef COFF_ADJUST_FILEHDR_OUT_POST 335 COFF_ADJUST_FILEHDR_OUT_POST (abfd, in, out); 336 #endif 337 return bfd_coff_filhsz (abfd); 338 } 339 340 #ifndef NO_COFF_SYMBOLS 341 342 static void 343 coff_swap_sym_in (abfd, ext1, in1) 344 bfd *abfd; 345 PTR ext1; 346 PTR in1; 347 { 348 SYMENT *ext = (SYMENT *)ext1; 349 struct internal_syment *in = (struct internal_syment *)in1; 350 351 if( ext->e.e_name[0] == 0) { 352 in->_n._n_n._n_zeroes = 0; 353 in->_n._n_n._n_offset = bfd_h_get_32(abfd, (bfd_byte *) ext->e.e.e_offset); 354 } 355 else { 356 #if SYMNMLEN != E_SYMNMLEN 357 -> Error, we need to cope with truncating or extending SYMNMLEN!; 358 #else 359 memcpy(in->_n._n_name, ext->e.e_name, SYMNMLEN); 360 #endif 361 } 362 in->n_value = bfd_h_get_32(abfd, (bfd_byte *) ext->e_value); 363 in->n_scnum = bfd_h_get_16(abfd, (bfd_byte *) ext->e_scnum); 364 if (sizeof (ext->e_type) == 2){ 365 in->n_type = bfd_h_get_16(abfd, (bfd_byte *) ext->e_type); 366 } 367 else { 368 in->n_type = bfd_h_get_32(abfd, (bfd_byte *) ext->e_type); 369 } 370 in->n_sclass = bfd_h_get_8(abfd, ext->e_sclass); 371 in->n_numaux = bfd_h_get_8(abfd, ext->e_numaux); 372 #ifdef COFF_ADJUST_SYM_IN_POST 373 COFF_ADJUST_SYM_IN_POST (abfd, ext1, in1); 374 #endif 375 } 376 377 static unsigned int 378 coff_swap_sym_out (abfd, inp, extp) 379 bfd *abfd; 380 PTR inp; 381 PTR extp; 382 { 383 struct internal_syment *in = (struct internal_syment *)inp; 384 SYMENT *ext =(SYMENT *)extp; 385 if(in->_n._n_name[0] == 0) { 386 bfd_h_put_32(abfd, 0, (bfd_byte *) ext->e.e.e_zeroes); 387 bfd_h_put_32(abfd, in->_n._n_n._n_offset, (bfd_byte *) ext->e.e.e_offset); 388 } 389 else { 390 #if SYMNMLEN != E_SYMNMLEN 391 -> Error, we need to cope with truncating or extending SYMNMLEN!; 392 #else 393 memcpy(ext->e.e_name, in->_n._n_name, SYMNMLEN); 394 #endif 395 } 396 bfd_h_put_32(abfd, in->n_value , (bfd_byte *) ext->e_value); 397 bfd_h_put_16(abfd, in->n_scnum , (bfd_byte *) ext->e_scnum); 398 if (sizeof (ext->e_type) == 2) 399 { 400 bfd_h_put_16(abfd, in->n_type , (bfd_byte *) ext->e_type); 401 } 402 else 403 { 404 bfd_h_put_32(abfd, in->n_type , (bfd_byte *) ext->e_type); 405 } 406 bfd_h_put_8(abfd, in->n_sclass , ext->e_sclass); 407 bfd_h_put_8(abfd, in->n_numaux , ext->e_numaux); 408 #ifdef COFF_ADJUST_SYM_OUT_POST 409 COFF_ADJUST_SYM_OUT_POST (abfd, inp, extp); 410 #endif 411 return SYMESZ; 412 } 413 414 static void 415 coff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) 416 bfd *abfd; 417 PTR ext1; 418 int type; 419 int class; 420 int indx; 421 int numaux; 422 PTR in1; 423 { 424 AUXENT *ext = (AUXENT *)ext1; 425 union internal_auxent *in = (union internal_auxent *)in1; 426 427 #ifdef COFF_ADJUST_AUX_IN_PRE 428 COFF_ADJUST_AUX_IN_PRE (abfd, ext1, type, class, indx, numaux, in1); 429 #endif 430 switch (class) { 431 case C_FILE: 432 if (ext->x_file.x_fname[0] == 0) { 433 in->x_file.x_n.x_zeroes = 0; 434 in->x_file.x_n.x_offset = 435 bfd_h_get_32(abfd, (bfd_byte *) ext->x_file.x_n.x_offset); 436 } else { 437 #if FILNMLEN != E_FILNMLEN 438 -> Error, we need to cope with truncating or extending FILNMLEN!; 439 #else 440 if (numaux > 1) 441 { 442 if (indx == 0) 443 memcpy (in->x_file.x_fname, ext->x_file.x_fname, 444 numaux * sizeof (AUXENT)); 445 } 446 else 447 { 448 memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN); 449 } 450 #endif 451 } 452 goto end; 453 454 case C_STAT: 455 #ifdef C_LEAFSTAT 456 case C_LEAFSTAT: 457 #endif 458 case C_HIDDEN: 459 if (type == T_NULL) { 460 in->x_scn.x_scnlen = GET_SCN_SCNLEN(abfd, ext); 461 in->x_scn.x_nreloc = GET_SCN_NRELOC(abfd, ext); 462 in->x_scn.x_nlinno = GET_SCN_NLINNO(abfd, ext); 463 464 /* PE defines some extra fields; we zero them out for 465 safety. */ 466 in->x_scn.x_checksum = 0; 467 in->x_scn.x_associated = 0; 468 in->x_scn.x_comdat = 0; 469 470 goto end; 471 } 472 break; 473 } 474 475 in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx); 476 #ifndef NO_TVNDX 477 in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx); 478 #endif 479 480 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) 481 { 482 in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext); 483 in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext); 484 } 485 else 486 { 487 #if DIMNUM != E_DIMNUM 488 #error we need to cope with truncating or extending DIMNUM 489 #endif 490 in->x_sym.x_fcnary.x_ary.x_dimen[0] = 491 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]); 492 in->x_sym.x_fcnary.x_ary.x_dimen[1] = 493 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]); 494 in->x_sym.x_fcnary.x_ary.x_dimen[2] = 495 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]); 496 in->x_sym.x_fcnary.x_ary.x_dimen[3] = 497 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]); 498 } 499 500 if (ISFCN(type)) { 501 in->x_sym.x_misc.x_fsize = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize); 502 } 503 else { 504 in->x_sym.x_misc.x_lnsz.x_lnno = GET_LNSZ_LNNO(abfd, ext); 505 in->x_sym.x_misc.x_lnsz.x_size = GET_LNSZ_SIZE(abfd, ext); 506 } 507 508 end: ; 509 /* the semicolon is because MSVC doesn't like labels at 510 end of block. */ 511 512 #ifdef COFF_ADJUST_AUX_IN_POST 513 COFF_ADJUST_AUX_IN_POST (abfd, ext1, type, class, indx, numaux, in1); 514 #endif 515 } 516 517 static unsigned int 518 coff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) 519 bfd *abfd; 520 PTR inp; 521 int type; 522 int class; 523 int indx ATTRIBUTE_UNUSED; 524 int numaux ATTRIBUTE_UNUSED; 525 PTR extp; 526 { 527 union internal_auxent *in = (union internal_auxent *)inp; 528 AUXENT *ext = (AUXENT *)extp; 529 530 #ifdef COFF_ADJUST_AUX_OUT_PRE 531 COFF_ADJUST_AUX_OUT_PRE (abfd, inp, type, class, indx, numaux, extp); 532 #endif 533 memset((PTR)ext, 0, AUXESZ); 534 switch (class) { 535 case C_FILE: 536 if (in->x_file.x_fname[0] == 0) { 537 PUTWORD(abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes); 538 PUTWORD(abfd, 539 in->x_file.x_n.x_offset, 540 (bfd_byte *) ext->x_file.x_n.x_offset); 541 } 542 else { 543 #if FILNMLEN != E_FILNMLEN 544 -> Error, we need to cope with truncating or extending FILNMLEN!; 545 #else 546 memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN); 547 #endif 548 } 549 goto end; 550 551 case C_STAT: 552 #ifdef C_LEAFSTAT 553 case C_LEAFSTAT: 554 #endif 555 case C_HIDDEN: 556 if (type == T_NULL) { 557 PUT_SCN_SCNLEN(abfd, in->x_scn.x_scnlen, ext); 558 PUT_SCN_NRELOC(abfd, in->x_scn.x_nreloc, ext); 559 PUT_SCN_NLINNO(abfd, in->x_scn.x_nlinno, ext); 560 goto end; 561 } 562 break; 563 } 564 565 PUTWORD(abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx); 566 #ifndef NO_TVNDX 567 bfd_h_put_16(abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx); 568 #endif 569 570 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) 571 { 572 PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext); 573 PUT_FCN_ENDNDX(abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext); 574 } 575 else 576 { 577 #if DIMNUM != E_DIMNUM 578 #error we need to cope with truncating or extending DIMNUM 579 #endif 580 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0], 581 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]); 582 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1], 583 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]); 584 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2], 585 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]); 586 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3], 587 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]); 588 } 589 590 if (ISFCN (type)) 591 PUTWORD (abfd, in->x_sym.x_misc.x_fsize, 592 (bfd_byte *) ext->x_sym.x_misc.x_fsize); 593 else 594 { 595 PUT_LNSZ_LNNO (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext); 596 PUT_LNSZ_SIZE (abfd, in->x_sym.x_misc.x_lnsz.x_size, ext); 597 } 598 599 end: 600 #ifdef COFF_ADJUST_AUX_OUT_POST 601 COFF_ADJUST_AUX_OUT_POST (abfd, inp, type, class, indx, numaux, extp); 602 #endif 603 return AUXESZ; 604 } 605 606 #endif /* NO_COFF_SYMBOLS */ 607 608 #ifndef NO_COFF_LINENOS 609 610 static void 611 coff_swap_lineno_in (abfd, ext1, in1) 612 bfd *abfd; 613 PTR ext1; 614 PTR in1; 615 { 616 LINENO *ext = (LINENO *)ext1; 617 struct internal_lineno *in = (struct internal_lineno *)in1; 618 619 in->l_addr.l_symndx = bfd_h_get_32(abfd, (bfd_byte *) ext->l_addr.l_symndx); 620 in->l_lnno = GET_LINENO_LNNO(abfd, ext); 621 } 622 623 static unsigned int 624 coff_swap_lineno_out (abfd, inp, outp) 625 bfd *abfd; 626 PTR inp; 627 PTR outp; 628 { 629 struct internal_lineno *in = (struct internal_lineno *)inp; 630 struct external_lineno *ext = (struct external_lineno *)outp; 631 PUTWORD(abfd, in->l_addr.l_symndx, (bfd_byte *) 632 ext->l_addr.l_symndx); 633 634 PUT_LINENO_LNNO (abfd, in->l_lnno, ext); 635 return LINESZ; 636 } 637 638 #endif /* NO_COFF_LINENOS */ 639 640 static void 641 coff_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1) 642 bfd *abfd; 643 PTR aouthdr_ext1; 644 PTR aouthdr_int1; 645 { 646 AOUTHDR *aouthdr_ext = (AOUTHDR *) aouthdr_ext1; 647 struct internal_aouthdr *aouthdr_int = (struct internal_aouthdr *)aouthdr_int1; 648 649 aouthdr_int->magic = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->magic); 650 aouthdr_int->vstamp = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->vstamp); 651 aouthdr_int->tsize = 652 GET_AOUTHDR_TSIZE (abfd, (bfd_byte *) aouthdr_ext->tsize); 653 aouthdr_int->dsize = 654 GET_AOUTHDR_DSIZE (abfd, (bfd_byte *) aouthdr_ext->dsize); 655 aouthdr_int->bsize = 656 GET_AOUTHDR_BSIZE (abfd, (bfd_byte *) aouthdr_ext->bsize); 657 aouthdr_int->entry = 658 GET_AOUTHDR_ENTRY (abfd, (bfd_byte *) aouthdr_ext->entry); 659 aouthdr_int->text_start = 660 GET_AOUTHDR_TEXT_START (abfd, (bfd_byte *) aouthdr_ext->text_start); 661 aouthdr_int->data_start = 662 GET_AOUTHDR_DATA_START (abfd, (bfd_byte *) aouthdr_ext->data_start); 663 664 #ifdef I960 665 aouthdr_int->tagentries = bfd_h_get_32(abfd, (bfd_byte *) aouthdr_ext->tagentries); 666 #endif 667 668 #ifdef APOLLO_M68 669 bfd_h_put_32(abfd, aouthdr_int->o_inlib, (bfd_byte *) aouthdr_ext->o_inlib); 670 bfd_h_put_32(abfd, aouthdr_int->o_sri, (bfd_byte *) aouthdr_ext->o_sri); 671 bfd_h_put_32(abfd, aouthdr_int->vid[0], (bfd_byte *) aouthdr_ext->vid); 672 bfd_h_put_32(abfd, aouthdr_int->vid[1], (bfd_byte *) aouthdr_ext->vid + 4); 673 #endif 674 675 #ifdef RS6000COFF_C 676 #ifdef XCOFF64 677 aouthdr_int->o_toc = bfd_h_get_64(abfd, aouthdr_ext->o_toc); 678 #else 679 aouthdr_int->o_toc = bfd_h_get_32(abfd, aouthdr_ext->o_toc); 680 #endif 681 aouthdr_int->o_snentry = bfd_h_get_16(abfd, aouthdr_ext->o_snentry); 682 aouthdr_int->o_sntext = bfd_h_get_16(abfd, aouthdr_ext->o_sntext); 683 aouthdr_int->o_sndata = bfd_h_get_16(abfd, aouthdr_ext->o_sndata); 684 aouthdr_int->o_sntoc = bfd_h_get_16(abfd, aouthdr_ext->o_sntoc); 685 aouthdr_int->o_snloader = bfd_h_get_16(abfd, aouthdr_ext->o_snloader); 686 aouthdr_int->o_snbss = bfd_h_get_16(abfd, aouthdr_ext->o_snbss); 687 aouthdr_int->o_algntext = bfd_h_get_16(abfd, aouthdr_ext->o_algntext); 688 aouthdr_int->o_algndata = bfd_h_get_16(abfd, aouthdr_ext->o_algndata); 689 aouthdr_int->o_modtype = bfd_h_get_16(abfd, aouthdr_ext->o_modtype); 690 aouthdr_int->o_cputype = bfd_h_get_16(abfd, aouthdr_ext->o_cputype); 691 #ifdef XCOFF64 692 aouthdr_int->o_maxstack = bfd_h_get_64(abfd, aouthdr_ext->o_maxstack); 693 aouthdr_int->o_maxdata = bfd_h_get_64(abfd, aouthdr_ext->o_maxdata); 694 #else 695 aouthdr_int->o_maxstack = bfd_h_get_32(abfd, aouthdr_ext->o_maxstack); 696 aouthdr_int->o_maxdata = bfd_h_get_32(abfd, aouthdr_ext->o_maxdata); 697 #endif 698 #endif 699 700 #ifdef MIPSECOFF 701 aouthdr_int->bss_start = bfd_h_get_32(abfd, aouthdr_ext->bss_start); 702 aouthdr_int->gp_value = bfd_h_get_32(abfd, aouthdr_ext->gp_value); 703 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask); 704 aouthdr_int->cprmask[0] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[0]); 705 aouthdr_int->cprmask[1] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[1]); 706 aouthdr_int->cprmask[2] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[2]); 707 aouthdr_int->cprmask[3] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[3]); 708 #endif 709 710 #ifdef ALPHAECOFF 711 aouthdr_int->bss_start = bfd_h_get_64(abfd, aouthdr_ext->bss_start); 712 aouthdr_int->gp_value = bfd_h_get_64(abfd, aouthdr_ext->gp_value); 713 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask); 714 aouthdr_int->fprmask = bfd_h_get_32(abfd, aouthdr_ext->fprmask); 715 #endif 716 } 717 718 static unsigned int 719 coff_swap_aouthdr_out (abfd, in, out) 720 bfd *abfd; 721 PTR in; 722 PTR out; 723 { 724 struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *)in; 725 AOUTHDR *aouthdr_out = (AOUTHDR *)out; 726 727 bfd_h_put_16(abfd, aouthdr_in->magic, (bfd_byte *) aouthdr_out->magic); 728 bfd_h_put_16(abfd, aouthdr_in->vstamp, (bfd_byte *) aouthdr_out->vstamp); 729 PUT_AOUTHDR_TSIZE (abfd, aouthdr_in->tsize, (bfd_byte *) aouthdr_out->tsize); 730 PUT_AOUTHDR_DSIZE (abfd, aouthdr_in->dsize, (bfd_byte *) aouthdr_out->dsize); 731 PUT_AOUTHDR_BSIZE (abfd, aouthdr_in->bsize, (bfd_byte *) aouthdr_out->bsize); 732 PUT_AOUTHDR_ENTRY (abfd, aouthdr_in->entry, (bfd_byte *) aouthdr_out->entry); 733 PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start, 734 (bfd_byte *) aouthdr_out->text_start); 735 PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start, 736 (bfd_byte *) aouthdr_out->data_start); 737 738 #ifdef I960 739 bfd_h_put_32(abfd, aouthdr_in->tagentries, (bfd_byte *) aouthdr_out->tagentries); 740 #endif 741 742 #ifdef RS6000COFF_C 743 #ifdef XCOFF64 744 bfd_h_put_64 (abfd, aouthdr_in->o_toc, aouthdr_out->o_toc); 745 #else 746 bfd_h_put_32 (abfd, aouthdr_in->o_toc, aouthdr_out->o_toc); 747 #endif 748 bfd_h_put_16 (abfd, aouthdr_in->o_snentry, aouthdr_out->o_snentry); 749 bfd_h_put_16 (abfd, aouthdr_in->o_sntext, aouthdr_out->o_sntext); 750 bfd_h_put_16 (abfd, aouthdr_in->o_sndata, aouthdr_out->o_sndata); 751 bfd_h_put_16 (abfd, aouthdr_in->o_sntoc, aouthdr_out->o_sntoc); 752 bfd_h_put_16 (abfd, aouthdr_in->o_snloader, aouthdr_out->o_snloader); 753 bfd_h_put_16 (abfd, aouthdr_in->o_snbss, aouthdr_out->o_snbss); 754 bfd_h_put_16 (abfd, aouthdr_in->o_algntext, aouthdr_out->o_algntext); 755 bfd_h_put_16 (abfd, aouthdr_in->o_algndata, aouthdr_out->o_algndata); 756 bfd_h_put_16 (abfd, aouthdr_in->o_modtype, aouthdr_out->o_modtype); 757 bfd_h_put_16 (abfd, aouthdr_in->o_cputype, aouthdr_out->o_cputype); 758 #ifdef XCOFF64 759 bfd_h_put_64 (abfd, aouthdr_in->o_maxstack, aouthdr_out->o_maxstack); 760 bfd_h_put_64 (abfd, aouthdr_in->o_maxdata, aouthdr_out->o_maxdata); 761 #else 762 bfd_h_put_32 (abfd, aouthdr_in->o_maxstack, aouthdr_out->o_maxstack); 763 bfd_h_put_32 (abfd, aouthdr_in->o_maxdata, aouthdr_out->o_maxdata); 764 #endif 765 memset (aouthdr_out->o_resv2, 0, sizeof aouthdr_out->o_resv2); 766 #ifdef XCOFF64 767 memset (aouthdr_out->o_debugger, 0, sizeof aouthdr_out->o_debugger); 768 memset (aouthdr_out->o_resv3, 0, sizeof aouthdr_out->o_resv3); 769 #endif 770 #endif 771 772 #ifdef MIPSECOFF 773 bfd_h_put_32(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start); 774 bfd_h_put_32(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value); 775 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask); 776 bfd_h_put_32(abfd, aouthdr_in->cprmask[0], (bfd_byte *) aouthdr_out->cprmask[0]); 777 bfd_h_put_32(abfd, aouthdr_in->cprmask[1], (bfd_byte *) aouthdr_out->cprmask[1]); 778 bfd_h_put_32(abfd, aouthdr_in->cprmask[2], (bfd_byte *) aouthdr_out->cprmask[2]); 779 bfd_h_put_32(abfd, aouthdr_in->cprmask[3], (bfd_byte *) aouthdr_out->cprmask[3]); 780 #endif 781 782 #ifdef ALPHAECOFF 783 /* FIXME: What does bldrev mean? */ 784 bfd_h_put_16(abfd, (bfd_vma) 2, (bfd_byte *) aouthdr_out->bldrev); 785 bfd_h_put_16(abfd, (bfd_vma) 0, (bfd_byte *) aouthdr_out->padding); 786 bfd_h_put_64(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start); 787 bfd_h_put_64(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value); 788 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask); 789 bfd_h_put_32(abfd, aouthdr_in->fprmask, (bfd_byte *) aouthdr_out->fprmask); 790 #endif 791 792 return AOUTSZ; 793 } 794 795 static void 796 coff_swap_scnhdr_in (abfd, ext, in) 797 bfd *abfd; 798 PTR ext; 799 PTR in; 800 { 801 SCNHDR *scnhdr_ext = (SCNHDR *) ext; 802 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; 803 804 #ifdef COFF_ADJUST_SCNHDR_IN_PRE 805 COFF_ADJUST_SCNHDR_IN_PRE (abfd, ext, in); 806 #endif 807 memcpy(scnhdr_int->s_name, scnhdr_ext->s_name, sizeof (scnhdr_int->s_name)); 808 scnhdr_int->s_vaddr = 809 GET_SCNHDR_VADDR (abfd, (bfd_byte *) scnhdr_ext->s_vaddr); 810 scnhdr_int->s_paddr = 811 GET_SCNHDR_PADDR (abfd, (bfd_byte *) scnhdr_ext->s_paddr); 812 scnhdr_int->s_size = 813 GET_SCNHDR_SIZE (abfd, (bfd_byte *) scnhdr_ext->s_size); 814 815 scnhdr_int->s_scnptr = 816 GET_SCNHDR_SCNPTR (abfd, (bfd_byte *) scnhdr_ext->s_scnptr); 817 scnhdr_int->s_relptr = 818 GET_SCNHDR_RELPTR (abfd, (bfd_byte *) scnhdr_ext->s_relptr); 819 scnhdr_int->s_lnnoptr = 820 GET_SCNHDR_LNNOPTR (abfd, (bfd_byte *) scnhdr_ext->s_lnnoptr); 821 scnhdr_int->s_flags = 822 GET_SCNHDR_FLAGS (abfd, (bfd_byte *) scnhdr_ext->s_flags); 823 scnhdr_int->s_nreloc = 824 GET_SCNHDR_NRELOC (abfd, (bfd_byte *) scnhdr_ext->s_nreloc); 825 scnhdr_int->s_nlnno = 826 GET_SCNHDR_NLNNO (abfd, (bfd_byte *) scnhdr_ext->s_nlnno); 827 #ifdef I960 828 scnhdr_int->s_align = 829 GET_SCNHDR_ALIGN (abfd, (bfd_byte *) scnhdr_ext->s_align); 830 #endif 831 #ifdef COFF_ADJUST_SCNHDR_IN_POST 832 COFF_ADJUST_SCNHDR_IN_POST (abfd, ext, in); 833 #endif 834 } 835 836 static unsigned int 837 coff_swap_scnhdr_out (abfd, in, out) 838 bfd *abfd; 839 PTR in; 840 PTR out; 841 { 842 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *)in; 843 SCNHDR *scnhdr_ext = (SCNHDR *)out; 844 unsigned int ret = bfd_coff_scnhsz (abfd); 845 846 #ifdef COFF_ADJUST_SCNHDR_OUT_PRE 847 COFF_ADJUST_SCNHDR_OUT_PRE (abfd, in, out); 848 #endif 849 memcpy(scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); 850 851 PUT_SCNHDR_VADDR (abfd, scnhdr_int->s_vaddr, 852 (bfd_byte *) scnhdr_ext->s_vaddr); 853 854 PUT_SCNHDR_PADDR (abfd, scnhdr_int->s_paddr, 855 (bfd_byte *) scnhdr_ext->s_paddr); 856 PUT_SCNHDR_SIZE (abfd, scnhdr_int->s_size, 857 (bfd_byte *) scnhdr_ext->s_size); 858 859 PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr, 860 (bfd_byte *) scnhdr_ext->s_scnptr); 861 PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr, 862 (bfd_byte *) scnhdr_ext->s_relptr); 863 PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr, 864 (bfd_byte *) scnhdr_ext->s_lnnoptr); 865 PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags, 866 (bfd_byte *) scnhdr_ext->s_flags); 867 #if defined(M88) 868 PUTWORD(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno); 869 PUTWORD(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc); 870 #else 871 if (scnhdr_int->s_nlnno <= MAX_SCNHDR_NLNNO) 872 PUT_SCNHDR_NLNNO(abfd, scnhdr_int->s_nlnno, 873 (bfd_byte *) scnhdr_ext->s_nlnno); 874 else 875 { 876 char buf[sizeof (scnhdr_int->s_name) + 1]; 877 878 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); 879 buf[sizeof (scnhdr_int->s_name)] = '\0'; 880 (*_bfd_error_handler) 881 (_("%s: warning: %s: line number overflow: 0x%lx > 0xffff"), 882 bfd_get_filename (abfd), 883 buf, scnhdr_int->s_nlnno); 884 PUT_SCNHDR_NLNNO(abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nlnno); 885 } 886 if (scnhdr_int->s_nreloc <= MAX_SCNHDR_NRELOC) 887 PUT_SCNHDR_NRELOC(abfd, scnhdr_int->s_nreloc, 888 (bfd_byte *) scnhdr_ext->s_nreloc); 889 else 890 { 891 char buf[sizeof (scnhdr_int->s_name) + 1]; 892 893 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); 894 buf[sizeof (scnhdr_int->s_name)] = '\0'; 895 (*_bfd_error_handler) (_("%s: %s: reloc overflow: 0x%lx > 0xffff"), 896 bfd_get_filename (abfd), 897 buf, scnhdr_int->s_nreloc); 898 bfd_set_error (bfd_error_file_truncated); 899 PUT_SCNHDR_NRELOC(abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc); 900 ret = 0; 901 } 902 #endif 903 904 #ifdef I960 905 PUT_SCNHDR_ALIGN (abfd, scnhdr_int->s_align, (bfd_byte *) scnhdr_ext->s_align); 906 #endif 907 #ifdef COFF_ADJUST_SCNHDR_OUT_POST 908 COFF_ADJUST_SCNHDR_OUT_POST (abfd, in, out); 909 #endif 910 return ret; 911 } 912