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