|
|
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:
! 123: /* This is how we tell the assembler that a symbol is weak. */
! 124:
! 125: #define ASM_WEAKEN_LABEL(FILE,NAME) \
! 126: do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
! 127: fputc ('\n', FILE); } while (0)
1.1 root 128:
129: /* The following macro defines the format used to output the second
130: operand of the .type assembler directive. Different svr4 assemblers
131: expect various different forms for this operand. The one given here
132: is just a default. You may need to override it in your machine-
133: specific tm.h file (depending upon the particulars of your assembler). */
134:
135: #define TYPE_OPERAND_FMT "@%s"
136:
137: /* Write the extra assembler code needed to declare a function's result.
138: Most svr4 assemblers don't require any special declaration of the
139: result value, but there are exceptions. */
140:
141: #ifndef ASM_DECLARE_RESULT
142: #define ASM_DECLARE_RESULT(FILE, RESULT)
143: #endif
144:
145: /* These macros generate the special .type and .size directives which
146: are used to set the corresponding fields of the linker symbol table
147: entries in an ELF object file under SVR4. These macros also output
148: the starting labels for the relevant functions/objects. */
149:
150: /* Write the extra assembler code needed to declare a function properly.
151: Some svr4 assemblers need to also have something extra said about the
152: function's return value. We allow for that here. */
153:
154: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
155: do { \
156: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
157: assemble_name (FILE, NAME); \
158: putc (',', FILE); \
159: fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
160: putc ('\n', FILE); \
161: ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
162: ASM_OUTPUT_LABEL(FILE, NAME); \
163: } while (0)
164:
165: /* Write the extra assembler code needed to declare an object properly. */
166:
167: #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
168: do { \
169: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
170: assemble_name (FILE, NAME); \
171: putc (',', FILE); \
172: fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
173: putc ('\n', FILE); \
174: size_directive_output = 0; \
175: if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
176: { \
177: size_directive_output = 1; \
178: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
179: assemble_name (FILE, NAME); \
180: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
181: } \
182: ASM_OUTPUT_LABEL(FILE, NAME); \
183: } while (0)
184:
185: /* Output the size directive for a decl in rest_of_decl_compilation
186: in the case where we did not do so before the initializer.
187: Once we find the error_mark_node, we know that the value of
188: size_directive_output was set
189: by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
190:
191: #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
192: do { \
193: char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
194: if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
195: && ! AT_END && TOP_LEVEL \
196: && DECL_INITIAL (DECL) == error_mark_node \
197: && !size_directive_output) \
198: { \
199: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
200: assemble_name (FILE, name); \
201: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\
202: } \
203: } while (0)
204:
205:
206: /* This is how to declare the size of a function. */
207:
208: #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
209: do { \
210: if (!flag_inhibit_size_directive) \
211: { \
212: char label[256]; \
213: static int labelno; \
214: labelno++; \
215: ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
216: ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
217: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
218: assemble_name (FILE, (FNAME)); \
219: fprintf (FILE, ","); \
220: assemble_name (FILE, label); \
221: fprintf (FILE, "-"); \
222: assemble_name (FILE, (FNAME)); \
223: putc ('\n', FILE); \
224: } \
225: } while (0)
226:
227: #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
228: #define LINK_SPEC \
229: "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
230:
231: /* This is defined when gcc is compiled in the BSD-directory-tree, and must
232: * make up for the gap to all the stuff done in the GNU-makefiles.
233: */
234:
235: #ifdef FREEBSD_NATIVE
236:
237: #define INCLUDE_DEFAULTS { \
238: { "/usr/include", 0 }, \
239: { "/usr/include/g++", 1 }, \
240: { 0, 0} \
241: }
242:
243: #undef MD_EXEC_PREFIX
244: #define MD_EXEC_PREFIX "/usr/libexec/"
245:
246: #undef STANDARD_STARTFILE_PREFIX
247: #define STANDARD_STARTFILE_PREFIX "/usr/lib"
248:
249: #if 0 /* This is very wrong!!! */
250: #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0"
251: #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include"
252: #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include"
253: #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include"
254: #endif
255:
256: #endif /* FREEBSD_NATIVE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.