|
|
1.1 root 1: /* Definitions of target machine for GNU compiler for Intel 80386
2: running FreeBSD.
3: Copyright (C) 1988, 1992, 1994 Free Software Foundation, Inc.
4: Contributed by Poul-Henning Kamp <[email protected]>
5:
6: This file is part of GNU CC.
7:
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)
11: any later version.
12:
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.
17:
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
1.1.1.2 root 20: the Free Software Foundation, 59 Temple Place - Suite 330,
21: Boston, MA 02111-1307, USA. */
1.1 root 22:
23: /* This goes away when the math-emulator is fixed */
24: #define TARGET_CPU_DEFAULT 0400 /* TARGET_NO_FANCY_MATH_387 */
25:
26: /* This is tested by i386gas.h. */
27: #define YES_UNDERSCORES
28:
29: /* Don't assume anything about the header files. */
30: #define NO_IMPLICIT_EXTERN_C
31:
32: #include "i386/gstabs.h"
33:
34: /* Get perform_* macros to build libgcc.a. */
35: #include "i386/perform.h"
36:
37: #undef CPP_PREDEFINES
38: #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
39:
40: /* Like the default, except no -lg. */
41: #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
42:
43: #undef SIZE_TYPE
44: #define SIZE_TYPE "unsigned int"
45:
46: #undef PTRDIFF_TYPE
47: #define PTRDIFF_TYPE "int"
48:
49: #undef WCHAR_TYPE
50: #define WCHAR_TYPE "short unsigned int"
51:
52: #define WCHAR_UNSIGNED 1
53:
54: #undef WCHAR_TYPE_SIZE
55: #define WCHAR_TYPE_SIZE 16
56:
57: #define HAVE_ATEXIT
58:
59: /* There are conflicting reports about whether this system uses
60: a different assembler syntax. [email protected] says # is right. */
61: #undef COMMENT_BEGIN
62: #define COMMENT_BEGIN "#"
63:
64: #undef ASM_APP_ON
65: #define ASM_APP_ON "#APP\n"
66:
67: #undef ASM_APP_OFF
68: #define ASM_APP_OFF "#NO_APP\n"
69:
70: /* The following macros are stolen from i386v4.h */
71: /* These have to be defined to get PIC code correct */
72:
73: /* This is how to output an element of a case-vector that is relative.
74: This is only used for PIC code. See comments by the `casesi' insn in
75: i386.md for an explanation of the expression this outputs. */
76:
77: #undef ASM_OUTPUT_ADDR_DIFF_ELT
78: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
79: fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
80:
81: /* Indicate that jump tables go in the text section. This is
82: necessary when compiling PIC code. */
83:
84: #define JUMP_TABLES_IN_TEXT_SECTION
85:
86: /* Don't default to pcc-struct-return, because gcc is the only compiler, and
87: we want to retain compatibility with older gcc versions. */
88: #define DEFAULT_PCC_STRUCT_RETURN 0
89:
90: /* Profiling routines, partially copied from i386/osfrose.h. */
91:
92: /* Redefine this to use %eax instead of %edx. */
93: #undef FUNCTION_PROFILER
94: #define FUNCTION_PROFILER(FILE, LABELNO) \
95: { \
96: if (flag_pic) \
97: { \
98: fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \
99: LPREFIX, (LABELNO)); \
100: fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \
101: } \
102: else \
103: { \
104: fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \
105: fprintf (FILE, "\tcall mcount\n"); \
106: } \
107: }
108:
109: /*
110: * Some imports from svr4.h in support of shared libraries.
111: * Currently, we need the DECLARE_OBJECT_SIZE stuff.
112: */
113:
114: /* Define the strings used for the special svr4 .type and .size directives.
115: These strings generally do not vary from one system running svr4 to
116: another, but if a given system (e.g. m88k running svr) needs to use
117: different pseudo-op names for these, they may be overridden in the
118: file which includes this one. */
119:
120: #define TYPE_ASM_OP ".type"
121: #define SIZE_ASM_OP ".size"
1.1.1.2 root 122:
1.1 root 123: /* The following macro defines the format used to output the second
124: operand of the .type assembler directive. Different svr4 assemblers
125: expect various different forms for this operand. The one given here
126: is just a default. You may need to override it in your machine-
127: specific tm.h file (depending upon the particulars of your assembler). */
128:
129: #define TYPE_OPERAND_FMT "@%s"
130:
131: /* Write the extra assembler code needed to declare a function's result.
132: Most svr4 assemblers don't require any special declaration of the
133: result value, but there are exceptions. */
134:
135: #ifndef ASM_DECLARE_RESULT
136: #define ASM_DECLARE_RESULT(FILE, RESULT)
137: #endif
138:
139: /* These macros generate the special .type and .size directives which
140: are used to set the corresponding fields of the linker symbol table
141: entries in an ELF object file under SVR4. These macros also output
142: the starting labels for the relevant functions/objects. */
143:
144: /* Write the extra assembler code needed to declare a function properly.
145: Some svr4 assemblers need to also have something extra said about the
146: function's return value. We allow for that here. */
147:
148: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
149: do { \
150: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
151: assemble_name (FILE, NAME); \
152: putc (',', FILE); \
153: fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
154: putc ('\n', FILE); \
155: ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
156: ASM_OUTPUT_LABEL(FILE, NAME); \
157: } while (0)
158:
159: /* Write the extra assembler code needed to declare an object properly. */
160:
161: #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
162: do { \
163: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
164: assemble_name (FILE, NAME); \
165: putc (',', FILE); \
166: fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
167: putc ('\n', FILE); \
168: size_directive_output = 0; \
169: if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
170: { \
171: size_directive_output = 1; \
172: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
173: assemble_name (FILE, NAME); \
174: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
175: } \
176: ASM_OUTPUT_LABEL(FILE, NAME); \
177: } while (0)
178:
179: /* Output the size directive for a decl in rest_of_decl_compilation
180: in the case where we did not do so before the initializer.
181: Once we find the error_mark_node, we know that the value of
182: size_directive_output was set
183: by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
184:
185: #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
186: do { \
187: char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
188: if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
189: && ! AT_END && TOP_LEVEL \
190: && DECL_INITIAL (DECL) == error_mark_node \
191: && !size_directive_output) \
192: { \
193: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
194: assemble_name (FILE, name); \
195: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\
196: } \
197: } while (0)
198:
199:
200: /* This is how to declare the size of a function. */
201:
202: #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
203: do { \
204: if (!flag_inhibit_size_directive) \
205: { \
206: char label[256]; \
207: static int labelno; \
208: labelno++; \
209: ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
210: ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
211: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
212: assemble_name (FILE, (FNAME)); \
213: fprintf (FILE, ","); \
214: assemble_name (FILE, label); \
215: fprintf (FILE, "-"); \
216: assemble_name (FILE, (FNAME)); \
217: putc ('\n', FILE); \
218: } \
219: } while (0)
220:
221: #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
222: #define LINK_SPEC \
223: "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
224:
225: /* This is defined when gcc is compiled in the BSD-directory-tree, and must
226: * make up for the gap to all the stuff done in the GNU-makefiles.
227: */
228:
229: #ifdef FREEBSD_NATIVE
230:
231: #define INCLUDE_DEFAULTS { \
232: { "/usr/include", 0 }, \
233: { "/usr/include/g++", 1 }, \
234: { 0, 0} \
235: }
236:
237: #undef MD_EXEC_PREFIX
238: #define MD_EXEC_PREFIX "/usr/libexec/"
239:
240: #undef STANDARD_STARTFILE_PREFIX
241: #define STANDARD_STARTFILE_PREFIX "/usr/lib"
242:
243: #if 0 /* This is very wrong!!! */
244: #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0"
245: #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include"
246: #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include"
247: #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include"
248: #endif
249:
250: #endif /* FREEBSD_NATIVE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.