comparison gcc/config/arm/pe.h @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:a06113de4d67
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, 2007
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 3, 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 COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 /* Enable PE specific code. */
23 #define ARM_PE 1
24
25 #define ARM_PE_FLAG_CHAR '@'
26
27 /* Ensure that @x. will be stripped from the function name. */
28 #undef SUBTARGET_NAME_ENCODING_LENGTHS
29 #define SUBTARGET_NAME_ENCODING_LENGTHS \
30 case ARM_PE_FLAG_CHAR: return 3;
31
32 #undef USER_LABEL_PREFIX
33 #define USER_LABEL_PREFIX "_"
34
35
36 /* Run-time Target Specification. */
37 #undef TARGET_VERSION
38 #define TARGET_VERSION fputs (" (ARM/pe)", stderr)
39
40 /* Get tree.c to declare a target-specific specialization of
41 merge_decl_attributes. */
42 #define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1
43
44 #undef SUBTARGET_CPP_SPEC
45 #define SUBTARGET_CPP_SPEC "-D__pe__"
46
47 #undef TARGET_DEFAULT
48 #define TARGET_DEFAULT (MASK_NOP_FUN_DLLIMPORT)
49
50 #undef MULTILIB_DEFAULTS
51 #define MULTILIB_DEFAULTS \
52 { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" }
53
54 #undef WCHAR_TYPE
55 #define WCHAR_TYPE "short unsigned int"
56 #undef WCHAR_TYPE_SIZE
57 #define WCHAR_TYPE_SIZE 16
58
59 /* r11 is fixed. */
60 #undef SUBTARGET_CONDITIONAL_REGISTER_USAGE
61 #define SUBTARGET_CONDITIONAL_REGISTER_USAGE \
62 fixed_regs [11] = 1; \
63 call_used_regs [11] = 1;
64
65
66 /* PE/COFF uses explicit import from shared libraries. */
67 #define MULTIPLE_SYMBOL_SPACES 1
68
69 #define TARGET_ASM_UNIQUE_SECTION arm_pe_unique_section
70 #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
71
72 #define SUPPORTS_ONE_ONLY 1
73
74 /* Switch into a generic section. */
75 #undef TARGET_ASM_NAMED_SECTION
76 #define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section
77
78 #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
79
80 /* Output a reference to a label. */
81 #undef ASM_OUTPUT_LABELREF
82 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
83 asm_fprintf (STREAM, "%U%s", arm_strip_name_encoding (NAME))
84
85 /* Output a function definition label. */
86 #undef ASM_DECLARE_FUNCTION_NAME
87 #define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
88 do \
89 { \
90 if (arm_dllexport_name_p (NAME)) \
91 { \
92 drectve_section (); \
93 fprintf (STREAM, "\t.ascii \" -export:%s\"\n", \
94 arm_strip_name_encoding (NAME)); \
95 switch_to_section (function_section (DECL)); \
96 } \
97 ARM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL); \
98 if (TARGET_THUMB) \
99 fprintf (STREAM, "\t.code 16\n"); \
100 ASM_OUTPUT_LABEL (STREAM, NAME); \
101 } \
102 while (0)
103
104 /* Output a common block. */
105 #undef ASM_OUTPUT_COMMON
106 #define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
107 do \
108 { \
109 if (arm_dllexport_name_p (NAME)) \
110 { \
111 drectve_section (); \
112 fprintf ((STREAM), "\t.ascii \" -export:%s\"\n",\
113 arm_strip_name_encoding (NAME)); \
114 } \
115 if (! arm_dllimport_name_p (NAME)) \
116 { \
117 fprintf ((STREAM), "\t.comm\t"); \
118 assemble_name ((STREAM), (NAME)); \
119 asm_fprintf ((STREAM), ", %d\t%@ %d\n", \
120 (int)(ROUNDED), (int)(SIZE)); \
121 } \
122 } \
123 while (0)
124
125 /* Output the label for an initialized variable. */
126 #undef ASM_DECLARE_OBJECT_NAME
127 #define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
128 do \
129 { \
130 if (arm_dllexport_name_p (NAME)) \
131 { \
132 section *save_section = in_section; \
133 drectve_section (); \
134 fprintf (STREAM, "\t.ascii \" -export:%s\"\n",\
135 arm_strip_name_encoding (NAME)); \
136 switch_to_section (save_section); \
137 } \
138 ASM_OUTPUT_LABEL ((STREAM), (NAME)); \
139 } \
140 while (0)
141
142 /* Support the ctors/dtors and other sections. */
143
144 #define DRECTVE_SECTION_ASM_OP "\t.section .drectve"
145
146 #define drectve_section() \
147 (fprintf (asm_out_file, "%s\n", DRECTVE_SECTION_ASM_OP), \
148 in_section = NULL)