1 /* BFD back-end for Intel/AMD x86_64 PECOFF files. 2 Copyright (C) 2006-2014 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 #include "coff-x86_64.c" 62 63 /* Entry for big object files. */ 64 65 const bfd_target 66 x86_64_pe_be_vec = 67 { 68 "pe-bigobj-x86-64", /* Name. */ 69 bfd_target_coff_flavour, 70 BFD_ENDIAN_LITTLE, /* Data byte order is little. */ 71 BFD_ENDIAN_LITTLE, /* Header byte order is little. */ 72 73 (HAS_RELOC | EXEC_P | /* Object flags. */ 74 HAS_LINENO | HAS_DEBUG | 75 HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS), 76 77 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ 78 | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING 79 | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), 80 81 TARGET_UNDERSCORE, /* Leading underscore. */ 82 '/', /* Ar_pad_char. */ 83 15, /* Ar_max_namelen. */ 84 0, /* match priority. */ 85 86 bfd_getl64, bfd_getl_signed_64, bfd_putl64, 87 bfd_getl32, bfd_getl_signed_32, bfd_putl32, 88 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ 89 bfd_getl64, bfd_getl_signed_64, bfd_putl64, 90 bfd_getl32, bfd_getl_signed_32, bfd_putl32, 91 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ 92 93 /* Note that we allow an object file to be treated as a core file as well. */ 94 { _bfd_dummy_target, amd64coff_object_p, /* BFD_check_format. */ 95 bfd_generic_archive_p, amd64coff_object_p }, 96 { bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format. */ 97 bfd_false }, 98 { bfd_false, coff_write_object_contents, /* bfd_write_contents. */ 99 _bfd_write_archive_contents, bfd_false }, 100 101 BFD_JUMP_TABLE_GENERIC (coff), 102 BFD_JUMP_TABLE_COPY (coff), 103 BFD_JUMP_TABLE_CORE (_bfd_nocore), 104 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), 105 BFD_JUMP_TABLE_SYMBOLS (coff), 106 BFD_JUMP_TABLE_RELOCS (coff), 107 BFD_JUMP_TABLE_WRITE (coff), 108 BFD_JUMP_TABLE_LINK (coff), 109 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), 110 111 NULL, 112 113 &bigobj_swap_table 114 }; 115