Mercurial > hg > CbC > CbC_gcc
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) |