Applied Tim Wall's patch to replace RELSZ and friends with bfd_coff_relsz and
[deliverable/binutils-gdb.git] / bfd / coffswap.h
1 /* Generic COFF swapping routines, for BFD.
2 Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
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 PUT_SCNHDR_NRELOC
172 #define PUT_SCNHDR_NRELOC bfd_h_put_16
173 #endif
174 #ifndef GET_SCNHDR_NLNNO
175 #define GET_SCNHDR_NLNNO bfd_h_get_16
176 #endif
177 #ifndef PUT_SCNHDR_NLNNO
178 #define PUT_SCNHDR_NLNNO bfd_h_put_16
179 #endif
180 #ifndef GET_SCNHDR_FLAGS
181 #define GET_SCNHDR_FLAGS bfd_h_get_32
182 #endif
183 #ifndef PUT_SCNHDR_FLAGS
184 #define PUT_SCNHDR_FLAGS bfd_h_put_32
185 #endif
186
187
188 static void coff_swap_aouthdr_in PARAMS ((bfd *, PTR, PTR));
189 static unsigned int coff_swap_aouthdr_out PARAMS ((bfd *, PTR, PTR));
190 static void coff_swap_scnhdr_in PARAMS ((bfd *, PTR, PTR));
191 static unsigned int coff_swap_scnhdr_out PARAMS ((bfd *, PTR, PTR));
192 static void coff_swap_filehdr_in PARAMS ((bfd *, PTR, PTR));
193 static unsigned int coff_swap_filehdr_out PARAMS ((bfd *, PTR, PTR));
194 #ifndef NO_COFF_RELOCS
195 static void coff_swap_reloc_in PARAMS ((bfd *, PTR, PTR));
196 static unsigned int coff_swap_reloc_out PARAMS ((bfd *, PTR, PTR));
197 #endif /* NO_COFF_RELOCS */
198 #ifndef NO_COFF_SYMBOLS
199 static void coff_swap_sym_in PARAMS ((bfd *, PTR, PTR));
200 static unsigned int coff_swap_sym_out PARAMS ((bfd *, PTR, PTR));
201 static void coff_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR));
202 static unsigned int coff_swap_aux_out PARAMS ((bfd *, PTR, int, int, int, int, PTR));
203 #endif /* NO_COFF_SYMBOLS */
204 #ifndef NO_COFF_LINENOS
205 static void coff_swap_lineno_in PARAMS ((bfd *, PTR, PTR));
206 static unsigned int coff_swap_lineno_out PARAMS ((bfd *, PTR, PTR));
207 #endif /* NO_COFF_LINENOS */
208
209 #ifndef NO_COFF_RELOCS
210
211 static void
212 coff_swap_reloc_in (abfd, src, dst)
213 bfd *abfd;
214 PTR src;
215 PTR dst;
216 {
217 RELOC *reloc_src = (RELOC *) src;
218 struct internal_reloc *reloc_dst = (struct internal_reloc *) dst;
219
220 reloc_dst->r_vaddr = bfd_h_get_32(abfd, (bfd_byte *)reloc_src->r_vaddr);
221 reloc_dst->r_symndx = bfd_h_get_signed_32(abfd, (bfd_byte *) reloc_src->r_symndx);
222
223 #ifdef RS6000COFF_C
224 reloc_dst->r_type = bfd_h_get_8(abfd, reloc_src->r_type);
225 reloc_dst->r_size = bfd_h_get_8(abfd, reloc_src->r_size);
226 #else
227 reloc_dst->r_type = bfd_h_get_16(abfd, (bfd_byte *) reloc_src->r_type);
228 #endif
229
230 #ifdef SWAP_IN_RELOC_OFFSET
231 reloc_dst->r_offset = SWAP_IN_RELOC_OFFSET(abfd,
232 (bfd_byte *) reloc_src->r_offset);
233 #endif
234 }
235
236 static unsigned int
237 coff_swap_reloc_out (abfd, src, dst)
238 bfd *abfd;
239 PTR src;
240 PTR dst;
241 {
242 struct internal_reloc *reloc_src = (struct internal_reloc *)src;
243 struct external_reloc *reloc_dst = (struct external_reloc *)dst;
244 bfd_h_put_32(abfd, reloc_src->r_vaddr, (bfd_byte *) reloc_dst->r_vaddr);
245 bfd_h_put_32(abfd, reloc_src->r_symndx, (bfd_byte *) reloc_dst->r_symndx);
246
247 #ifdef RS6000COFF_C
248 bfd_h_put_8 (abfd, reloc_src->r_type, (bfd_byte *) reloc_dst->r_type);
249 bfd_h_put_8 (abfd, reloc_src->r_size, (bfd_byte *) reloc_dst->r_size);
250 #else
251 bfd_h_put_16(abfd, reloc_src->r_type, (bfd_byte *)
252 reloc_dst->r_type);
253 #endif
254
255 #ifdef SWAP_OUT_RELOC_OFFSET
256 SWAP_OUT_RELOC_OFFSET(abfd,
257 reloc_src->r_offset,
258 (bfd_byte *) reloc_dst->r_offset);
259 #endif
260 #ifdef SWAP_OUT_RELOC_EXTRA
261 SWAP_OUT_RELOC_EXTRA(abfd,reloc_src, reloc_dst);
262 #endif
263
264 return bfd_coff_relsz (abfd);
265 }
266
267 #endif /* NO_COFF_RELOCS */
268
269 static void
270 coff_swap_filehdr_in (abfd, src, dst)
271 bfd *abfd;
272 PTR src;
273 PTR dst;
274 {
275 FILHDR *filehdr_src = (FILHDR *) src;
276 struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst;
277 #ifdef COFF_ADJUST_FILEHDR_IN_PRE
278 COFF_ADJUST_FILEHDR_IN_PRE (abfd, src, dst);
279 #endif
280 filehdr_dst->f_magic = bfd_h_get_16(abfd, (bfd_byte *) filehdr_src->f_magic);
281 filehdr_dst->f_nscns = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_nscns);
282 filehdr_dst->f_timdat = bfd_h_get_32(abfd, (bfd_byte *)filehdr_src-> f_timdat);
283 filehdr_dst->f_symptr =
284 GET_FILEHDR_SYMPTR (abfd, (bfd_byte *) filehdr_src->f_symptr);
285 filehdr_dst->f_nsyms = bfd_h_get_32(abfd, (bfd_byte *)filehdr_src-> f_nsyms);
286 filehdr_dst->f_opthdr = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_opthdr);
287 filehdr_dst->f_flags = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_flags);
288 #ifdef TIC80_TARGET_ID
289 filehdr_dst->f_target_id = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_target_id);
290 #endif
291
292 #ifdef COFF_ADJUST_FILEHDR_IN_POST
293 COFF_ADJUST_FILEHDR_IN_POST (abfd, src, dst);
294 #endif
295 }
296
297 static unsigned int
298 coff_swap_filehdr_out (abfd, in, out)
299 bfd *abfd;
300 PTR in;
301 PTR out;
302 {
303 struct internal_filehdr *filehdr_in = (struct internal_filehdr *)in;
304 FILHDR *filehdr_out = (FILHDR *)out;
305
306 #ifdef COFF_ADJUST_FILEHDR_OUT_PRE
307 COFF_ADJUST_FILEHDR_OUT_PRE (abfd, in, out);
308 #endif
309 bfd_h_put_16(abfd, filehdr_in->f_magic, (bfd_byte *) filehdr_out->f_magic);
310 bfd_h_put_16(abfd, filehdr_in->f_nscns, (bfd_byte *) filehdr_out->f_nscns);
311 bfd_h_put_32(abfd, filehdr_in->f_timdat, (bfd_byte *) filehdr_out->f_timdat);
312 PUT_FILEHDR_SYMPTR (abfd, (bfd_vma) filehdr_in->f_symptr,
313 (bfd_byte *) filehdr_out->f_symptr);
314 bfd_h_put_32(abfd, filehdr_in->f_nsyms, (bfd_byte *) filehdr_out->f_nsyms);
315 bfd_h_put_16(abfd, filehdr_in->f_opthdr, (bfd_byte *) filehdr_out->f_opthdr);
316 bfd_h_put_16(abfd, filehdr_in->f_flags, (bfd_byte *) filehdr_out->f_flags);
317 #ifdef TIC80_TARGET_ID
318 bfd_h_put_16(abfd, filehdr_in->f_target_id, (bfd_byte *) filehdr_out->f_target_id);
319 #endif
320
321 #ifdef COFF_ADJUST_FILEHDR_OUT_POST
322 COFF_ADJUST_FILEHDR_OUT_POST (abfd, in, out);
323 #endif
324 return bfd_coff_filhsz (abfd);
325 }
326
327
328 #ifndef NO_COFF_SYMBOLS
329
330 static void
331 coff_swap_sym_in (abfd, ext1, in1)
332 bfd *abfd;
333 PTR ext1;
334 PTR in1;
335 {
336 SYMENT *ext = (SYMENT *)ext1;
337 struct internal_syment *in = (struct internal_syment *)in1;
338
339 if( ext->e.e_name[0] == 0) {
340 in->_n._n_n._n_zeroes = 0;
341 in->_n._n_n._n_offset = bfd_h_get_32(abfd, (bfd_byte *) ext->e.e.e_offset);
342 }
343 else {
344 #if SYMNMLEN != E_SYMNMLEN
345 -> Error, we need to cope with truncating or extending SYMNMLEN!;
346 #else
347 memcpy(in->_n._n_name, ext->e.e_name, SYMNMLEN);
348 #endif
349 }
350 in->n_value = bfd_h_get_32(abfd, (bfd_byte *) ext->e_value);
351 in->n_scnum = bfd_h_get_16(abfd, (bfd_byte *) ext->e_scnum);
352 if (sizeof(ext->e_type) == 2){
353 in->n_type = bfd_h_get_16(abfd, (bfd_byte *) ext->e_type);
354 }
355 else {
356 in->n_type = bfd_h_get_32(abfd, (bfd_byte *) ext->e_type);
357 }
358 in->n_sclass = bfd_h_get_8(abfd, ext->e_sclass);
359 in->n_numaux = bfd_h_get_8(abfd, ext->e_numaux);
360 }
361
362 static unsigned int
363 coff_swap_sym_out (abfd, inp, extp)
364 bfd *abfd;
365 PTR inp;
366 PTR extp;
367 {
368 struct internal_syment *in = (struct internal_syment *)inp;
369 SYMENT *ext =(SYMENT *)extp;
370 if(in->_n._n_name[0] == 0) {
371 bfd_h_put_32(abfd, 0, (bfd_byte *) ext->e.e.e_zeroes);
372 bfd_h_put_32(abfd, in->_n._n_n._n_offset, (bfd_byte *) ext->e.e.e_offset);
373 }
374 else {
375 #if SYMNMLEN != E_SYMNMLEN
376 -> Error, we need to cope with truncating or extending SYMNMLEN!;
377 #else
378 memcpy(ext->e.e_name, in->_n._n_name, SYMNMLEN);
379 #endif
380 }
381 bfd_h_put_32(abfd, in->n_value , (bfd_byte *) ext->e_value);
382 bfd_h_put_16(abfd, in->n_scnum , (bfd_byte *) ext->e_scnum);
383 if (sizeof(ext->e_type) == 2)
384 {
385 bfd_h_put_16(abfd, in->n_type , (bfd_byte *) ext->e_type);
386 }
387 else
388 {
389 bfd_h_put_32(abfd, in->n_type , (bfd_byte *) ext->e_type);
390 }
391 bfd_h_put_8(abfd, in->n_sclass , ext->e_sclass);
392 bfd_h_put_8(abfd, in->n_numaux , ext->e_numaux);
393 return SYMESZ;
394 }
395
396 static void
397 coff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
398 bfd *abfd;
399 PTR ext1;
400 int type;
401 int class;
402 int indx;
403 int numaux;
404 PTR in1;
405 {
406 AUXENT *ext = (AUXENT *)ext1;
407 union internal_auxent *in = (union internal_auxent *)in1;
408
409 #ifdef COFF_ADJUST_AUX_IN_PRE
410 COFF_ADJUST_AUX_IN_PRE (abfd, ext1, type, class, indx, numaux, in1);
411 #endif
412 switch (class) {
413 case C_FILE:
414 if (ext->x_file.x_fname[0] == 0) {
415 in->x_file.x_n.x_zeroes = 0;
416 in->x_file.x_n.x_offset =
417 bfd_h_get_32(abfd, (bfd_byte *) ext->x_file.x_n.x_offset);
418 } else {
419 #if FILNMLEN != E_FILNMLEN
420 -> Error, we need to cope with truncating or extending FILNMLEN!;
421 #else
422 if (numaux > 1)
423 {
424 if (indx == 0)
425 memcpy (in->x_file.x_fname, ext->x_file.x_fname,
426 numaux * sizeof (AUXENT));
427 }
428 else
429 {
430 memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
431 }
432 #endif
433 }
434 goto end;
435
436 /* RS/6000 "csect" auxents */
437 #ifdef RS6000COFF_C
438 case C_EXT:
439 case C_HIDEXT:
440 if (indx + 1 == numaux)
441 {
442 in->x_csect.x_scnlen.l = bfd_h_get_32 (abfd, ext->x_csect.x_scnlen);
443 in->x_csect.x_parmhash = bfd_h_get_32 (abfd,
444 ext->x_csect.x_parmhash);
445 in->x_csect.x_snhash = bfd_h_get_16 (abfd, ext->x_csect.x_snhash);
446 /* We don't have to hack bitfields in x_smtyp because it's
447 defined by shifts-and-ands, which are equivalent on all
448 byte orders. */
449 in->x_csect.x_smtyp = bfd_h_get_8 (abfd, ext->x_csect.x_smtyp);
450 in->x_csect.x_smclas = bfd_h_get_8 (abfd, ext->x_csect.x_smclas);
451 in->x_csect.x_stab = bfd_h_get_32 (abfd, ext->x_csect.x_stab);
452 in->x_csect.x_snstab = bfd_h_get_16 (abfd, ext->x_csect.x_snstab);
453 goto end;
454 }
455 break;
456 #endif
457
458 case C_STAT:
459 #ifdef C_LEAFSTAT
460 case C_LEAFSTAT:
461 #endif
462 case C_HIDDEN:
463 if (type == T_NULL) {
464 in->x_scn.x_scnlen = GET_SCN_SCNLEN(abfd, ext);
465 in->x_scn.x_nreloc = GET_SCN_NRELOC(abfd, ext);
466 in->x_scn.x_nlinno = GET_SCN_NLINNO(abfd, ext);
467
468 /* PE defines some extra fields; we zero them out for
469 safety. */
470 in->x_scn.x_checksum = 0;
471 in->x_scn.x_associated = 0;
472 in->x_scn.x_comdat = 0;
473
474 goto end;
475 }
476 break;
477 }
478
479 in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx);
480 #ifndef NO_TVNDX
481 in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx);
482 #endif
483
484 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
485 {
486 in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext);
487 in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext);
488 }
489 else
490 {
491 #if DIMNUM != E_DIMNUM
492 #error we need to cope with truncating or extending DIMNUM
493 #endif
494 in->x_sym.x_fcnary.x_ary.x_dimen[0] =
495 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
496 in->x_sym.x_fcnary.x_ary.x_dimen[1] =
497 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
498 in->x_sym.x_fcnary.x_ary.x_dimen[2] =
499 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
500 in->x_sym.x_fcnary.x_ary.x_dimen[3] =
501 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
502 }
503
504 if (ISFCN(type)) {
505 in->x_sym.x_misc.x_fsize = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
506 }
507 else {
508 in->x_sym.x_misc.x_lnsz.x_lnno = GET_LNSZ_LNNO(abfd, ext);
509 in->x_sym.x_misc.x_lnsz.x_size = GET_LNSZ_SIZE(abfd, ext);
510 }
511
512 end: ;
513 /* the semicolon is because MSVC doesn't like labels at
514 end of block. */
515
516 #ifdef COFF_ADJUST_AUX_IN_POST
517 COFF_ADJUST_AUX_IN_POST (abfd, ext1, type, class, indx, numaux, in1);
518 #endif
519 }
520
521 static unsigned int
522 coff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
523 bfd *abfd;
524 PTR inp;
525 int type;
526 int class;
527 int indx ATTRIBUTE_UNUSED;
528 int numaux ATTRIBUTE_UNUSED;
529 PTR extp;
530 {
531 union internal_auxent *in = (union internal_auxent *)inp;
532 AUXENT *ext = (AUXENT *)extp;
533
534 #ifdef COFF_ADJUST_AUX_OUT_PRE
535 COFF_ADJUST_AUX_OUT_PRE (abfd, inp, type, class, indx, numaux, extp);
536 #endif
537 memset((PTR)ext, 0, AUXESZ);
538 switch (class) {
539 case C_FILE:
540 if (in->x_file.x_fname[0] == 0) {
541 PUTWORD(abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes);
542 PUTWORD(abfd,
543 in->x_file.x_n.x_offset,
544 (bfd_byte *) ext->x_file.x_n.x_offset);
545 }
546 else {
547 #if FILNMLEN != E_FILNMLEN
548 -> Error, we need to cope with truncating or extending FILNMLEN!;
549 #else
550 memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
551 #endif
552 }
553 goto end;
554
555 #ifdef RS6000COFF_C
556 /* RS/6000 "csect" auxents */
557 case C_EXT:
558 case C_HIDEXT:
559 if (indx + 1 == numaux)
560 {
561 PUTWORD (abfd, in->x_csect.x_scnlen.l, ext->x_csect.x_scnlen);
562 PUTWORD (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
563 PUTHALF (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
564 /* We don't have to hack bitfields in x_smtyp because it's
565 defined by shifts-and-ands, which are equivalent on all
566 byte orders. */
567 PUTBYTE (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp);
568 PUTBYTE (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
569 PUTWORD (abfd, in->x_csect.x_stab, ext->x_csect.x_stab);
570 PUTHALF (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab);
571 goto end;
572 }
573 break;
574 #endif
575
576 case C_STAT:
577 #ifdef C_LEAFSTAT
578 case C_LEAFSTAT:
579 #endif
580 case C_HIDDEN:
581 if (type == T_NULL) {
582 PUT_SCN_SCNLEN(abfd, in->x_scn.x_scnlen, ext);
583 PUT_SCN_NRELOC(abfd, in->x_scn.x_nreloc, ext);
584 PUT_SCN_NLINNO(abfd, in->x_scn.x_nlinno, ext);
585 goto end;
586 }
587 break;
588 }
589
590 PUTWORD(abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
591 #ifndef NO_TVNDX
592 bfd_h_put_16(abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx);
593 #endif
594
595 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
596 {
597 PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
598 PUT_FCN_ENDNDX(abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
599 }
600 else
601 {
602 #if DIMNUM != E_DIMNUM
603 #error we need to cope with truncating or extending DIMNUM
604 #endif
605 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0],
606 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
607 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1],
608 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
609 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2],
610 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
611 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3],
612 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
613 }
614
615 if (ISFCN (type))
616 PUTWORD (abfd, in->x_sym.x_misc.x_fsize,
617 (bfd_byte *) ext->x_sym.x_misc.x_fsize);
618 else
619 {
620 PUT_LNSZ_LNNO (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
621 PUT_LNSZ_SIZE (abfd, in->x_sym.x_misc.x_lnsz.x_size, ext);
622 }
623
624 end:
625 #ifdef COFF_ADJUST_AUX_OUT_POST
626 COFF_ADJUST_AUX_OUT_POST (abfd, inp, type, class, indx, numaux, extp);
627 #endif
628 return AUXESZ;
629 }
630
631 #endif /* NO_COFF_SYMBOLS */
632
633 #ifndef NO_COFF_LINENOS
634
635 static void
636 coff_swap_lineno_in (abfd, ext1, in1)
637 bfd *abfd;
638 PTR ext1;
639 PTR in1;
640 {
641 LINENO *ext = (LINENO *)ext1;
642 struct internal_lineno *in = (struct internal_lineno *)in1;
643
644 in->l_addr.l_symndx = bfd_h_get_32(abfd, (bfd_byte *) ext->l_addr.l_symndx);
645 in->l_lnno = GET_LINENO_LNNO(abfd, ext);
646 }
647
648 static unsigned int
649 coff_swap_lineno_out (abfd, inp, outp)
650 bfd *abfd;
651 PTR inp;
652 PTR outp;
653 {
654 struct internal_lineno *in = (struct internal_lineno *)inp;
655 struct external_lineno *ext = (struct external_lineno *)outp;
656 PUTWORD(abfd, in->l_addr.l_symndx, (bfd_byte *)
657 ext->l_addr.l_symndx);
658
659 PUT_LINENO_LNNO (abfd, in->l_lnno, ext);
660 return LINESZ;
661 }
662
663 #endif /* NO_COFF_LINENOS */
664
665 static void
666 coff_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
667 bfd *abfd;
668 PTR aouthdr_ext1;
669 PTR aouthdr_int1;
670 {
671 AOUTHDR *aouthdr_ext = (AOUTHDR *) aouthdr_ext1;
672 struct internal_aouthdr *aouthdr_int = (struct internal_aouthdr *)aouthdr_int1;
673
674 aouthdr_int->magic = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->magic);
675 aouthdr_int->vstamp = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->vstamp);
676 aouthdr_int->tsize =
677 GET_AOUTHDR_TSIZE (abfd, (bfd_byte *) aouthdr_ext->tsize);
678 aouthdr_int->dsize =
679 GET_AOUTHDR_DSIZE (abfd, (bfd_byte *) aouthdr_ext->dsize);
680 aouthdr_int->bsize =
681 GET_AOUTHDR_BSIZE (abfd, (bfd_byte *) aouthdr_ext->bsize);
682 aouthdr_int->entry =
683 GET_AOUTHDR_ENTRY (abfd, (bfd_byte *) aouthdr_ext->entry);
684 aouthdr_int->text_start =
685 GET_AOUTHDR_TEXT_START (abfd, (bfd_byte *) aouthdr_ext->text_start);
686 aouthdr_int->data_start =
687 GET_AOUTHDR_DATA_START (abfd, (bfd_byte *) aouthdr_ext->data_start);
688
689 #ifdef I960
690 aouthdr_int->tagentries = bfd_h_get_32(abfd, (bfd_byte *) aouthdr_ext->tagentries);
691 #endif
692
693 #ifdef APOLLO_M68
694 bfd_h_put_32(abfd, aouthdr_int->o_inlib, (bfd_byte *) aouthdr_ext->o_inlib);
695 bfd_h_put_32(abfd, aouthdr_int->o_sri, (bfd_byte *) aouthdr_ext->o_sri);
696 bfd_h_put_32(abfd, aouthdr_int->vid[0], (bfd_byte *) aouthdr_ext->vid);
697 bfd_h_put_32(abfd, aouthdr_int->vid[1], (bfd_byte *) aouthdr_ext->vid + 4);
698 #endif
699
700
701 #ifdef RS6000COFF_C
702 aouthdr_int->o_toc = bfd_h_get_32(abfd, aouthdr_ext->o_toc);
703 aouthdr_int->o_snentry = bfd_h_get_16(abfd, aouthdr_ext->o_snentry);
704 aouthdr_int->o_sntext = bfd_h_get_16(abfd, aouthdr_ext->o_sntext);
705 aouthdr_int->o_sndata = bfd_h_get_16(abfd, aouthdr_ext->o_sndata);
706 aouthdr_int->o_sntoc = bfd_h_get_16(abfd, aouthdr_ext->o_sntoc);
707 aouthdr_int->o_snloader = bfd_h_get_16(abfd, aouthdr_ext->o_snloader);
708 aouthdr_int->o_snbss = bfd_h_get_16(abfd, aouthdr_ext->o_snbss);
709 aouthdr_int->o_algntext = bfd_h_get_16(abfd, aouthdr_ext->o_algntext);
710 aouthdr_int->o_algndata = bfd_h_get_16(abfd, aouthdr_ext->o_algndata);
711 aouthdr_int->o_modtype = bfd_h_get_16(abfd, aouthdr_ext->o_modtype);
712 aouthdr_int->o_cputype = bfd_h_get_16(abfd, aouthdr_ext->o_cputype);
713 aouthdr_int->o_maxstack = bfd_h_get_32(abfd, aouthdr_ext->o_maxstack);
714 aouthdr_int->o_maxdata = bfd_h_get_32(abfd, aouthdr_ext->o_maxdata);
715 #endif
716
717 #ifdef MIPSECOFF
718 aouthdr_int->bss_start = bfd_h_get_32(abfd, aouthdr_ext->bss_start);
719 aouthdr_int->gp_value = bfd_h_get_32(abfd, aouthdr_ext->gp_value);
720 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask);
721 aouthdr_int->cprmask[0] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[0]);
722 aouthdr_int->cprmask[1] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[1]);
723 aouthdr_int->cprmask[2] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[2]);
724 aouthdr_int->cprmask[3] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[3]);
725 #endif
726
727 #ifdef ALPHAECOFF
728 aouthdr_int->bss_start = bfd_h_get_64(abfd, aouthdr_ext->bss_start);
729 aouthdr_int->gp_value = bfd_h_get_64(abfd, aouthdr_ext->gp_value);
730 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask);
731 aouthdr_int->fprmask = bfd_h_get_32(abfd, aouthdr_ext->fprmask);
732 #endif
733 }
734
735 static unsigned int
736 coff_swap_aouthdr_out (abfd, in, out)
737 bfd *abfd;
738 PTR in;
739 PTR out;
740 {
741 struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *)in;
742 AOUTHDR *aouthdr_out = (AOUTHDR *)out;
743
744 bfd_h_put_16(abfd, aouthdr_in->magic, (bfd_byte *) aouthdr_out->magic);
745 bfd_h_put_16(abfd, aouthdr_in->vstamp, (bfd_byte *) aouthdr_out->vstamp);
746 PUT_AOUTHDR_TSIZE (abfd, aouthdr_in->tsize, (bfd_byte *) aouthdr_out->tsize);
747 PUT_AOUTHDR_DSIZE (abfd, aouthdr_in->dsize, (bfd_byte *) aouthdr_out->dsize);
748 PUT_AOUTHDR_BSIZE (abfd, aouthdr_in->bsize, (bfd_byte *) aouthdr_out->bsize);
749 PUT_AOUTHDR_ENTRY (abfd, aouthdr_in->entry, (bfd_byte *) aouthdr_out->entry);
750 PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
751 (bfd_byte *) aouthdr_out->text_start);
752 PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
753 (bfd_byte *) aouthdr_out->data_start);
754
755 #ifdef I960
756 bfd_h_put_32(abfd, aouthdr_in->tagentries, (bfd_byte *) aouthdr_out->tagentries);
757 #endif
758
759 #ifdef RS6000COFF_C
760 bfd_h_put_32 (abfd, aouthdr_in->o_toc, aouthdr_out->o_toc);
761 bfd_h_put_16 (abfd, aouthdr_in->o_snentry, aouthdr_out->o_snentry);
762 bfd_h_put_16 (abfd, aouthdr_in->o_sntext, aouthdr_out->o_sntext);
763 bfd_h_put_16 (abfd, aouthdr_in->o_sndata, aouthdr_out->o_sndata);
764 bfd_h_put_16 (abfd, aouthdr_in->o_sntoc, aouthdr_out->o_sntoc);
765 bfd_h_put_16 (abfd, aouthdr_in->o_snloader, aouthdr_out->o_snloader);
766 bfd_h_put_16 (abfd, aouthdr_in->o_snbss, aouthdr_out->o_snbss);
767 bfd_h_put_16 (abfd, aouthdr_in->o_algntext, aouthdr_out->o_algntext);
768 bfd_h_put_16 (abfd, aouthdr_in->o_algndata, aouthdr_out->o_algndata);
769 bfd_h_put_16 (abfd, aouthdr_in->o_modtype, aouthdr_out->o_modtype);
770 bfd_h_put_16 (abfd, aouthdr_in->o_cputype, aouthdr_out->o_cputype);
771 bfd_h_put_32 (abfd, aouthdr_in->o_maxstack, aouthdr_out->o_maxstack);
772 bfd_h_put_32 (abfd, aouthdr_in->o_maxdata, aouthdr_out->o_maxdata);
773 memset (aouthdr_out->o_resv2, 0, sizeof aouthdr_out->o_resv2);
774 #endif
775
776 #ifdef MIPSECOFF
777 bfd_h_put_32(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start);
778 bfd_h_put_32(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value);
779 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask);
780 bfd_h_put_32(abfd, aouthdr_in->cprmask[0], (bfd_byte *) aouthdr_out->cprmask[0]);
781 bfd_h_put_32(abfd, aouthdr_in->cprmask[1], (bfd_byte *) aouthdr_out->cprmask[1]);
782 bfd_h_put_32(abfd, aouthdr_in->cprmask[2], (bfd_byte *) aouthdr_out->cprmask[2]);
783 bfd_h_put_32(abfd, aouthdr_in->cprmask[3], (bfd_byte *) aouthdr_out->cprmask[3]);
784 #endif
785
786 #ifdef ALPHAECOFF
787 /* FIXME: What does bldrev mean? */
788 bfd_h_put_16(abfd, (bfd_vma) 2, (bfd_byte *) aouthdr_out->bldrev);
789 bfd_h_put_16(abfd, (bfd_vma) 0, (bfd_byte *) aouthdr_out->padding);
790 bfd_h_put_64(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start);
791 bfd_h_put_64(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value);
792 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask);
793 bfd_h_put_32(abfd, aouthdr_in->fprmask, (bfd_byte *) aouthdr_out->fprmask);
794 #endif
795
796 return AOUTSZ;
797 }
798
799 static void
800 coff_swap_scnhdr_in (abfd, ext, in)
801 bfd *abfd;
802 PTR ext;
803 PTR in;
804 {
805 SCNHDR *scnhdr_ext = (SCNHDR *) ext;
806 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
807
808 #ifdef COFF_ADJUST_SCNHDR_IN_PRE
809 COFF_ADJUST_SCNHDR_IN_PRE (abfd, ext, in);
810 #endif
811 memcpy(scnhdr_int->s_name, scnhdr_ext->s_name, sizeof(scnhdr_int->s_name));
812 scnhdr_int->s_vaddr =
813 GET_SCNHDR_VADDR (abfd, (bfd_byte *) scnhdr_ext->s_vaddr);
814 scnhdr_int->s_paddr =
815 GET_SCNHDR_PADDR (abfd, (bfd_byte *) scnhdr_ext->s_paddr);
816 scnhdr_int->s_size =
817 GET_SCNHDR_SIZE (abfd, (bfd_byte *) scnhdr_ext->s_size);
818
819 scnhdr_int->s_scnptr =
820 GET_SCNHDR_SCNPTR (abfd, (bfd_byte *) scnhdr_ext->s_scnptr);
821 scnhdr_int->s_relptr =
822 GET_SCNHDR_RELPTR (abfd, (bfd_byte *) scnhdr_ext->s_relptr);
823 scnhdr_int->s_lnnoptr =
824 GET_SCNHDR_LNNOPTR (abfd, (bfd_byte *) scnhdr_ext->s_lnnoptr);
825 scnhdr_int->s_flags =
826 GET_SCNHDR_FLAGS (abfd, (bfd_byte *) scnhdr_ext->s_flags);
827 scnhdr_int->s_nreloc =
828 GET_SCNHDR_NRELOC (abfd, (bfd_byte *) scnhdr_ext->s_nreloc);
829 scnhdr_int->s_nlnno =
830 GET_SCNHDR_NLNNO (abfd, (bfd_byte *) scnhdr_ext->s_nlnno);
831 #ifdef I960
832 scnhdr_int->s_align =
833 GET_SCNHDR_ALIGN (abfd, (bfd_byte *) scnhdr_ext->s_align);
834 #endif
835 #ifdef COFF_ADJUST_SCNHDR_IN_POST
836 COFF_ADJUST_SCNHDR_IN_POST (abfd, ext, in);
837 #endif
838 }
839
840 static unsigned int
841 coff_swap_scnhdr_out (abfd, in, out)
842 bfd *abfd;
843 PTR in;
844 PTR out;
845 {
846 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *)in;
847 SCNHDR *scnhdr_ext = (SCNHDR *)out;
848 unsigned int ret = bfd_coff_scnhsz (abfd);
849
850 #ifdef COFF_ADJUST_SCNHDR_OUT_PRE
851 COFF_ADJUST_SCNHDR_OUT_PRE (abfd, in, out);
852 #endif
853 memcpy(scnhdr_ext->s_name, scnhdr_int->s_name, sizeof(scnhdr_int->s_name));
854
855 PUT_SCNHDR_VADDR (abfd, scnhdr_int->s_vaddr,
856 (bfd_byte *) scnhdr_ext->s_vaddr);
857
858
859 PUT_SCNHDR_PADDR (abfd, scnhdr_int->s_paddr,
860 (bfd_byte *) scnhdr_ext->s_paddr);
861 PUT_SCNHDR_SIZE (abfd, scnhdr_int->s_size,
862 (bfd_byte *) scnhdr_ext->s_size);
863
864 PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr,
865 (bfd_byte *) scnhdr_ext->s_scnptr);
866 PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr,
867 (bfd_byte *) scnhdr_ext->s_relptr);
868 PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr,
869 (bfd_byte *) scnhdr_ext->s_lnnoptr);
870 PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags,
871 (bfd_byte *) scnhdr_ext->s_flags);
872 #if defined(M88)
873 PUTWORD(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
874 PUTWORD(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
875 #else
876 if (scnhdr_int->s_nlnno <= 0xffff)
877 PUTHALF(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
878 else
879 {
880 char buf[sizeof (scnhdr_int->s_name) + 1];
881
882 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
883 buf[sizeof (scnhdr_int->s_name)] = '\0';
884 (*_bfd_error_handler)
885 (_("%s: warning: %s: line number overflow: 0x%lx > 0xffff"),
886 bfd_get_filename (abfd),
887 buf, scnhdr_int->s_nlnno);
888 PUTHALF (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nlnno);
889 }
890 if (scnhdr_int->s_nreloc <= 0xffff)
891 PUTHALF(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
892 else
893 {
894 char buf[sizeof (scnhdr_int->s_name) + 1];
895
896 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
897 buf[sizeof (scnhdr_int->s_name)] = '\0';
898 (*_bfd_error_handler) (_("%s: %s: reloc overflow: 0x%lx > 0xffff"),
899 bfd_get_filename (abfd),
900 buf, scnhdr_int->s_nreloc);
901 bfd_set_error (bfd_error_file_truncated);
902 PUTHALF (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc);
903 ret = 0;
904 }
905 #endif
906
907 #ifdef I960
908 PUT_SCNHDR_ALIGN (abfd, scnhdr_int->s_align, (bfd_byte *) scnhdr_ext->s_align);
909 #endif
910 #ifdef COFF_ADJUST_SCNHDR_OUT_POST
911 COFF_ADJUST_SCNHDR_OUT_POST (abfd, in, out);
912 #endif
913 return ret;
914 }
This page took 0.049646 seconds and 5 git commands to generate.