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