xref: /dflybsd-src/contrib/binutils-2.34/bfd/libpei.h (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj /* Support for the generic parts of PE/PEI; common header information.
2*fae548d3Szrj    Copyright (C) 1995-2020 Free Software Foundation, Inc.
3*fae548d3Szrj    Written by Cygnus Solutions.
4*fae548d3Szrj 
5*fae548d3Szrj    This file is part of BFD, the Binary File Descriptor library.
6*fae548d3Szrj 
7*fae548d3Szrj    This program is free software; you can redistribute it and/or modify
8*fae548d3Szrj    it under the terms of the GNU General Public License as published by
9*fae548d3Szrj    the Free Software Foundation; either version 3 of the License, or
10*fae548d3Szrj    (at your option) any later version.
11*fae548d3Szrj 
12*fae548d3Szrj    This program is distributed in the hope that it will be useful,
13*fae548d3Szrj    but WITHOUT ANY WARRANTY; without even the implied warranty of
14*fae548d3Szrj    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*fae548d3Szrj    GNU General Public License for more details.
16*fae548d3Szrj 
17*fae548d3Szrj    You should have received a copy of the GNU General Public License
18*fae548d3Szrj    along with this program; if not, write to the Free Software
19*fae548d3Szrj    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20*fae548d3Szrj    MA 02110-1301, USA.  */
21*fae548d3Szrj 
22*fae548d3Szrj 
23*fae548d3Szrj /* Most of this hacked by  Steve Chamberlain,
24*fae548d3Szrj 			sac@cygnus.com
25*fae548d3Szrj 
26*fae548d3Szrj    PE/PEI rearrangement (and code added): Donn Terry
27*fae548d3Szrj 				       Softway Systems, Inc.  */
28*fae548d3Szrj 
29*fae548d3Szrj /* Hey look, some documentation [and in a place you expect to find it]!
30*fae548d3Szrj 
31*fae548d3Szrj    The main reference for the pei format is "Microsoft Portable Executable
32*fae548d3Szrj    and Common Object File Format Specification 4.1".  Get it if you need to
33*fae548d3Szrj    do some serious hacking on this code.
34*fae548d3Szrj 
35*fae548d3Szrj    Another reference:
36*fae548d3Szrj    "Peering Inside the PE: A Tour of the Win32 Portable Executable
37*fae548d3Szrj    File Format", MSJ 1994, Volume 9.
38*fae548d3Szrj 
39*fae548d3Szrj    The *sole* difference between the pe format and the pei format is that the
40*fae548d3Szrj    latter has an MSDOS 2.0 .exe header on the front that prints the message
41*fae548d3Szrj    "This app must be run under Windows." (or some such).
42*fae548d3Szrj    (FIXME: Whether that statement is *really* true or not is unknown.
43*fae548d3Szrj    Are there more subtle differences between pe and pei formats?
44*fae548d3Szrj    For now assume there aren't.  If you find one, then for God sakes
45*fae548d3Szrj    document it here!)
46*fae548d3Szrj 
47*fae548d3Szrj    The Microsoft docs use the word "image" instead of "executable" because
48*fae548d3Szrj    the former can also refer to a DLL (shared library).  Confusion can arise
49*fae548d3Szrj    because the `i' in `pei' also refers to "image".  The `pe' format can
50*fae548d3Szrj    also create images (i.e. executables), it's just that to run on a win32
51*fae548d3Szrj    system you need to use the pei format.
52*fae548d3Szrj 
53*fae548d3Szrj    FIXME: Please add more docs here so the next poor fool that has to hack
54*fae548d3Szrj    on this code has a chance of getting something accomplished without
55*fae548d3Szrj    wasting too much time.  */
56*fae548d3Szrj 
57*fae548d3Szrj #ifndef GET_FCN_LNNOPTR
58*fae548d3Szrj #define GET_FCN_LNNOPTR(abfd, ext) \
59*fae548d3Szrj   H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr)
60*fae548d3Szrj #endif
61*fae548d3Szrj 
62*fae548d3Szrj #ifndef GET_FCN_ENDNDX
63*fae548d3Szrj #define GET_FCN_ENDNDX(abfd, ext) \
64*fae548d3Szrj   H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx)
65*fae548d3Szrj #endif
66*fae548d3Szrj 
67*fae548d3Szrj #ifndef PUT_FCN_LNNOPTR
68*fae548d3Szrj #define PUT_FCN_LNNOPTR(abfd, in, ext) \
69*fae548d3Szrj   H_PUT_32(abfd, in, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr)
70*fae548d3Szrj #endif
71*fae548d3Szrj #ifndef PUT_FCN_ENDNDX
72*fae548d3Szrj #define PUT_FCN_ENDNDX(abfd, in, ext) \
73*fae548d3Szrj   H_PUT_32(abfd, in, ext->x_sym.x_fcnary.x_fcn.x_endndx)
74*fae548d3Szrj #endif
75*fae548d3Szrj #ifndef GET_LNSZ_LNNO
76*fae548d3Szrj #define GET_LNSZ_LNNO(abfd, ext) \
77*fae548d3Szrj   H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno)
78*fae548d3Szrj #endif
79*fae548d3Szrj #ifndef GET_LNSZ_SIZE
80*fae548d3Szrj #define GET_LNSZ_SIZE(abfd, ext) \
81*fae548d3Szrj   H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size)
82*fae548d3Szrj #endif
83*fae548d3Szrj #ifndef PUT_LNSZ_LNNO
84*fae548d3Szrj #define PUT_LNSZ_LNNO(abfd, in, ext) \
85*fae548d3Szrj   H_PUT_16(abfd, in, ext->x_sym.x_misc.x_lnsz.x_lnno)
86*fae548d3Szrj #endif
87*fae548d3Szrj #ifndef PUT_LNSZ_SIZE
88*fae548d3Szrj #define PUT_LNSZ_SIZE(abfd, in, ext) \
89*fae548d3Szrj   H_PUT_16(abfd, in, ext->x_sym.x_misc.x_lnsz.x_size)
90*fae548d3Szrj #endif
91*fae548d3Szrj #ifndef GET_SCN_SCNLEN
92*fae548d3Szrj #define GET_SCN_SCNLEN(abfd, ext) \
93*fae548d3Szrj   H_GET_32 (abfd, ext->x_scn.x_scnlen)
94*fae548d3Szrj #endif
95*fae548d3Szrj #ifndef GET_SCN_NRELOC
96*fae548d3Szrj #define GET_SCN_NRELOC(abfd, ext) \
97*fae548d3Szrj   H_GET_16 (abfd, ext->x_scn.x_nreloc)
98*fae548d3Szrj #endif
99*fae548d3Szrj #ifndef GET_SCN_NLINNO
100*fae548d3Szrj #define GET_SCN_NLINNO(abfd, ext) \
101*fae548d3Szrj   H_GET_16 (abfd, ext->x_scn.x_nlinno)
102*fae548d3Szrj #endif
103*fae548d3Szrj #ifndef PUT_SCN_SCNLEN
104*fae548d3Szrj #define PUT_SCN_SCNLEN(abfd, in, ext) \
105*fae548d3Szrj   H_PUT_32(abfd, in, ext->x_scn.x_scnlen)
106*fae548d3Szrj #endif
107*fae548d3Szrj #ifndef PUT_SCN_NRELOC
108*fae548d3Szrj #define PUT_SCN_NRELOC(abfd, in, ext) \
109*fae548d3Szrj   H_PUT_16(abfd, in, ext->x_scn.x_nreloc)
110*fae548d3Szrj #endif
111*fae548d3Szrj #ifndef PUT_SCN_NLINNO
112*fae548d3Szrj #define PUT_SCN_NLINNO(abfd, in, ext) \
113*fae548d3Szrj   H_PUT_16(abfd,in, ext->x_scn.x_nlinno)
114*fae548d3Szrj #endif
115*fae548d3Szrj #ifndef GET_LINENO_LNNO
116*fae548d3Szrj #define GET_LINENO_LNNO(abfd, ext) \
117*fae548d3Szrj   H_GET_16 (abfd, ext->l_lnno);
118*fae548d3Szrj #endif
119*fae548d3Szrj #ifndef PUT_LINENO_LNNO
120*fae548d3Szrj #define PUT_LINENO_LNNO(abfd, val, ext) \
121*fae548d3Szrj   H_PUT_16(abfd,val, ext->l_lnno);
122*fae548d3Szrj #endif
123*fae548d3Szrj 
124*fae548d3Szrj /* The f_symptr field in the filehdr is sometimes 64 bits.  */
125*fae548d3Szrj #ifndef GET_FILEHDR_SYMPTR
126*fae548d3Szrj #define GET_FILEHDR_SYMPTR H_GET_32
127*fae548d3Szrj #endif
128*fae548d3Szrj #ifndef PUT_FILEHDR_SYMPTR
129*fae548d3Szrj #define PUT_FILEHDR_SYMPTR H_PUT_32
130*fae548d3Szrj #endif
131*fae548d3Szrj 
132*fae548d3Szrj /* Some fields in the aouthdr are sometimes 64 bits.  */
133*fae548d3Szrj #ifndef GET_AOUTHDR_TSIZE
134*fae548d3Szrj #define GET_AOUTHDR_TSIZE H_GET_32
135*fae548d3Szrj #endif
136*fae548d3Szrj #ifndef PUT_AOUTHDR_TSIZE
137*fae548d3Szrj #define PUT_AOUTHDR_TSIZE H_PUT_32
138*fae548d3Szrj #endif
139*fae548d3Szrj #ifndef GET_AOUTHDR_DSIZE
140*fae548d3Szrj #define GET_AOUTHDR_DSIZE H_GET_32
141*fae548d3Szrj #endif
142*fae548d3Szrj #ifndef PUT_AOUTHDR_DSIZE
143*fae548d3Szrj #define PUT_AOUTHDR_DSIZE H_PUT_32
144*fae548d3Szrj #endif
145*fae548d3Szrj #ifndef GET_AOUTHDR_BSIZE
146*fae548d3Szrj #define GET_AOUTHDR_BSIZE H_GET_32
147*fae548d3Szrj #endif
148*fae548d3Szrj #ifndef PUT_AOUTHDR_BSIZE
149*fae548d3Szrj #define PUT_AOUTHDR_BSIZE H_PUT_32
150*fae548d3Szrj #endif
151*fae548d3Szrj #ifndef GET_AOUTHDR_ENTRY
152*fae548d3Szrj #define GET_AOUTHDR_ENTRY H_GET_32
153*fae548d3Szrj #endif
154*fae548d3Szrj #ifndef PUT_AOUTHDR_ENTRY
155*fae548d3Szrj #define PUT_AOUTHDR_ENTRY H_PUT_32
156*fae548d3Szrj #endif
157*fae548d3Szrj #ifndef GET_AOUTHDR_TEXT_START
158*fae548d3Szrj #define GET_AOUTHDR_TEXT_START H_GET_32
159*fae548d3Szrj #endif
160*fae548d3Szrj #ifndef PUT_AOUTHDR_TEXT_START
161*fae548d3Szrj #define PUT_AOUTHDR_TEXT_START H_PUT_32
162*fae548d3Szrj #endif
163*fae548d3Szrj #ifndef GET_AOUTHDR_DATA_START
164*fae548d3Szrj #define GET_AOUTHDR_DATA_START H_GET_32
165*fae548d3Szrj #endif
166*fae548d3Szrj #ifndef PUT_AOUTHDR_DATA_START
167*fae548d3Szrj #define PUT_AOUTHDR_DATA_START H_PUT_32
168*fae548d3Szrj #endif
169*fae548d3Szrj 
170*fae548d3Szrj /* Some fields in the scnhdr are sometimes 64 bits.  */
171*fae548d3Szrj #ifndef GET_SCNHDR_PADDR
172*fae548d3Szrj #define GET_SCNHDR_PADDR H_GET_32
173*fae548d3Szrj #endif
174*fae548d3Szrj #ifndef PUT_SCNHDR_PADDR
175*fae548d3Szrj #define PUT_SCNHDR_PADDR H_PUT_32
176*fae548d3Szrj #endif
177*fae548d3Szrj #ifndef GET_SCNHDR_VADDR
178*fae548d3Szrj #define GET_SCNHDR_VADDR H_GET_32
179*fae548d3Szrj #endif
180*fae548d3Szrj #ifndef PUT_SCNHDR_VADDR
181*fae548d3Szrj #define PUT_SCNHDR_VADDR H_PUT_32
182*fae548d3Szrj #endif
183*fae548d3Szrj #ifndef GET_SCNHDR_SIZE
184*fae548d3Szrj #define GET_SCNHDR_SIZE H_GET_32
185*fae548d3Szrj #endif
186*fae548d3Szrj #ifndef PUT_SCNHDR_SIZE
187*fae548d3Szrj #define PUT_SCNHDR_SIZE H_PUT_32
188*fae548d3Szrj #endif
189*fae548d3Szrj #ifndef GET_SCNHDR_SCNPTR
190*fae548d3Szrj #define GET_SCNHDR_SCNPTR H_GET_32
191*fae548d3Szrj #endif
192*fae548d3Szrj #ifndef PUT_SCNHDR_SCNPTR
193*fae548d3Szrj #define PUT_SCNHDR_SCNPTR H_PUT_32
194*fae548d3Szrj #endif
195*fae548d3Szrj #ifndef GET_SCNHDR_RELPTR
196*fae548d3Szrj #define GET_SCNHDR_RELPTR H_GET_32
197*fae548d3Szrj #endif
198*fae548d3Szrj #ifndef PUT_SCNHDR_RELPTR
199*fae548d3Szrj #define PUT_SCNHDR_RELPTR H_PUT_32
200*fae548d3Szrj #endif
201*fae548d3Szrj #ifndef GET_SCNHDR_LNNOPTR
202*fae548d3Szrj #define GET_SCNHDR_LNNOPTR H_GET_32
203*fae548d3Szrj #endif
204*fae548d3Szrj #ifndef PUT_SCNHDR_LNNOPTR
205*fae548d3Szrj #define PUT_SCNHDR_LNNOPTR H_PUT_32
206*fae548d3Szrj #endif
207*fae548d3Szrj 
208*fae548d3Szrj #ifdef COFF_WITH_pex64
209*fae548d3Szrj 
210*fae548d3Szrj #define GET_OPTHDR_IMAGE_BASE		 H_GET_64
211*fae548d3Szrj #define PUT_OPTHDR_IMAGE_BASE		 H_PUT_64
212*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
213*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
214*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_COMMIT	 H_GET_64
215*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_COMMIT	 H_PUT_64
216*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_GET_64
217*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE	 H_PUT_64
218*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_GET_64
219*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT	 H_PUT_64
220*fae548d3Szrj #define GET_PDATA_ENTRY			 bfd_get_32
221*fae548d3Szrj 
222*fae548d3Szrj #define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_pex64_bfd_copy_private_bfd_data_common
223*fae548d3Szrj #define _bfd_XX_bfd_copy_private_section_data		_bfd_pex64_bfd_copy_private_section_data
224*fae548d3Szrj #define _bfd_XX_get_symbol_info				_bfd_pex64_get_symbol_info
225*fae548d3Szrj #define _bfd_XX_only_swap_filehdr_out			_bfd_pex64_only_swap_filehdr_out
226*fae548d3Szrj #define _bfd_XX_print_private_bfd_data_common		_bfd_pex64_print_private_bfd_data_common
227*fae548d3Szrj #define _bfd_XXi_final_link_postscript			_bfd_pex64i_final_link_postscript
228*fae548d3Szrj #define _bfd_XXi_only_swap_filehdr_out			_bfd_pex64i_only_swap_filehdr_out
229*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_in			_bfd_pex64i_swap_aouthdr_in
230*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_out			_bfd_pex64i_swap_aouthdr_out
231*fae548d3Szrj #define _bfd_XXi_swap_aux_in				_bfd_pex64i_swap_aux_in
232*fae548d3Szrj #define _bfd_XXi_swap_aux_out				_bfd_pex64i_swap_aux_out
233*fae548d3Szrj #define _bfd_XXi_swap_lineno_in				_bfd_pex64i_swap_lineno_in
234*fae548d3Szrj #define _bfd_XXi_swap_lineno_out			_bfd_pex64i_swap_lineno_out
235*fae548d3Szrj #define _bfd_XXi_swap_scnhdr_out			_bfd_pex64i_swap_scnhdr_out
236*fae548d3Szrj #define _bfd_XXi_swap_sym_in				_bfd_pex64i_swap_sym_in
237*fae548d3Szrj #define _bfd_XXi_swap_sym_out				_bfd_pex64i_swap_sym_out
238*fae548d3Szrj #define _bfd_XXi_swap_debugdir_in			_bfd_pex64i_swap_debugdir_in
239*fae548d3Szrj #define _bfd_XXi_swap_debugdir_out			_bfd_pex64i_swap_debugdir_out
240*fae548d3Szrj #define _bfd_XXi_write_codeview_record			_bfd_pex64i_write_codeview_record
241*fae548d3Szrj #define _bfd_XXi_slurp_codeview_record			_bfd_pex64i_slurp_codeview_record
242*fae548d3Szrj 
243*fae548d3Szrj #elif defined COFF_WITH_pep
244*fae548d3Szrj 
245*fae548d3Szrj #define GET_OPTHDR_IMAGE_BASE H_GET_64
246*fae548d3Szrj #define PUT_OPTHDR_IMAGE_BASE H_PUT_64
247*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
248*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
249*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_64
250*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_64
251*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_64
252*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_64
253*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_64
254*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_64
255*fae548d3Szrj #define GET_PDATA_ENTRY bfd_get_64
256*fae548d3Szrj 
257*fae548d3Szrj #define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_pep_bfd_copy_private_bfd_data_common
258*fae548d3Szrj #define _bfd_XX_bfd_copy_private_section_data		_bfd_pep_bfd_copy_private_section_data
259*fae548d3Szrj #define _bfd_XX_get_symbol_info				_bfd_pep_get_symbol_info
260*fae548d3Szrj #define _bfd_XX_only_swap_filehdr_out			_bfd_pep_only_swap_filehdr_out
261*fae548d3Szrj #define _bfd_XX_print_private_bfd_data_common		_bfd_pep_print_private_bfd_data_common
262*fae548d3Szrj #define _bfd_XXi_final_link_postscript			_bfd_pepi_final_link_postscript
263*fae548d3Szrj #define _bfd_XXi_only_swap_filehdr_out			_bfd_pepi_only_swap_filehdr_out
264*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_in			_bfd_pepi_swap_aouthdr_in
265*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_out			_bfd_pepi_swap_aouthdr_out
266*fae548d3Szrj #define _bfd_XXi_swap_aux_in				_bfd_pepi_swap_aux_in
267*fae548d3Szrj #define _bfd_XXi_swap_aux_out				_bfd_pepi_swap_aux_out
268*fae548d3Szrj #define _bfd_XXi_swap_lineno_in				_bfd_pepi_swap_lineno_in
269*fae548d3Szrj #define _bfd_XXi_swap_lineno_out			_bfd_pepi_swap_lineno_out
270*fae548d3Szrj #define _bfd_XXi_swap_scnhdr_out			_bfd_pepi_swap_scnhdr_out
271*fae548d3Szrj #define _bfd_XXi_swap_sym_in				_bfd_pepi_swap_sym_in
272*fae548d3Szrj #define _bfd_XXi_swap_sym_out				_bfd_pepi_swap_sym_out
273*fae548d3Szrj #define _bfd_XXi_swap_debugdir_in			_bfd_pepi_swap_debugdir_in
274*fae548d3Szrj #define _bfd_XXi_swap_debugdir_out			_bfd_pepi_swap_debugdir_out
275*fae548d3Szrj #define _bfd_XXi_write_codeview_record			_bfd_pepi_write_codeview_record
276*fae548d3Szrj #define _bfd_XXi_slurp_codeview_record			_bfd_pepi_slurp_codeview_record
277*fae548d3Szrj 
278*fae548d3Szrj #else /* !COFF_WITH_pep */
279*fae548d3Szrj 
280*fae548d3Szrj #define GET_OPTHDR_IMAGE_BASE H_GET_32
281*fae548d3Szrj #define PUT_OPTHDR_IMAGE_BASE H_PUT_32
282*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_32
283*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_32
284*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_32
285*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_32
286*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_32
287*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_32
288*fae548d3Szrj #define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_32
289*fae548d3Szrj #define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_32
290*fae548d3Szrj #define GET_PDATA_ENTRY bfd_get_32
291*fae548d3Szrj 
292*fae548d3Szrj #define _bfd_XX_bfd_copy_private_bfd_data_common	_bfd_pe_bfd_copy_private_bfd_data_common
293*fae548d3Szrj #define _bfd_XX_bfd_copy_private_section_data		_bfd_pe_bfd_copy_private_section_data
294*fae548d3Szrj #define _bfd_XX_get_symbol_info				_bfd_pe_get_symbol_info
295*fae548d3Szrj #define _bfd_XX_only_swap_filehdr_out			_bfd_pe_only_swap_filehdr_out
296*fae548d3Szrj #define _bfd_XX_print_private_bfd_data_common		_bfd_pe_print_private_bfd_data_common
297*fae548d3Szrj #define _bfd_XXi_final_link_postscript			_bfd_pei_final_link_postscript
298*fae548d3Szrj #define _bfd_XXi_only_swap_filehdr_out			_bfd_pei_only_swap_filehdr_out
299*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_in			_bfd_pei_swap_aouthdr_in
300*fae548d3Szrj #define _bfd_XXi_swap_aouthdr_out			_bfd_pei_swap_aouthdr_out
301*fae548d3Szrj #define _bfd_XXi_swap_aux_in				_bfd_pei_swap_aux_in
302*fae548d3Szrj #define _bfd_XXi_swap_aux_out				_bfd_pei_swap_aux_out
303*fae548d3Szrj #define _bfd_XXi_swap_lineno_in				_bfd_pei_swap_lineno_in
304*fae548d3Szrj #define _bfd_XXi_swap_lineno_out			_bfd_pei_swap_lineno_out
305*fae548d3Szrj #define _bfd_XXi_swap_scnhdr_out			_bfd_pei_swap_scnhdr_out
306*fae548d3Szrj #define _bfd_XXi_swap_sym_in				_bfd_pei_swap_sym_in
307*fae548d3Szrj #define _bfd_XXi_swap_sym_out				_bfd_pei_swap_sym_out
308*fae548d3Szrj #define _bfd_XXi_swap_debugdir_in			_bfd_pei_swap_debugdir_in
309*fae548d3Szrj #define _bfd_XXi_swap_debugdir_out			_bfd_pei_swap_debugdir_out
310*fae548d3Szrj #define _bfd_XXi_write_codeview_record			_bfd_pei_write_codeview_record
311*fae548d3Szrj #define _bfd_XXi_slurp_codeview_record			_bfd_pei_slurp_codeview_record
312*fae548d3Szrj 
313*fae548d3Szrj #endif /* !COFF_WITH_pep */
314*fae548d3Szrj 
315*fae548d3Szrj /* These functions are architecture dependent, and are in peicode.h:
316*fae548d3Szrj    coff_swap_reloc_in
317*fae548d3Szrj    int coff_swap_reloc_out
318*fae548d3Szrj    coff_swap_filehdr_in
319*fae548d3Szrj    coff_swap_scnhdr_in
320*fae548d3Szrj    pe_mkobject
321*fae548d3Szrj    pe_mkobject_hook  */
322*fae548d3Szrj 
323*fae548d3Szrj /* The functions described below are common across all PE/PEI
324*fae548d3Szrj    implementations architecture types, and actually appear in
325*fae548d3Szrj    peigen.c.  */
326*fae548d3Szrj 
327*fae548d3Szrj #define coff_swap_sym_in      _bfd_XXi_swap_sym_in
328*fae548d3Szrj #define coff_swap_sym_out     _bfd_XXi_swap_sym_out
329*fae548d3Szrj #define coff_swap_aux_in      _bfd_XXi_swap_aux_in
330*fae548d3Szrj #define coff_swap_aux_out     _bfd_XXi_swap_aux_out
331*fae548d3Szrj #define coff_swap_lineno_in   _bfd_XXi_swap_lineno_in
332*fae548d3Szrj #define coff_swap_lineno_out  _bfd_XXi_swap_lineno_out
333*fae548d3Szrj #define coff_swap_aouthdr_in  _bfd_XXi_swap_aouthdr_in
334*fae548d3Szrj #define coff_swap_aouthdr_out _bfd_XXi_swap_aouthdr_out
335*fae548d3Szrj #define coff_swap_scnhdr_out  _bfd_XXi_swap_scnhdr_out
336*fae548d3Szrj 
337*fae548d3Szrj #ifndef coff_final_link_postscript
338*fae548d3Szrj #define coff_final_link_postscript _bfd_XXi_final_link_postscript
339*fae548d3Szrj #endif
340*fae548d3Szrj 
341*fae548d3Szrj void	    _bfd_XXi_swap_sym_in (bfd *, void *, void *);
342*fae548d3Szrj unsigned    _bfd_XXi_swap_sym_out (bfd *, void *, void *);
343*fae548d3Szrj void	    _bfd_XXi_swap_aux_in (bfd *, void *, int, int, int, int, void *);
344*fae548d3Szrj unsigned    _bfd_XXi_swap_aux_out (bfd *, void *, int, int, int, int, void *);
345*fae548d3Szrj void	    _bfd_XXi_swap_lineno_in (bfd *, void *, void *);
346*fae548d3Szrj unsigned    _bfd_XXi_swap_lineno_out (bfd *, void *, void *);
347*fae548d3Szrj void	    _bfd_XXi_swap_aouthdr_in (bfd *, void *, void *);
348*fae548d3Szrj unsigned    _bfd_XXi_swap_aouthdr_out (bfd *, void *, void *);
349*fae548d3Szrj unsigned    _bfd_XXi_swap_scnhdr_out (bfd *, void *, void *);
350*fae548d3Szrj bfd_boolean _bfd_XX_print_private_bfd_data_common (bfd *, void *);
351*fae548d3Szrj bfd_boolean _bfd_XX_bfd_copy_private_bfd_data_common (bfd *, bfd *);
352*fae548d3Szrj void	    _bfd_XX_get_symbol_info (bfd *, asymbol *, symbol_info *);
353*fae548d3Szrj bfd_boolean _bfd_XXi_final_link_postscript (bfd *, struct coff_final_link_info *);
354*fae548d3Szrj void	    _bfd_XXi_swap_debugdir_in (bfd *, void *, void *);
355*fae548d3Szrj unsigned    _bfd_XXi_swap_debugdir_out (bfd *, void *, void *);
356*fae548d3Szrj unsigned    _bfd_XXi_write_codeview_record (bfd *, file_ptr, CODEVIEW_INFO *);
357*fae548d3Szrj CODEVIEW_INFO * _bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo);
358*fae548d3Szrj 
359*fae548d3Szrj /* The following are needed only for ONE of pe or pei, but don't
360*fae548d3Szrj    otherwise vary; peicode.h fixes up ifdefs but we provide the
361*fae548d3Szrj    prototype.  */
362*fae548d3Szrj 
363*fae548d3Szrj unsigned    _bfd_XX_only_swap_filehdr_out  (bfd *, void *, void *);
364*fae548d3Szrj unsigned    _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *);
365*fae548d3Szrj bfd_boolean _bfd_XX_bfd_copy_private_section_data (bfd *, asection *, bfd *, asection *);
366*fae548d3Szrj 
367*fae548d3Szrj bfd_boolean _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
368*fae548d3Szrj bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
369*fae548d3Szrj bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
370*fae548d3Szrj bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
371*fae548d3Szrj 
372