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