1 /* Definitions for Rs6000 running LynxOS. 2 Copyright (C) 1995, 1996, 2000, 2002, 2003, 2004, 2005, 2007 3 Free Software Foundation, Inc. 4 Contributed by David Henkel-Wallace, Cygnus Support (gumby@cygnus.com) 5 Rewritten by Adam Nemet, LynuxWorks Inc. 6 7 This file is part of GCC. 8 9 GCC is free software; you can redistribute it and/or modify it 10 under the terms of the GNU General Public License as published 11 by the Free Software Foundation; either version 3, or (at your 12 option) any later version. 13 14 GCC is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with GCC; see the file COPYING3. If not see 21 <http://www.gnu.org/licenses/>. */ 22 23 /* Override the definition in sysv4.h. */ 24 25 #undef TARGET_VERSION 26 #define TARGET_VERSION fputs (" (PowerPC/LynxOS)", stderr); 27 28 /* Undefine the definition to enable the LynxOS default from the 29 top-level lynx.h. */ 30 31 #undef SUBTARGET_EXTRA_SPECS 32 33 /* Get rid off the spec definitions from rs6000/sysv4.h. */ 34 35 #undef CPP_SPEC 36 #define CPP_SPEC \ 37 "%{msoft-float: -D_SOFT_FLOAT} \ 38 %(cpp_cpu) \ 39 %(cpp_os_lynx)" 40 41 /* LynxOS only supports big-endian on PPC so we override the 42 definition from sysv4.h. Since the LynxOS 4.0 compiler was set to 43 return every structure in memory regardless of their size we have 44 to emulate the same behavior here with disabling the SVR4 structure 45 returning. */ 46 47 #undef CC1_SPEC 48 #define CC1_SPEC \ 49 "%{G*} %{mno-sdata:-msdata=none} \ 50 %{maltivec:-mabi=altivec} \ 51 -maix-struct-return" 52 53 #undef ASM_SPEC 54 #define ASM_SPEC \ 55 "%(asm_cpu) \ 56 %{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" 57 58 #undef STARTFILE_SPEC 59 #undef ENDFILE_SPEC 60 #undef LIB_SPEC 61 #undef LINK_SPEC 62 #define LINK_SPEC \ 63 "%{!msdata=none:%{G*}} %{msdata=none:-G0} \ 64 %(link_os_lynx)" 65 66 /* Override the definition from sysv4.h. */ 67 68 #undef TARGET_OS_CPP_BUILTINS 69 #define TARGET_OS_CPP_BUILTINS() \ 70 do \ 71 { \ 72 builtin_define ("__BIG_ENDIAN__"); \ 73 builtin_define ("__powerpc__"); \ 74 builtin_assert ("cpu=powerpc"); \ 75 builtin_assert ("machine=powerpc"); \ 76 builtin_define ("__PPC__"); \ 77 } \ 78 while (0) 79 80 /* Override the rs6000.h definition. */ 81 82 #undef ASM_APP_ON 83 #define ASM_APP_ON "#APP\n" 84 85 /* Override the rs6000.h definition. */ 86 87 #undef ASM_APP_OFF 88 #define ASM_APP_OFF "#NO_APP\n" 89 90 /* LynxOS does not do anything with .fixup plus let's not create 91 writable section for linkonce.r and linkonce.t. */ 92 93 #undef RELOCATABLE_NEEDS_FIXUP 94 95 /* Override these from rs6000.h with the generic definition. */ 96 97 #undef SIZE_TYPE 98 #undef ASM_OUTPUT_ALIGN 99 #undef PREFERRED_DEBUGGING_TYPE 100 101 /* The file rs6000.c defines TARGET_HAVE_TLS unconditionally to the 102 value of HAVE_AS_TLS. HAVE_AS_TLS is true as gas support for TLS 103 is detected by configure. Override the definition to false. */ 104 105 #undef HAVE_AS_TLS 106 #define HAVE_AS_TLS 0 107 108 #ifdef CRT_BEGIN 109 /* This function is part of crtbegin*.o which is at the beginning of 110 the link and is called from .fini which is usually toward the end 111 of the executable. Make it longcall so that we don't limit the 112 text size of the executables to 32M. */ 113 114 static void __do_global_dtors_aux (void) __attribute__ ((longcall)); 115 #endif /* CRT_BEGIN */ 116 117 #ifdef CRT_END 118 /* Similarly here. This function resides in crtend*.o which is toward 119 to end of the link and is called from .init which is at the 120 beginning. */ 121 122 static void __do_global_ctors_aux (void) __attribute__ ((longcall)); 123 #endif /* CRT_END */ 124