1/* Operating system specific defines to be used when targeting GCC for
2   Interix
3   Copyright (C) 1994, 1995, 1999, 2002, 2004 Free Software Foundation, Inc.
4   Donn Terry, Softway Systems, Inc. (donn@softway.com)
5   Modified from code
6      Contributed by Douglas B. Rupp (drupp@cs.washington.edu).
7
8This file is part of GCC.
9
10GCC is free software; you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation; either version 2, or (at your option)
13any later version.
14
15GCC is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with GCC; see the file COPYING.  If not, write to
22the Free Software Foundation, 51 Franklin Street, Fifth Floor,
23Boston, MA 02110-1301, USA.  */
24
25/* POSIX/Uni-thread only for now.  Look at the winnt version
26for windows/multi thread */
27
28/* We need multiple -lc -lcpsx because they mutually refer;
29   that should go away someday */
30
31#undef LIB_SPEC
32#define LIB_SPEC "\
33 %{!shared:%{!dynamic:-lc -lcpsx -lc -lcpsx %$INTERIX_ROOT/usr/lib/psxdll.a \
34 %$INTERIX_ROOT/usr/lib/psxdll2.a \
35 }} \
36 %{!G:%{!dynamic:-lc -lcpsx -lc -lcpsx %$INTERIX_ROOT/usr/lib/psxdll.a \
37 %$INTERIX_ROOT/usr/lib/psxdll2.a \
38 }} \
39 %{dynamic:-lc %$INTERIX_ROOT/usr/lib/psxdll.a \
40 %$INTERIX_ROOT/usr/lib/psxdll2.a \
41 } \
42 %{v}"
43
44#undef LINK_SPEC
45#define LINK_SPEC "%{!shared:-stack 0x400000,0x10000} \
46 		   -subsystem posix \
47		   %{g} \
48		   %{dynamic:-Bdynamic} \
49		   %{static:-Bstatic} \
50		   %{shared:--shared -Bdynamic} \
51		   %{G:--shared -Bdynamic} \
52		   %{symbolic:--shared -Bsymbolic -Bdynamic} \
53		   %{soname*:--soname %*} \
54   		   %{rpath*:--rpath %*} \
55		   "
56
57#undef STARTFILE_SPEC
58#define STARTFILE_SPEC  \
59  "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}}} %{shared:crti%O%s}"
60
61#undef WORD_SWITCH_TAKES_ARG
62#define WORD_SWITCH_TAKES_ARG(STR)					\
63 ((DEFAULT_WORD_SWITCH_TAKES_ARG (STR)					\
64 || !strcmp(STR, "rpath"))						\
65  && strcmp (STR, "Tdata") && strcmp (STR, "Ttext")			\
66  && strcmp (STR, "Tbss"))
67
68
69#define STDC_0_IN_SYSTEM_HEADERS 1
70
71#define HANDLE_SYSV_PRAGMA 1
72#undef HANDLE_PRAGMA_WEAK  /* until the link format can handle it */
73
74/* Names to predefine in the preprocessor for this target machine.  */
75
76#define DBX_DEBUGGING_INFO 1
77#define SDB_DEBUGGING_INFO 1
78#undef PREFERRED_DEBUGGING_TYPE
79#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
80
81
82/* TARGET_DEFAULT from configure */
83
84#undef WCHAR_TYPE
85#undef WCHAR_TYPE_SIZE
86#define WCHAR_TYPE "short unsigned int"
87#define WCHAR_TYPE_SIZE 16
88
89/* Our strategy for finding global constructors is a bit different, although
90   not a lot.  */
91#define DO_GLOBAL_CTORS_BODY						\
92do {									\
93  int i;								\
94  unsigned long nptrs;							\
95  func_ptr *p;								\
96  asm(									\
97       "     .section .ctor_head, \"rw\"\n"				\
98       "1:\n"								\
99       "     .text \n"							\
100       ASM_LOAD_ADDR(1b,%0)						\
101       : "=r" (p) : : "cc");						\
102  for (nptrs = 0; p[nptrs] != 0; nptrs++);				\
103  for (i = nptrs-1; i >= 0; i--)					\
104    p[i] ();								\
105} while (0)
106
107#define DO_GLOBAL_DTORS_BODY						\
108do {									\
109  func_ptr *p;								\
110  asm(									\
111       "     .section .dtor_head, \"rw\"\n"				\
112       "1:\n"								\
113       "     .text \n"							\
114       ASM_LOAD_ADDR(1b,%0)						\
115       : "=r" (p) : : "cc");						\
116  while (*p)								\
117    {									\
118      p++;								\
119      (*(p-1)) ();							\
120    }									\
121} while (0)
122