2000-04-03 H.J. Lu <hjl@gnu.org>
[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 #ifdef COFF_ADJUST_SYM_IN_POST
361 COFF_ADJUST_SYM_IN_POST (abfd, ext1, in1);
362 #endif
363 }
364
365 static unsigned int
366 coff_swap_sym_out (abfd, inp, extp)
367 bfd *abfd;
368 PTR inp;
369 PTR extp;
370 {
371 struct internal_syment *in = (struct internal_syment *)inp;
372 SYMENT *ext =(SYMENT *)extp;
373 if(in->_n._n_name[0] == 0) {
374 bfd_h_put_32(abfd, 0, (bfd_byte *) ext->e.e.e_zeroes);
375 bfd_h_put_32(abfd, in->_n._n_n._n_offset, (bfd_byte *) ext->e.e.e_offset);
376 }
377 else {
378 #if SYMNMLEN != E_SYMNMLEN
379 -> Error, we need to cope with truncating or extending SYMNMLEN!;
380 #else
381 memcpy(ext->e.e_name, in->_n._n_name, SYMNMLEN);
382 #endif
383 }
384 bfd_h_put_32(abfd, in->n_value , (bfd_byte *) ext->e_value);
385 bfd_h_put_16(abfd, in->n_scnum , (bfd_byte *) ext->e_scnum);
386 if (sizeof(ext->e_type) == 2)
387 {
388 bfd_h_put_16(abfd, in->n_type , (bfd_byte *) ext->e_type);
389 }
390 else
391 {
392 bfd_h_put_32(abfd, in->n_type , (bfd_byte *) ext->e_type);
393 }
394 bfd_h_put_8(abfd, in->n_sclass , ext->e_sclass);
395 bfd_h_put_8(abfd, in->n_numaux , ext->e_numaux);
396 #ifdef COFF_ADJUST_SYM_OUT_POST
397 COFF_ADJUST_SYM_OUT_POST (abfd, inp, extp);
398 #endif
399 return SYMESZ;
400 }
401
402 static void
403 coff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
404 bfd *abfd;
405 PTR ext1;
406 int type;
407 int class;
408 int indx;
409 int numaux;
410 PTR in1;
411 {
412 AUXENT *ext = (AUXENT *)ext1;
413 union internal_auxent *in = (union internal_auxent *)in1;
414
415 #ifdef COFF_ADJUST_AUX_IN_PRE
416 COFF_ADJUST_AUX_IN_PRE (abfd, ext1, type, class, indx, numaux, in1);
417 #endif
418 switch (class) {
419 case C_FILE:
420 if (ext->x_file.x_fname[0] == 0) {
421 in->x_file.x_n.x_zeroes = 0;
422 in->x_file.x_n.x_offset =
423 bfd_h_get_32(abfd, (bfd_byte *) ext->x_file.x_n.x_offset);
424 } else {
425 #if FILNMLEN != E_FILNMLEN
426 -> Error, we need to cope with truncating or extending FILNMLEN!;
427 #else
428 if (numaux > 1)
429 {
430 if (indx == 0)
431 memcpy (in->x_file.x_fname, ext->x_file.x_fname,
432 numaux * sizeof (AUXENT));
433 }
434 else
435 {
436 memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
437 }
438 #endif
439 }
440 goto end;
441
442 /* RS/6000 "csect" auxents */
443 #ifdef RS6000COFF_C
444 case C_EXT:
445 case C_HIDEXT:
446 if (indx + 1 == numaux)
447 {
448 in->x_csect.x_scnlen.l = bfd_h_get_32 (abfd, ext->x_csect.x_scnlen);
449 in->x_csect.x_parmhash = bfd_h_get_32 (abfd,
450 ext->x_csect.x_parmhash);
451 in->x_csect.x_snhash = bfd_h_get_16 (abfd, ext->x_csect.x_snhash);
452 /* We don't have to hack bitfields in x_smtyp because it's
453 defined by shifts-and-ands, which are equivalent on all
454 byte orders. */
455 in->x_csect.x_smtyp = bfd_h_get_8 (abfd, ext->x_csect.x_smtyp);
456 in->x_csect.x_smclas = bfd_h_get_8 (abfd, ext->x_csect.x_smclas);
457 in->x_csect.x_stab = bfd_h_get_32 (abfd, ext->x_csect.x_stab);
458 in->x_csect.x_snstab = bfd_h_get_16 (abfd, ext->x_csect.x_snstab);
459 goto end;
460 }
461 break;
462 #endif
463
464 case C_STAT:
465 #ifdef C_LEAFSTAT
466 case C_LEAFSTAT:
467 #endif
468 case C_HIDDEN:
469 if (type == T_NULL) {
470 in->x_scn.x_scnlen = GET_SCN_SCNLEN(abfd, ext);
471 in->x_scn.x_nreloc = GET_SCN_NRELOC(abfd, ext);
472 in->x_scn.x_nlinno = GET_SCN_NLINNO(abfd, ext);
473
474 /* PE defines some extra fields; we zero them out for
475 safety. */
476 in->x_scn.x_checksum = 0;
477 in->x_scn.x_associated = 0;
478 in->x_scn.x_comdat = 0;
479
480 goto end;
481 }
482 break;
483 }
484
485 in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx);
486 #ifndef NO_TVNDX
487 in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx);
488 #endif
489
490 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
491 {
492 in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext);
493 in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext);
494 }
495 else
496 {
497 #if DIMNUM != E_DIMNUM
498 #error we need to cope with truncating or extending DIMNUM
499 #endif
500 in->x_sym.x_fcnary.x_ary.x_dimen[0] =
501 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
502 in->x_sym.x_fcnary.x_ary.x_dimen[1] =
503 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
504 in->x_sym.x_fcnary.x_ary.x_dimen[2] =
505 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
506 in->x_sym.x_fcnary.x_ary.x_dimen[3] =
507 bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
508 }
509
510 if (ISFCN(type)) {
511 in->x_sym.x_misc.x_fsize = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
512 }
513 else {
514 in->x_sym.x_misc.x_lnsz.x_lnno = GET_LNSZ_LNNO(abfd, ext);
515 in->x_sym.x_misc.x_lnsz.x_size = GET_LNSZ_SIZE(abfd, ext);
516 }
517
518 end: ;
519 /* the semicolon is because MSVC doesn't like labels at
520 end of block. */
521
522 #ifdef COFF_ADJUST_AUX_IN_POST
523 COFF_ADJUST_AUX_IN_POST (abfd, ext1, type, class, indx, numaux, in1);
524 #endif
525 }
526
527 static unsigned int
528 coff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
529 bfd *abfd;
530 PTR inp;
531 int type;
532 int class;
533 int indx ATTRIBUTE_UNUSED;
534 int numaux ATTRIBUTE_UNUSED;
535 PTR extp;
536 {
537 union internal_auxent *in = (union internal_auxent *)inp;
538 AUXENT *ext = (AUXENT *)extp;
539
540 #ifdef COFF_ADJUST_AUX_OUT_PRE
541 COFF_ADJUST_AUX_OUT_PRE (abfd, inp, type, class, indx, numaux, extp);
542 #endif
543 memset((PTR)ext, 0, AUXESZ);
544 switch (class) {
545 case C_FILE:
546 if (in->x_file.x_fname[0] == 0) {
547 PUTWORD(abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes);
548 PUTWORD(abfd,
549 in->x_file.x_n.x_offset,
550 (bfd_byte *) ext->x_file.x_n.x_offset);
551 }
552 else {
553 #if FILNMLEN != E_FILNMLEN
554 -> Error, we need to cope with truncating or extending FILNMLEN!;
555 #else
556 memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
557 #endif
558 }
559 goto end;
560
561 #ifdef RS6000COFF_C
562 /* RS/6000 "csect" auxents */
563 case C_EXT:
564 case C_HIDEXT:
565 if (indx + 1 == numaux)
566 {
567 PUTWORD (abfd, in->x_csect.x_scnlen.l, ext->x_csect.x_scnlen);
568 PUTWORD (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
569 PUTHALF (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
570 /* We don't have to hack bitfields in x_smtyp because it's
571 defined by shifts-and-ands, which are equivalent on all
572 byte orders. */
573 PUTBYTE (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp);
574 PUTBYTE (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
575 PUTWORD (abfd, in->x_csect.x_stab, ext->x_csect.x_stab);
576 PUTHALF (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab);
577 goto end;
578 }
579 break;
580 #endif
581
582 case C_STAT:
583 #ifdef C_LEAFSTAT
584 case C_LEAFSTAT:
585 #endif
586 case C_HIDDEN:
587 if (type == T_NULL) {
588 PUT_SCN_SCNLEN(abfd, in->x_scn.x_scnlen, ext);
589 PUT_SCN_NRELOC(abfd, in->x_scn.x_nreloc, ext);
590 PUT_SCN_NLINNO(abfd, in->x_scn.x_nlinno, ext);
591 goto end;
592 }
593 break;
594 }
595
596 PUTWORD(abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
597 #ifndef NO_TVNDX
598 bfd_h_put_16(abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx);
599 #endif
600
601 if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
602 {
603 PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
604 PUT_FCN_ENDNDX(abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
605 }
606 else
607 {
608 #if DIMNUM != E_DIMNUM
609 #error we need to cope with truncating or extending DIMNUM
610 #endif
611 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0],
612 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
613 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1],
614 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
615 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2],
616 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
617 bfd_h_put_16 (abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3],
618 (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
619 }
620
621 if (ISFCN (type))
622 PUTWORD (abfd, in->x_sym.x_misc.x_fsize,
623 (bfd_byte *) ext->x_sym.x_misc.x_fsize);
624 else
625 {
626 PUT_LNSZ_LNNO (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
627 PUT_LNSZ_SIZE (abfd, in->x_sym.x_misc.x_lnsz.x_size, ext);
628 }
629
630 end:
631 #ifdef COFF_ADJUST_AUX_OUT_POST
632 COFF_ADJUST_AUX_OUT_POST (abfd, inp, type, class, indx, numaux, extp);
633 #endif
634 return AUXESZ;
635 }
636
637 #endif /* NO_COFF_SYMBOLS */
638
639 #ifndef NO_COFF_LINENOS
640
641 static void
642 coff_swap_lineno_in (abfd, ext1, in1)
643 bfd *abfd;
644 PTR ext1;
645 PTR in1;
646 {
647 LINENO *ext = (LINENO *)ext1;
648 struct internal_lineno *in = (struct internal_lineno *)in1;
649
650 in->l_addr.l_symndx = bfd_h_get_32(abfd, (bfd_byte *) ext->l_addr.l_symndx);
651 in->l_lnno = GET_LINENO_LNNO(abfd, ext);
652 }
653
654 static unsigned int
655 coff_swap_lineno_out (abfd, inp, outp)
656 bfd *abfd;
657 PTR inp;
658 PTR outp;
659 {
660 struct internal_lineno *in = (struct internal_lineno *)inp;
661 struct external_lineno *ext = (struct external_lineno *)outp;
662 PUTWORD(abfd, in->l_addr.l_symndx, (bfd_byte *)
663 ext->l_addr.l_symndx);
664
665 PUT_LINENO_LNNO (abfd, in->l_lnno, ext);
666 return LINESZ;
667 }
668
669 #endif /* NO_COFF_LINENOS */
670
671 static void
672 coff_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
673 bfd *abfd;
674 PTR aouthdr_ext1;
675 PTR aouthdr_int1;
676 {
677 AOUTHDR *aouthdr_ext = (AOUTHDR *) aouthdr_ext1;
678 struct internal_aouthdr *aouthdr_int = (struct internal_aouthdr *)aouthdr_int1;
679
680 aouthdr_int->magic = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->magic);
681 aouthdr_int->vstamp = bfd_h_get_16(abfd, (bfd_byte *) aouthdr_ext->vstamp);
682 aouthdr_int->tsize =
683 GET_AOUTHDR_TSIZE (abfd, (bfd_byte *) aouthdr_ext->tsize);
684 aouthdr_int->dsize =
685 GET_AOUTHDR_DSIZE (abfd, (bfd_byte *) aouthdr_ext->dsize);
686 aouthdr_int->bsize =
687 GET_AOUTHDR_BSIZE (abfd, (bfd_byte *) aouthdr_ext->bsize);
688 aouthdr_int->entry =
689 GET_AOUTHDR_ENTRY (abfd, (bfd_byte *) aouthdr_ext->entry);
690 aouthdr_int->text_start =
691 GET_AOUTHDR_TEXT_START (abfd, (bfd_byte *) aouthdr_ext->text_start);
692 aouthdr_int->data_start =
693 GET_AOUTHDR_DATA_START (abfd, (bfd_byte *) aouthdr_ext->data_start);
694
695 #ifdef I960
696 aouthdr_int->tagentries = bfd_h_get_32(abfd, (bfd_byte *) aouthdr_ext->tagentries);
697 #endif
698
699 #ifdef APOLLO_M68
700 bfd_h_put_32(abfd, aouthdr_int->o_inlib, (bfd_byte *) aouthdr_ext->o_inlib);
701 bfd_h_put_32(abfd, aouthdr_int->o_sri, (bfd_byte *) aouthdr_ext->o_sri);
702 bfd_h_put_32(abfd, aouthdr_int->vid[0], (bfd_byte *) aouthdr_ext->vid);
703 bfd_h_put_32(abfd, aouthdr_int->vid[1], (bfd_byte *) aouthdr_ext->vid + 4);
704 #endif
705
706
707 #ifdef RS6000COFF_C
708 aouthdr_int->o_toc = bfd_h_get_32(abfd, aouthdr_ext->o_toc);
709 aouthdr_int->o_snentry = bfd_h_get_16(abfd, aouthdr_ext->o_snentry);
710 aouthdr_int->o_sntext = bfd_h_get_16(abfd, aouthdr_ext->o_sntext);
711 aouthdr_int->o_sndata = bfd_h_get_16(abfd, aouthdr_ext->o_sndata);
712 aouthdr_int->o_sntoc = bfd_h_get_16(abfd, aouthdr_ext->o_sntoc);
713 aouthdr_int->o_snloader = bfd_h_get_16(abfd, aouthdr_ext->o_snloader);
714 aouthdr_int->o_snbss = bfd_h_get_16(abfd, aouthdr_ext->o_snbss);
715 aouthdr_int->o_algntext = bfd_h_get_16(abfd, aouthdr_ext->o_algntext);
716 aouthdr_int->o_algndata = bfd_h_get_16(abfd, aouthdr_ext->o_algndata);
717 aouthdr_int->o_modtype = bfd_h_get_16(abfd, aouthdr_ext->o_modtype);
718 aouthdr_int->o_cputype = bfd_h_get_16(abfd, aouthdr_ext->o_cputype);
719 aouthdr_int->o_maxstack = bfd_h_get_32(abfd, aouthdr_ext->o_maxstack);
720 aouthdr_int->o_maxdata = bfd_h_get_32(abfd, aouthdr_ext->o_maxdata);
721 #endif
722
723 #ifdef MIPSECOFF
724 aouthdr_int->bss_start = bfd_h_get_32(abfd, aouthdr_ext->bss_start);
725 aouthdr_int->gp_value = bfd_h_get_32(abfd, aouthdr_ext->gp_value);
726 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask);
727 aouthdr_int->cprmask[0] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[0]);
728 aouthdr_int->cprmask[1] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[1]);
729 aouthdr_int->cprmask[2] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[2]);
730 aouthdr_int->cprmask[3] = bfd_h_get_32(abfd, aouthdr_ext->cprmask[3]);
731 #endif
732
733 #ifdef ALPHAECOFF
734 aouthdr_int->bss_start = bfd_h_get_64(abfd, aouthdr_ext->bss_start);
735 aouthdr_int->gp_value = bfd_h_get_64(abfd, aouthdr_ext->gp_value);
736 aouthdr_int->gprmask = bfd_h_get_32(abfd, aouthdr_ext->gprmask);
737 aouthdr_int->fprmask = bfd_h_get_32(abfd, aouthdr_ext->fprmask);
738 #endif
739 }
740
741 static unsigned int
742 coff_swap_aouthdr_out (abfd, in, out)
743 bfd *abfd;
744 PTR in;
745 PTR out;
746 {
747 struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *)in;
748 AOUTHDR *aouthdr_out = (AOUTHDR *)out;
749
750 bfd_h_put_16(abfd, aouthdr_in->magic, (bfd_byte *) aouthdr_out->magic);
751 bfd_h_put_16(abfd, aouthdr_in->vstamp, (bfd_byte *) aouthdr_out->vstamp);
752 PUT_AOUTHDR_TSIZE (abfd, aouthdr_in->tsize, (bfd_byte *) aouthdr_out->tsize);
753 PUT_AOUTHDR_DSIZE (abfd, aouthdr_in->dsize, (bfd_byte *) aouthdr_out->dsize);
754 PUT_AOUTHDR_BSIZE (abfd, aouthdr_in->bsize, (bfd_byte *) aouthdr_out->bsize);
755 PUT_AOUTHDR_ENTRY (abfd, aouthdr_in->entry, (bfd_byte *) aouthdr_out->entry);
756 PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
757 (bfd_byte *) aouthdr_out->text_start);
758 PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
759 (bfd_byte *) aouthdr_out->data_start);
760
761 #ifdef I960
762 bfd_h_put_32(abfd, aouthdr_in->tagentries, (bfd_byte *) aouthdr_out->tagentries);
763 #endif
764
765 #ifdef RS6000COFF_C
766 bfd_h_put_32 (abfd, aouthdr_in->o_toc, aouthdr_out->o_toc);
767 bfd_h_put_16 (abfd, aouthdr_in->o_snentry, aouthdr_out->o_snentry);
768 bfd_h_put_16 (abfd, aouthdr_in->o_sntext, aouthdr_out->o_sntext);
769 bfd_h_put_16 (abfd, aouthdr_in->o_sndata, aouthdr_out->o_sndata);
770 bfd_h_put_16 (abfd, aouthdr_in->o_sntoc, aouthdr_out->o_sntoc);
771 bfd_h_put_16 (abfd, aouthdr_in->o_snloader, aouthdr_out->o_snloader);
772 bfd_h_put_16 (abfd, aouthdr_in->o_snbss, aouthdr_out->o_snbss);
773 bfd_h_put_16 (abfd, aouthdr_in->o_algntext, aouthdr_out->o_algntext);
774 bfd_h_put_16 (abfd, aouthdr_in->o_algndata, aouthdr_out->o_algndata);
775 bfd_h_put_16 (abfd, aouthdr_in->o_modtype, aouthdr_out->o_modtype);
776 bfd_h_put_16 (abfd, aouthdr_in->o_cputype, aouthdr_out->o_cputype);
777 bfd_h_put_32 (abfd, aouthdr_in->o_maxstack, aouthdr_out->o_maxstack);
778 bfd_h_put_32 (abfd, aouthdr_in->o_maxdata, aouthdr_out->o_maxdata);
779 memset (aouthdr_out->o_resv2, 0, sizeof aouthdr_out->o_resv2);
780 #endif
781
782 #ifdef MIPSECOFF
783 bfd_h_put_32(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start);
784 bfd_h_put_32(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value);
785 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask);
786 bfd_h_put_32(abfd, aouthdr_in->cprmask[0], (bfd_byte *) aouthdr_out->cprmask[0]);
787 bfd_h_put_32(abfd, aouthdr_in->cprmask[1], (bfd_byte *) aouthdr_out->cprmask[1]);
788 bfd_h_put_32(abfd, aouthdr_in->cprmask[2], (bfd_byte *) aouthdr_out->cprmask[2]);
789 bfd_h_put_32(abfd, aouthdr_in->cprmask[3], (bfd_byte *) aouthdr_out->cprmask[3]);
790 #endif
791
792 #ifdef ALPHAECOFF
793 /* FIXME: What does bldrev mean? */
794 bfd_h_put_16(abfd, (bfd_vma) 2, (bfd_byte *) aouthdr_out->bldrev);
795 bfd_h_put_16(abfd, (bfd_vma) 0, (bfd_byte *) aouthdr_out->padding);
796 bfd_h_put_64(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start);
797 bfd_h_put_64(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value);
798 bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask);
799 bfd_h_put_32(abfd, aouthdr_in->fprmask, (bfd_byte *) aouthdr_out->fprmask);
800 #endif
801
802 return AOUTSZ;
803 }
804
805 static void
806 coff_swap_scnhdr_in (abfd, ext, in)
807 bfd *abfd;
808 PTR ext;
809 PTR in;
810 {
811 SCNHDR *scnhdr_ext = (SCNHDR *) ext;
812 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
813
814 #ifdef COFF_ADJUST_SCNHDR_IN_PRE
815 COFF_ADJUST_SCNHDR_IN_PRE (abfd, ext, in);
816 #endif
817 memcpy(scnhdr_int->s_name, scnhdr_ext->s_name, sizeof(scnhdr_int->s_name));
818 scnhdr_int->s_vaddr =
819 GET_SCNHDR_VADDR (abfd, (bfd_byte *) scnhdr_ext->s_vaddr);
820 scnhdr_int->s_paddr =
821 GET_SCNHDR_PADDR (abfd, (bfd_byte *) scnhdr_ext->s_paddr);
822 scnhdr_int->s_size =
823 GET_SCNHDR_SIZE (abfd, (bfd_byte *) scnhdr_ext->s_size);
824
825 scnhdr_int->s_scnptr =
826 GET_SCNHDR_SCNPTR (abfd, (bfd_byte *) scnhdr_ext->s_scnptr);
827 scnhdr_int->s_relptr =
828 GET_SCNHDR_RELPTR (abfd, (bfd_byte *) scnhdr_ext->s_relptr);
829 scnhdr_int->s_lnnoptr =
830 GET_SCNHDR_LNNOPTR (abfd, (bfd_byte *) scnhdr_ext->s_lnnoptr);
831 scnhdr_int->s_flags =
832 GET_SCNHDR_FLAGS (abfd, (bfd_byte *) scnhdr_ext->s_flags);
833 scnhdr_int->s_nreloc =
834 GET_SCNHDR_NRELOC (abfd, (bfd_byte *) scnhdr_ext->s_nreloc);
835 scnhdr_int->s_nlnno =
836 GET_SCNHDR_NLNNO (abfd, (bfd_byte *) scnhdr_ext->s_nlnno);
837 #ifdef I960
838 scnhdr_int->s_align =
839 GET_SCNHDR_ALIGN (abfd, (bfd_byte *) scnhdr_ext->s_align);
840 #endif
841 #ifdef COFF_ADJUST_SCNHDR_IN_POST
842 COFF_ADJUST_SCNHDR_IN_POST (abfd, ext, in);
843 #endif
844 }
845
846 static unsigned int
847 coff_swap_scnhdr_out (abfd, in, out)
848 bfd *abfd;
849 PTR in;
850 PTR out;
851 {
852 struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *)in;
853 SCNHDR *scnhdr_ext = (SCNHDR *)out;
854 unsigned int ret = bfd_coff_scnhsz (abfd);
855
856 #ifdef COFF_ADJUST_SCNHDR_OUT_PRE
857 COFF_ADJUST_SCNHDR_OUT_PRE (abfd, in, out);
858 #endif
859 memcpy(scnhdr_ext->s_name, scnhdr_int->s_name, sizeof(scnhdr_int->s_name));
860
861 PUT_SCNHDR_VADDR (abfd, scnhdr_int->s_vaddr,
862 (bfd_byte *) scnhdr_ext->s_vaddr);
863
864
865 PUT_SCNHDR_PADDR (abfd, scnhdr_int->s_paddr,
866 (bfd_byte *) scnhdr_ext->s_paddr);
867 PUT_SCNHDR_SIZE (abfd, scnhdr_int->s_size,
868 (bfd_byte *) scnhdr_ext->s_size);
869
870 PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr,
871 (bfd_byte *) scnhdr_ext->s_scnptr);
872 PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr,
873 (bfd_byte *) scnhdr_ext->s_relptr);
874 PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr,
875 (bfd_byte *) scnhdr_ext->s_lnnoptr);
876 PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags,
877 (bfd_byte *) scnhdr_ext->s_flags);
878 #if defined(M88)
879 PUTWORD(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
880 PUTWORD(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
881 #else
882 if (scnhdr_int->s_nlnno <= 0xffff)
883 PUTHALF(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
884 else
885 {
886 char buf[sizeof (scnhdr_int->s_name) + 1];
887
888 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
889 buf[sizeof (scnhdr_int->s_name)] = '\0';
890 (*_bfd_error_handler)
891 (_("%s: warning: %s: line number overflow: 0x%lx > 0xffff"),
892 bfd_get_filename (abfd),
893 buf, scnhdr_int->s_nlnno);
894 PUTHALF (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nlnno);
895 }
896 if (scnhdr_int->s_nreloc <= 0xffff)
897 PUTHALF(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
898 else
899 {
900 char buf[sizeof (scnhdr_int->s_name) + 1];
901
902 memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
903 buf[sizeof (scnhdr_int->s_name)] = '\0';
904 (*_bfd_error_handler) (_("%s: %s: reloc overflow: 0x%lx > 0xffff"),
905 bfd_get_filename (abfd),
906 buf, scnhdr_int->s_nreloc);
907 bfd_set_error (bfd_error_file_truncated);
908 PUTHALF (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc);
909 ret = 0;
910 }
911 #endif
912
913 #ifdef I960
914 PUT_SCNHDR_ALIGN (abfd, scnhdr_int->s_align, (bfd_byte *) scnhdr_ext->s_align);
915 #endif
916 #ifdef COFF_ADJUST_SCNHDR_OUT_POST
917 COFF_ADJUST_SCNHDR_OUT_POST (abfd, in, out);
918 #endif
919 return ret;
920 }
This page took 0.050774 seconds and 4 git commands to generate.