1 /* BFD back-end for Intel/AMD x86_64 PECOFF files. 2 Copyright (C) 2006-2020 Free Software Foundation, Inc. 3 4 This file is part of BFD, the Binary File Descriptor library. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. 20 21 Written by Kai Tietz, OneVision Software GmbH&CoKg. */ 22 23 #include "sysdep.h" 24 #include "bfd.h" 25 26 #define TARGET_SYM x86_64_pe_vec 27 #define TARGET_NAME "pe-x86-64" 28 #define COFF_WITH_PE 29 #define COFF_WITH_pex64 30 #define COFF_WITH_PE_BIGOBJ 31 #define PCRELOFFSET TRUE 32 #if defined (USE_MINGW64_LEADING_UNDERSCORES) 33 #define TARGET_UNDERSCORE '_' 34 #else 35 #define TARGET_UNDERSCORE 0 36 #endif 37 #define COFF_LONG_SECTION_NAMES 38 #define COFF_SUPPORT_GNU_LINKONCE 39 #define COFF_LONG_FILENAMES 40 41 #define COFF_SECTION_ALIGNMENT_ENTRIES \ 42 { COFF_SECTION_NAME_EXACT_MATCH (".bss"), \ 43 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \ 44 { COFF_SECTION_NAME_PARTIAL_MATCH (".data"), \ 45 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \ 46 { COFF_SECTION_NAME_PARTIAL_MATCH (".rdata"), \ 47 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \ 48 { COFF_SECTION_NAME_PARTIAL_MATCH (".text"), \ 49 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \ 50 { COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \ 51 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ 52 { COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \ 53 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ 54 { COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \ 55 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \ 56 { COFF_SECTION_NAME_PARTIAL_MATCH (".zdebug"), \ 57 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \ 58 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \ 59 COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 } 60 61 /* The function pex64_bfd_print_pdata is implemented in pei-x86_64.c 62 source, but has be extended to also handle pe objects. */ 63 extern bfd_boolean pex64_bfd_print_pdata (bfd *, void *); 64 65 #define bfd_pe_print_pdata pex64_bfd_print_pdata 66 67 #include "coff-x86_64.c" 68 69 /* Entry for big object files. */ 70 71 const bfd_target 72 x86_64_pe_be_vec = 73 { 74 "pe-bigobj-x86-64", /* Name. */ 75 bfd_target_coff_flavour, 76 BFD_ENDIAN_LITTLE, /* Data byte order is little. */ 77 BFD_ENDIAN_LITTLE, /* Header byte order is little. */ 78 79 (HAS_RELOC | EXEC_P /* Object flags. */ 80 | HAS_LINENO | HAS_DEBUG 81 | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS), 82 83 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ 84 | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING 85 | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), 86 87 TARGET_UNDERSCORE, /* Leading underscore. */ 88 '/', /* Ar_pad_char. */ 89 15, /* Ar_max_namelen. */ 90 0, /* match priority. */ 91 92 bfd_getl64, bfd_getl_signed_64, bfd_putl64, 93 bfd_getl32, bfd_getl_signed_32, bfd_putl32, 94 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ 95 bfd_getl64, bfd_getl_signed_64, bfd_putl64, 96 bfd_getl32, bfd_getl_signed_32, bfd_putl32, 97 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ 98 99 /* Note that we allow an object file to be treated as a core file as well. */ 100 { /* bfd_check_format. */ 101 _bfd_dummy_target, 102 amd64coff_object_p, 103 bfd_generic_archive_p, 104 amd64coff_object_p 105 }, 106 { /* bfd_set_format. */ 107 _bfd_bool_bfd_false_error, 108 coff_mkobject, 109 _bfd_generic_mkarchive, 110 _bfd_bool_bfd_false_error 111 }, 112 { /* bfd_write_contents. */ 113 _bfd_bool_bfd_false_error, 114 coff_write_object_contents, 115 _bfd_write_archive_contents, 116 _bfd_bool_bfd_false_error 117 }, 118 119 BFD_JUMP_TABLE_GENERIC (coff), 120 BFD_JUMP_TABLE_COPY (coff), 121 BFD_JUMP_TABLE_CORE (_bfd_nocore), 122 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), 123 BFD_JUMP_TABLE_SYMBOLS (coff), 124 BFD_JUMP_TABLE_RELOCS (coff), 125 BFD_JUMP_TABLE_WRITE (coff), 126 BFD_JUMP_TABLE_LINK (coff), 127 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), 128 129 NULL, 130 131 &bigobj_swap_table 132 }; 133