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