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