pe.h revision 169689
1/* Definitions of target machine for GNU compiler, for ARM with PE obj format. 2 Copyright (C) 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2005 3 Free Software Foundation, Inc. 4 Contributed by Doug Evans (dje@cygnus.com). 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it 9 under the terms of the GNU General Public License as published 10 by the Free Software Foundation; either version 2, or (at your 11 option) any later version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 16 License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING. If not, write to 20 the Free Software Foundation, 51 Franklin Street, Fifth Floor, 21 Boston, MA 02110-1301, USA. */ 22 23/* Enable PE specific code. */ 24#define ARM_PE 1 25 26#define ARM_PE_FLAG_CHAR '@' 27 28/* Ensure that @x. will be stripped from the function name. */ 29#undef SUBTARGET_NAME_ENCODING_LENGTHS 30#define SUBTARGET_NAME_ENCODING_LENGTHS \ 31 case ARM_PE_FLAG_CHAR: return 3; 32 33#undef USER_LABEL_PREFIX 34#define USER_LABEL_PREFIX "_" 35 36 37/* Run-time Target Specification. */ 38#undef TARGET_VERSION 39#define TARGET_VERSION fputs (" (ARM/pe)", stderr) 40 41/* Get tree.c to declare a target-specific specialization of 42 merge_decl_attributes. */ 43#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1 44 45#undef SUBTARGET_CPP_SPEC 46#define SUBTARGET_CPP_SPEC "-D__pe__" 47 48#undef TARGET_DEFAULT 49#define TARGET_DEFAULT (MASK_NOP_FUN_DLLIMPORT) 50 51#undef MULTILIB_DEFAULTS 52#define MULTILIB_DEFAULTS \ 53 { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" } 54 55#undef WCHAR_TYPE 56#define WCHAR_TYPE "short unsigned int" 57#undef WCHAR_TYPE_SIZE 58#define WCHAR_TYPE_SIZE 16 59 60/* r11 is fixed. */ 61#undef SUBTARGET_CONDITIONAL_REGISTER_USAGE 62#define SUBTARGET_CONDITIONAL_REGISTER_USAGE \ 63 fixed_regs [11] = 1; \ 64 call_used_regs [11] = 1; 65 66 67/* PE/COFF uses explicit import from shared libraries. */ 68#define MULTIPLE_SYMBOL_SPACES 1 69 70#define TARGET_ASM_UNIQUE_SECTION arm_pe_unique_section 71#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section 72 73#define SUPPORTS_ONE_ONLY 1 74 75/* Switch into a generic section. */ 76#undef TARGET_ASM_NAMED_SECTION 77#define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section 78 79#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true 80 81/* Output a reference to a label. */ 82#undef ASM_OUTPUT_LABELREF 83#define ASM_OUTPUT_LABELREF(STREAM, NAME) \ 84 asm_fprintf (STREAM, "%U%s", arm_strip_name_encoding (NAME)) 85 86/* Output a function definition label. */ 87#undef ASM_DECLARE_FUNCTION_NAME 88#define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \ 89 do \ 90 { \ 91 if (arm_dllexport_name_p (NAME)) \ 92 { \ 93 drectve_section (); \ 94 fprintf (STREAM, "\t.ascii \" -export:%s\"\n", \ 95 arm_strip_name_encoding (NAME)); \ 96 switch_to_section (function_section (DECL)); \ 97 } \ 98 ARM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL); \ 99 if (TARGET_THUMB) \ 100 fprintf (STREAM, "\t.code 16\n"); \ 101 ASM_OUTPUT_LABEL (STREAM, NAME); \ 102 } \ 103 while (0) 104 105/* Output a common block. */ 106#undef ASM_OUTPUT_COMMON 107#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ 108 do \ 109 { \ 110 if (arm_dllexport_name_p (NAME)) \ 111 { \ 112 drectve_section (); \ 113 fprintf ((STREAM), "\t.ascii \" -export:%s\"\n",\ 114 arm_strip_name_encoding (NAME)); \ 115 } \ 116 if (! arm_dllimport_name_p (NAME)) \ 117 { \ 118 fprintf ((STREAM), "\t.comm\t"); \ 119 assemble_name ((STREAM), (NAME)); \ 120 asm_fprintf ((STREAM), ", %d\t%@ %d\n", \ 121 (int)(ROUNDED), (int)(SIZE)); \ 122 } \ 123 } \ 124 while (0) 125 126/* Output the label for an initialized variable. */ 127#undef ASM_DECLARE_OBJECT_NAME 128#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \ 129 do \ 130 { \ 131 if (arm_dllexport_name_p (NAME)) \ 132 { \ 133 section *save_section = in_section; \ 134 drectve_section (); \ 135 fprintf (STREAM, "\t.ascii \" -export:%s\"\n",\ 136 arm_strip_name_encoding (NAME)); \ 137 switch_to_section (save_section); \ 138 } \ 139 ASM_OUTPUT_LABEL ((STREAM), (NAME)); \ 140 } \ 141 while (0) 142 143/* Support the ctors/dtors and other sections. */ 144 145#define DRECTVE_SECTION_ASM_OP "\t.section .drectve" 146 147#define drectve_section() \ 148 (fprintf (asm_out_file, "%s\n", DRECTVE_SECTION_ASM_OP), \ 149 in_section = NULL) 150