1 /* Definitions of target machine for GNU compiler,
2 for ARM with COFF obj format.
3 Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
4 Contributed by Doug Evans (dje@cygnus.com).
6 This file is part of GNU CC.
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
26 /* Run-time Target Specification. */
28 #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
31 #define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
33 #define MULTILIB_DEFAULTS { "mlittle-endian", "msoft-float", "mapcs-32" }
35 /* Setting this to 32 produces more efficient code, but the value set in previous
36 versions of this toolchain was 8, which produces more compact structures. The
37 command line option -mstructure_size_boundary=<n> can be used to change this
39 #undef STRUCTURE_SIZE_BOUNDARY
40 #define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary
42 extern int arm_structure_size_boundary
;
44 /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
45 is a valid machine specific attribute for DECL.
46 The attributes in ATTRIBUTES have previously been assigned to DECL. */
47 extern int arm_valid_machine_decl_attribute ();
48 #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
49 arm_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
51 /* This is COFF, but prefer stabs. */
52 #define SDB_DEBUGGING_INFO
54 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
58 /* A C statement to output assembler commands which will identify the
59 object file as having been compiled with GNU CC (or another GNU
61 /* Define this to NULL so we don't get anything.
62 We have ASM_IDENTIFY_LANGUAGE.
63 Also, when using stabs, gcc2_compiled must be a stabs entry, not an
64 ordinary symbol, or gdb won't see it. The stabs entry must be
65 before the N_SO in order for gdb to find it. */
66 #define ASM_IDENTIFY_GCC(STREAM) \
67 fprintf (STREAM, "%sgcc2_compiled.:\n", LOCAL_LABEL_PREFIX )
69 /* This outputs a lot of .req's to define alias for various registers.
70 Let's try to avoid this. */
72 #define ASM_FILE_START(STREAM) \
74 extern char *version_string; \
75 fprintf (STREAM, "%s Generated by gcc %s for ARM/coff\n", \
76 ASM_COMMENT_START, version_string); \
79 /* A C statement to output something to the assembler file to switch to section
80 NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
81 NULL_TREE. Some target formats do not support arbitrary sections. Do not
82 define this macro in such cases. */
83 #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \
85 if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \
86 fprintf (STREAM, "\t.section %s,\"x\"\n", (NAME)); \
87 else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \
88 fprintf (STREAM, "\t.section %s,\"\"\n", (NAME)); \
90 fprintf (STREAM, "\t.section %s,\"w\"\n", (NAME)); \
93 /* Support the ctors/dtors and other sections. */
95 #undef INIT_SECTION_ASM_OP
97 /* Define this macro if jump tables (for `tablejump' insns) should be
98 output in the text section, along with the assembler instructions.
99 Otherwise, the readonly data section is used. */
100 #define JUMP_TABLES_IN_TEXT_SECTION 1
102 #undef READONLY_DATA_SECTION
103 #define READONLY_DATA_SECTION rdata_section
104 #undef RDATA_SECTION_ASM_OP
105 #define RDATA_SECTION_ASM_OP "\t.section .rdata"
106 #undef CTORS_SECTION_ASM_OP
107 #define CTORS_SECTION_ASM_OP "\t.section .ctors,\"x\""
108 #undef DTORS_SECTION_ASM_OP
109 #define DTORS_SECTION_ASM_OP "\t.section .dtors,\"x\""
111 /* A list of other sections which the compiler might be "in" at any
114 #undef EXTRA_SECTIONS
115 #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS in_rdata, in_ctors, in_dtors
117 #define SUBTARGET_EXTRA_SECTIONS
119 /* A list of extra section function definitions. */
121 #undef EXTRA_SECTION_FUNCTIONS
122 #define EXTRA_SECTION_FUNCTIONS \
123 RDATA_SECTION_FUNCTION \
124 CTORS_SECTION_FUNCTION \
125 DTORS_SECTION_FUNCTION \
126 SUBTARGET_EXTRA_SECTION_FUNCTIONS
128 #define SUBTARGET_EXTRA_SECTION_FUNCTIONS
130 #define RDATA_SECTION_FUNCTION \
134 if (in_section != in_rdata) \
136 fprintf (asm_out_file, "%s\n", RDATA_SECTION_ASM_OP); \
137 in_section = in_rdata; \
141 #define CTORS_SECTION_FUNCTION \
145 if (in_section != in_ctors) \
147 fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
148 in_section = in_ctors; \
152 #define DTORS_SECTION_FUNCTION \
156 if (in_section != in_dtors) \
158 fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
159 in_section = in_dtors; \
163 /* Support the ctors/dtors sections for g++. */
165 #define INT_ASM_OP ".word"
167 /* A C statement (sans semicolon) to output an element in the table of
168 global constructors. */
169 #undef ASM_OUTPUT_CONSTRUCTOR
170 #define ASM_OUTPUT_CONSTRUCTOR(STREAM,NAME) \
173 fprintf (STREAM, "\t%s\t ", INT_ASM_OP); \
174 assemble_name (STREAM, NAME); \
175 fprintf (STREAM, "\n"); \
178 /* A C statement (sans semicolon) to output an element in the table of
179 global destructors. */
180 #undef ASM_OUTPUT_DESTRUCTOR
181 #define ASM_OUTPUT_DESTRUCTOR(STREAM,NAME) \
184 fprintf (STREAM, "\t%s\t ", INT_ASM_OP); \
185 assemble_name (STREAM, NAME); \
186 fprintf (STREAM, "\n"); \
189 /* __CTOR_LIST__ and __DTOR_LIST__ must be defined by the linker script. */
190 #define CTOR_LISTS_DEFINED_EXTERNALLY
192 #undef DO_GLOBAL_CTORS_BODY
193 #undef DO_GLOBAL_DTORS_BODY
195 /* If you don't define HAVE_ATEXIT, and the object file format/OS/whatever
196 does not support constructors/destructors, then gcc implements destructors
197 by defining its own exit function, which calls the destructors. This gcc
198 exit function overrides the C library's exit function, and this can cause
199 all kinds of havoc if the C library has a non-trivial exit function. You
200 really don't want to use the exit function in libgcc2.c. */
203 /* The ARM development system defines __main. */
204 #define NAME__MAIN "__gccmain"
205 #define SYMBOL__MAIN __gccmain