Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / gcc / config / i386 / dgux.h
1 /* Target definitions for GNU compiler for Intel 80x86 running DG/ux
2    Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
3    Currently maintained by gcc@dg-rtp.dg.com.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 /* for now, we are just like the sysv4 version with a
23    few hacks
24 */
25
26 #include "i386/sysv4.h"
27
28 #ifndef VERSION_INFO2
29 #define VERSION_INFO2   "$Revision: 1.6 $"
30 #endif
31
32 #ifndef VERSION_STRING
33 #define VERSION_STRING  version_string
34 #endif
35
36 /* Identify the compiler.  */
37 /* TARGET_VERSION used by toplev.c VERSION_STRING used by -midentify-revision */
38
39 #undef  TARGET_VERSION
40 #define TARGET_VERSION fprintf (stderr, " (%s%s, %s)", \
41                                 VERSION_INFO1, VERSION_INFO2, __DATE__)
42 #undef  VERSION_INFO1
43 #define VERSION_INFO1 "ix86 DG/ux, "
44
45 /* Augment TARGET_SWITCHES with the MXDB options.  */
46 #define MASK_STANDARD           0x40000000 /* Retain standard information */
47 #define MASK_NOLEGEND           0x20000000 /* Discard legend information */
48 #define MASK_EXTERNAL_LEGEND    0x10000000 /* Make external legends */
49 #define MASK_IDENTIFY_REVISION  0x08000000 /* Emit 'ident' to .s */
50 #define MASK_WARN_PASS_STRUCT   0x04000000 /* Warn when structures are passed */
51
52 #define TARGET_STANDARD           (target_flags & MASK_STANDARD)
53 #define TARGET_NOLEGEND           (target_flags & MASK_NOLEGEND)
54 #define TARGET_EXTERNAL_LEGEND    (target_flags & MASK_EXTERNAL_LEGEND)
55 #define TARGET_IDENTIFY_REVISION  (target_flags & MASK_IDENTIFY_REVISION)
56 #define TARGET_WARN_PASS_STRUCT   (target_flags & MASK_WARN_PASS_STRUCT)
57
58 #undef  SUBTARGET_SWITCHES
59 #define SUBTARGET_SWITCHES \
60     { "standard",                        MASK_STANDARD, "Retain standard MXDB information" },          \
61     { "legend",                         -MASK_NOLEGEND, "Retain legend information" },          \
62     { "no-legend",                       MASK_NOLEGEND, "" },          \
63     { "external-legend",                 MASK_EXTERNAL_LEGEND, "Generate external legend information" },   \
64     { "identify-revision",               MASK_IDENTIFY_REVISION, "Emit identifying info in .s file" }, \
65     { "warn-passed-structs",             MASK_WARN_PASS_STRUCT, "Warn when a function arg is a structure" },
66
67 #undef  DWARF_DEBUGGING_INFO
68 #define DWARF_DEBUGGING_INFO
69
70 /*
71   allow -gstabs so that those who have gnu-as installed
72   can debug c++ programs.
73 */
74 #undef  DBX_DEBUGGING_INFO
75 #define DBX_DEBUGGING_INFO
76
77 #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
78
79 /* Override svr[34].h.  */
80 #undef  ASM_FILE_START
81 #define ASM_FILE_START(FILE) \
82   output_file_start (FILE, f_options, sizeof f_options / sizeof f_options[0], \
83                      W_options, sizeof W_options / sizeof W_options[0])
84
85 /* ix86 abi specified type for wchar_t */
86
87 #undef WCHAR_TYPE
88 #define WCHAR_TYPE "long int"
89
90 #undef WCHAR_TYPE_SIZE
91 #define WCHAR_TYPE_SIZE BITS_PER_WORD
92
93
94 /* Some machines may desire to change what optimizations are performed for
95    various optimization levels.   This macro, if defined, is executed once
96    just after the optimization level is determined and before the remainder
97    of the command options have been parsed.  Values set in this macro are
98    used as the default values for the other command line options.
99
100    LEVEL is the optimization level specified; 2 if -O2 is specified,
101    1 if -O is specified, and 0 if neither is specified.  */
102
103 /* This macro used to store 0 in flag_signed_bitfields.
104    Not only is that misuse of this macro; the whole idea is wrong.
105
106    The GNU C dialect makes bitfields signed by default,
107    regardless of machine type.  Making any machine inconsistent in this
108    regard is bad for portability.
109
110    I chose to make bitfields signed by default because this is consistent
111    with the way ordinary variables are handled: `int' equals `signed int'.
112    If there is a good reason to prefer making bitfields unsigned by default,
113    it cannot have anything to do with the choice of machine.
114    If the reason is good enough, we should change the convention for all machines.
115
116    -- rms, 20 July 1991.  */
117
118 /*
119   this really should go into dgux-local.h 
120 */
121
122 #undef  OPTIMIZATION_OPTIONS
123 #define OPTIMIZATION_OPTIONS(LEVEL,SIZE)                \
124   do {                                                  \
125     extern int flag_signed_bitfields;                   \
126     flag_signed_bitfields = 0;                          \
127     optimization_options (LEVEL,SIZE);                  \
128   } while (0)
129
130
131 /* The normal location of the `ld' and `as' programs */
132
133 #undef MD_EXEC_PREFIX
134 #define MD_EXEC_PREFIX "/usr/bin/"
135
136 /* The normal location of the various *crt*.o files is the */
137
138 #undef MD_STARTFILE_PREFIX
139 #define MD_STARTFILE_PREFIX "/usr/lib/"
140
141 /* Macros to be automatically defined.  
142    __CLASSIFY_TYPE__ is used in the <varargs.h> and <stdarg.h> header
143    files with DG/UX revision 5.40 and later.  This allows GNU CC to
144    operate without installing the header files.  */
145
146 #undef  CPP_PREDEFINES
147 #define CPP_PREDEFINES "-Di386 -D__ix86 -Dunix -DDGUX -D__CLASSIFY_TYPE__=2\
148    -Asystem(unix) -Asystem(svr4) -Acpu(i386) -Amachine(i386)"
149
150    /*
151      If not -ansi, -traditional, or restricting include files to one
152      specific source target, specify full DG/UX features.
153    */
154 #undef  CPP_SPEC
155 #define CPP_SPEC "%{!ansi:%{!traditional:-D__OPEN_NAMESPACE__}}"
156
157 /* Assembler support (legends for mxdb).  */
158 #undef  ASM_SPEC
159 #define ASM_SPEC "\
160 %{mno-legend:%{mstandard:-Wc,off}}\
161 %{g:%{!mno-legend:-Wc,-fix-bb,-s\"%i\"\
162 %{traditional:,-lc}%{!traditional:,-lansi-c}\
163 %{mstandard:,-keep-std}\
164 %{mexternal-legend:,-external}}}"
165
166 /* Override svr4.h.  */
167
168 /* hassey 3/12/94 keep svr4 ASM_FINAL_SPEC allows -pipe to work */
169
170 /* Linker and library spec's.
171    -static, -shared, -symbolic, -h* and -z* access AT&T V.4 link options.
172    -svr4 instructs gcc to place /usr/lib/values-X[cat].o on link the line.
173    The absence of -msvr4 indicates linking done in a COFF environment and
174    adds the link script to the link line.  In all environments, the first
175    and last objects are crtbegin.o and crtend.o.
176    When the -G link option is used (-shared and -symbolic) a final link is
177    not being done.  */
178
179 #undef  LIB_SPEC
180 #define LIB_SPEC \
181 "%{!shared:%{!symbolic:-lc}}"
182
183 #undef  LINK_SPEC
184 #define LINK_SPEC "%{z*} %{h*} %{v:-V} \
185                    %{static:-dn -Bstatic} \
186                    %{shared:-G -dy} \
187                    %{symbolic:-Bsymbolic -G -dy} \
188                    %{pg:-L/usr/lib/libp}%{p:-L/usr/lib/libp}"
189
190 #ifdef CROSS_COMPILE
191
192 #undef  STARTFILE_SPEC
193 #define STARTFILE_SPEC "%{!shared:%{!symbolic:%{pg:gcrt1.o%s}           \
194                                               %{!pg:%{p:mcrt1.o%s}      \
195                                               %{!p:crt1.o%s}}}}         \
196                          %{pg:gcrti.o%s}%{!pg:crti.o%s}                 \
197                          crtbegin.o%s                                   \
198                          %{ansi:values-Xc.o%s}                          \
199                          %{!ansi:%{traditional:values-Xt.o%s}           \
200                                  %{!traditional:values-Xa.o%s}}"
201
202 #undef  ENDFILE_SPEC
203 #define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}"
204
205 #else
206
207 #undef  STARTFILE_SPEC
208 #define STARTFILE_SPEC "%{!shared:%{!symbolic:%{pg:gcrt1.o%s}           \
209                                               %{!pg:%{p:/lib/mcrt1.o%s} \
210                                               %{!p:/lib/crt1.o%s}}}     \
211                         %{pg:gcrti.o%s}%{!pg:/lib/crti.o%s}}            \
212                         crtbegin.o%s                                    \
213                         %{ansi:/lib/values-Xc.o%s}                      \
214                         %{!ansi:%{traditional:/lib/values-Xt.o%s}       \
215                                 %{!traditional:/lib/values-Xa.o%s}}"
216
217 #undef  ENDFILE_SPEC
218 #define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:/lib/crtn.o}"
219
220 #endif /* CROSS_COMPILE */
221
222 /* The maximum alignment which the object file format can support.
223    page alignment would seem to be enough */
224 #undef MAX_OFILE_ALIGNMENT
225 #define MAX_OFILE_ALIGNMENT 0x1000
226
227 /* Must use data section for relocatable constants when pic.  */
228 #undef SELECT_RTX_SECTION
229 #define SELECT_RTX_SECTION(MODE,RTX)            \
230 {                                               \
231   if (flag_pic && symbolic_operand (RTX))       \
232     data_section ();                            \
233   else                                          \
234     const_section ();                           \
235 }
236
237 /* This supplements FUNCTION_ARG's definition in i386.h to check
238    TARGET_WARN_PASS_STRUCT */
239
240 #undef  FUNCTION_ARG
241 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
242 ((((MODE) == BLKmode && TARGET_WARN_PASS_STRUCT) ? \
243     warning ("argument is a structure"),0 : 0), \
244     (function_arg (&CUM, MODE, TYPE, NAMED)))
245
246 /* Add .align 1 to avoid .backalign bug in assembler */
247 #undef CONST_SECTION_ASM_OP
248 #define CONST_SECTION_ASM_OP    ".section\t.rodata\n\t.align 1"