sco5.h revision 132718
1/* Definitions for Intel 386 running SCO Unix System V 3.2 Version 5. 2 Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003 3 Free Software Foundation, Inc. 4 Contributed by Kean Johnston (jkj@sco.com) 5 6This file is part of GCC. 7 8GCC is free software; you can redistribute it and/or modify 9it under the terms of the GNU General Public License as published by 10the Free Software Foundation; either version 2, or (at your option) 11any later version. 12 13GCC is distributed in the hope that it will be useful, 14but WITHOUT ANY WARRANTY; without even the implied warranty of 15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16GNU General Public License for more details. 17 18You should have received a copy of the GNU General Public License 19along with GCC; see the file COPYING. If not, write to 20the Free Software Foundation, 59 Temple Place - Suite 330, 21Boston, MA 02111-1307, USA. */ 22 23#undef TARGET_VERSION 24#define TARGET_VERSION fprintf (stderr, " (i386, SCO OpenServer 5 Syntax)"); 25 26#undef ASM_QUAD 27 28#undef GLOBAL_ASM_OP 29#define GLOBAL_ASM_OP "\t.globl\t" 30 31#undef BSS_SECTION_ASM_OP 32#define BSS_SECTION_ASM_OP "\t.section\t.bss, \"aw\", @nobits" 33 34/* 35 * NOTE: We really do want CTORS_SECTION_ASM_OP and DTORS_SECTION_ASM_OP. 36 * Here's the reason why. If we dont define them, and we dont define them 37 * to always emit to the same section, the default is to emit to "named" 38 * ctors and dtors sections. This would be great if we could use GNU ld, 39 * but we can't. The native linker could possibly be trained to coalesce 40 * named ctors sections, but that hasn't been done either. So if we don't 41 * define these, many C++ ctors and dtors dont get run, because they never 42 * wind up in the ctors/dtors arrays. 43 */ 44#define CTORS_SECTION_ASM_OP "\t.section\t.ctors, \"aw\"" 45#define DTORS_SECTION_ASM_OP "\t.section\t.dtors, \"aw\"" 46 47#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true 48#undef X86_FILE_START_VERSION_DIRECTIVE 49#define X86_FILE_START_VERSION_DIRECTIVE true 50 51/* A C statement (sans semicolon) to output to the stdio stream 52 FILE the assembler definition of uninitialized global DECL named 53 NAME whose size is SIZE bytes and alignment is ALIGN bytes. 54 Try to use asm_output_aligned_bss to implement this macro. */ 55 56#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ 57 asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) 58 59#undef DBX_REGISTER_NUMBER 60#define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] 61 62#define DWARF2_DEBUGGING_INFO 1 63#define DBX_DEBUGGING_INFO 1 64 65#undef PREFERRED_DEBUGGING_TYPE 66#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 67 68#undef DWARF2_UNWIND_INFO 69#define DWARF2_UNWIND_INFO 1 70 71#undef NO_IMPLICIT_EXTERN_C 72#define NO_IMPLICIT_EXTERN_C 1 73 74#undef SWITCH_TAKES_ARG 75#define SWITCH_TAKES_ARG(CHAR) \ 76 (DEFAULT_SWITCH_TAKES_ARG(CHAR) \ 77 || (CHAR) == 'h' \ 78 || (CHAR) == 'R' \ 79 || (CHAR) == 'Y' \ 80 || (CHAR) == 'z') 81 82#undef WORD_SWITCH_TAKES_ARG 83#define WORD_SWITCH_TAKES_ARG(STR) \ 84 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ 85 && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \ 86 && strcmp (STR, "Tbss")) 87 88#undef TARGET_SUBTARGET_DEFAULT 89#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) 90 91/* 92 * Define sizes and types 93 */ 94#undef SIZE_TYPE 95#undef PTRDIFF_TYPE 96#undef WCHAR_TYPE 97#undef WCHAR_TYPE_SIZE 98#undef WINT_TYPE 99#undef LONG_DOUBLE_TYPE_SIZE 100#define SIZE_TYPE "unsigned int" 101#define PTRDIFF_TYPE "int" 102#define WCHAR_TYPE "long int" 103#define WCHAR_TYPE_SIZE BITS_PER_WORD 104#define WINT_TYPE "long int" 105#define LONG_DOUBLE_TYPE_SIZE 96 106 107/* 108 * New for multilib support. Set the default switches for multilib, 109 * which is -melf. 110 */ 111#define MULTILIB_DEFAULTS { "melf" } 112 113 114/* Please note that these specs may look messy but they are required in 115 order to emulate the SCO Development system as closely as possible. 116 With SCO Open Server 5.0, you now get the linker and assembler free, 117 so that is what these specs are targeted for. These utilities are 118 very argument sensitive: a space in the wrong place breaks everything. 119 So please forgive this mess. It works. 120 121 Parameters which can be passed to gcc, and their SCO equivalents: 122 GCC Parameter SCO Equivalent 123 -ansi -a ansi 124 -posix -a posix 125 -Xpg4 -a xpg4 126 -Xpg4plus -a xpg4plus 127 -Xods30 -a ods30 128 129 As with SCO, the default is XPG4 plus mode. SCO also allows you to 130 specify a C dialect with -Xt, -Xa, -Xc, -Xk and -Xm. These are passed 131 on to the assembler and linker in the same way that the SCO compiler 132 does. 133 134 SCO also allows you to compile, link and generate either ELF or COFF 135 binaries. With gcc, we now only support ELF mode. 136 137 GCC also requires that the user has installed OSS646, the Execution 138 Environment Update, or is running release 5.0.7 or later. This has 139 many fixes to the ELF link editor and assembler, and a considerably 140 improved libc and RTLD. 141 142 In terms of tool usage, we want to use the standard link editor always, 143 and either the GNU assembler or the native assembler. With OSS646 the 144 native assembler has grown up quite a bit. Some of the specs below 145 assume that /usr/gnu is the prefix for the GNU tools, because thats 146 where the SCO provided ones go. This is especially important for 147 include and library search path ordering. We want to look in /usr/gnu 148 first because frequently people are linking against -lintl, and they 149 MEAN to link with gettext. What they get is the SCO intl library. Its 150 a REAL pity that GNU gettext chose that name; perhaps in a future 151 version they can be persuaded to change it to -lgnuintl and have a 152 link so that -lintl will work for other systems. The same goes for 153 header files. We want /usr/gnu/include searched for before the system 154 header files. Hence the -isystem /usr/gnu/include in the CPP_SPEC. 155 We get /usr/gnu/lib first by virtue of the MD_STARTFILE_PREFIX below. 156*/ 157 158#define MD_STARTFILE_PREFIX "/usr/gnu/lib/" 159#define MD_STARTFILE_PREFIX_1 "/usr/ccs/lib/" 160 161#if USE_GAS 162# define MD_EXEC_PREFIX "/usr/gnu/bin/" 163#else 164# define MD_EXEC_PREFIX "/usr/ccs/bin/elf/" 165#endif 166 167/* Always use the system linker, please. */ 168#ifndef DEFAULT_LINKER 169# define DEFAULT_LINKER "/usr/ccs/bin/elf/ld" 170#endif 171 172/* Set up assembler flags for PIC and ELF compilations */ 173#undef ASM_SPEC 174 175#if USE_GAS 176 /* Leave ASM_SPEC undefined so we pick up the master copy from gcc.c */ 177#else 178#define ASM_SPEC \ 179 "%{Ym,*} %{Yd,*} %{Wa,*:%*} \ 180 -E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF %{Qn:} %{!Qy:-Qn}" 181#endif 182 183/* 184 * Use crti.o for shared objects, crt1.o for normal executables. Make sure 185 * to recognize both -G and -shared as a valid way of introducing shared 186 * library generation. This is important for backwards compatibility. 187 */ 188 189#undef STARTFILE_SPEC 190#define STARTFILE_SPEC \ 191 "%{pg:%e-pg not supported on this platform} \ 192 %{p:%{pp:%e-p and -pp specified - pick one}} \ 193 %{!shared:\ 194 %{!symbolic: \ 195 %{!G: \ 196 %{pp:pcrt1elf.o%s}%{p:mcrt1.o%s}%{!p:%{!pp:crt1.o%s}}}}} \ 197 crti.o%s \ 198 %{ansi:values-Xc.o%s} \ 199 %{!ansi: \ 200 %{traditional:values-Xt.o%s} \ 201 %{!traditional: \ 202 %{Xa:values-Xa.o%s} \ 203 %{!Xa:%{Xc:values-Xc.o%s} \ 204 %{!Xc:%{Xk:values-Xk.o%s} \ 205 %{!Xk:%{Xt:values-Xt.o%s} \ 206 %{!Xt:values-Xa.o%s}}}}}} \ 207 crtbegin.o%s" 208 209#undef ENDFILE_SPEC 210#define ENDFILE_SPEC \ 211 "crtend.o%s crtn.o%s" 212 213#define TARGET_OS_CPP_BUILTINS() \ 214 do \ 215 { \ 216 builtin_define ("__unix"); \ 217 builtin_define ("_SCO_DS"); \ 218 builtin_define ("_SCO_DS_LL"); \ 219 builtin_define ("_SCO_ELF"); \ 220 builtin_define ("_M_I386"); \ 221 builtin_define ("_M_XENIX"); \ 222 builtin_define ("_M_UNIX"); \ 223 builtin_assert ("system=svr3"); \ 224 if (flag_iso) \ 225 cpp_define (pfile, "_STRICT_ANSI"); \ 226 if (flag_pic) \ 227 { \ 228 builtin_define ("__PIC__"); \ 229 builtin_define ("__pic__"); \ 230 } \ 231 } \ 232 while (0) 233 234#undef CPP_SPEC 235#define CPP_SPEC "\ 236 -isystem /usr/gnu/include \ 237 %{!Xods30:-D_STRICT_NAMES} \ 238 %{!ansi:%{!posix:%{!Xods30:-D_SCO_XPG_VERS=4}}} \ 239 %{ansi:-isystem include/ansi%s -isystem /usr/include/ansi} \ 240 %{!ansi: \ 241 %{posix:-isystem include/posix%s -isystem /usr/include/posix \ 242 -D_POSIX_C_SOURCE=2 -D_POSIX_SOURCE=1} \ 243 %{!posix:%{Xpg4:-isystem include/xpg4%s -isystem /usr/include/xpg4 \ 244 -D_XOPEN_SOURCE=1} \ 245 %{!Xpg4:-D_M_I86 -D_M_I86SM -D_M_INTERNAT -D_M_SDATA -D_M_STEXT \ 246 -D_M_BITFIELDS -D_M_SYS5 -D_M_SYSV -D_M_SYSIII \ 247 -D_M_WORDSWAP -Dunix -DM_I386 -DM_UNIX -DM_XENIX \ 248 %{Xods30:-isystem include/ods_30_compat%s \ 249 -isystem /usr/include/ods_30_compat \ 250 -D_SCO_ODS_30 -DM_I86 -DM_I86SM -DM_SDATA -DM_STEXT \ 251 -DM_BITFIELDS -DM_SYS5 -DM_SYSV -DM_INTERNAT -DM_SYSIII \ 252 -DM_WORDSWAP}}}} \ 253 %{scointl:-DM_INTERNAT -D_M_INTERNAT} \ 254 %{Xa:-D_SCO_C_DIALECT=1} \ 255 %{!Xa:%{Xc:-D_SCO_C_DIALECT=3} \ 256 %{!Xc:%{Xk:-D_SCO_C_DIALECT=4} \ 257 %{!Xk:%{Xt:-D_SCO_C_DIALECT=2} \ 258 %{!Xt:-D_SCO_C_DIALECT=1}}}}" 259 260#undef LINK_SPEC 261#define LINK_SPEC \ 262 "%{!shared:%{!symbolic:%{!G:-E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF}}} \ 263 %{Wl,*:%*} %{YP,*} %{YL,*} %{YU,*} \ 264 %{!YP,*:%{p:-YP,/usr/ccs/libp:/lib/libp:/usr/lib/libp:/usr/ccs/lib:/lib:/usr/lib} \ 265 %{!p:-YP,/usr/ccs/lib:/lib:/usr/lib}} \ 266 %{h*} %{static:-dn -Bstatic %{G:%e-G and -static are mutually exclusive}} \ 267 %{shared:%{!G:-G}} %{G:%{!shared:-G}} %{shared:%{G:-G}} \ 268 %{shared:-dy %{symbolic:-Bsymbolic -G} %{z*}} %{R*} %{Y*} \ 269 %{Qn:} %{!Qy:-Qn} -z alt_resolve" 270 271/* Library spec. If we are not building a shared library, provide the 272 standard libraries, as per the SCO compiler. */ 273 274#undef LIB_SPEC 275#define LIB_SPEC \ 276 "%{shared:%{!G:pic/libgcc.a%s}} \ 277 %{G:%{!shared:pic/libgcc.a%s}} \ 278 %{shared:%{G:pic/libgcc.a%s}} \ 279 %{p:%{!pp:-lelfprof -lelf}} %{pp:%{!p:-lelfprof -lelf}} \ 280 %{!shared:%{!symbolic:%{!G:-lcrypt -lgen -lc}}}" 281 282#undef LIBGCC_SPEC 283#define LIBGCC_SPEC \ 284 "%{!shared:%{!G:-lgcc}}" 285 286/* Here for legacy support only so we still accept -melf flag */ 287#define MASK_COFF 010000000000 /* Mask for COFF generation */ 288#define TARGET_ELF (1) 289 290#undef SUBTARGET_SWITCHES 291#define SUBTARGET_SWITCHES \ 292 { "elf", -MASK_COFF, N_("Generate ELF output") }, 293 294/* Handle special EH pointer encodings. Absolute, pc-relative, and 295 indirect are handled automatically. */ 296#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ 297 do { \ 298 if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ 299 { \ 300 fputs (ASM_LONG, FILE); \ 301 assemble_name (FILE, XSTR (ADDR, 0)); \ 302 fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ 303 goto DONE; \ 304 } \ 305 } while (0) 306 307/* Used by crtstuff.c to initialize the base of data-relative relocations. 308 These are GOT relative on x86, so return the pic register. */ 309#ifdef __PIC__ 310#define CRT_GET_RFIB_DATA(BASE) \ 311 { \ 312 register void *ebx_ __asm__("ebx"); \ 313 BASE = ebx_; \ 314 } 315#else 316#define CRT_GET_RFIB_DATA(BASE) \ 317 __asm__ ("call\t.LPR%=\n" \ 318 ".LPR%=:\n\t" \ 319 "popl\t%0\n\t" \ 320 /* Due to a GAS bug, this cannot use EAX. That encodes \ 321 smaller than the traditional EBX, which results in the \ 322 offset being off by one. */ \ 323 "addl\t$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0" \ 324 : "=d"(BASE)) 325#endif 326 327