Remove the temporary array for reductions written to memory.
[official-gcc/graphite-test-results.git] / gcc / config / netbsd.h
blobddf6567dc5311d60c07c8cf763904e1c640e5a66
1 /* Base configuration file for all NetBSD targets.
2 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3 2007, 2009, 2010 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC 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 3, or (at your option)
10 any later version.
12 GCC 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.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* TARGET_OS_CPP_BUILTINS() common to all NetBSD targets. */
22 #define NETBSD_OS_CPP_BUILTINS_COMMON() \
23 do \
24 { \
25 builtin_define ("__NetBSD__"); \
26 builtin_define ("__unix__"); \
27 builtin_assert ("system=bsd"); \
28 builtin_assert ("system=unix"); \
29 builtin_assert ("system=NetBSD"); \
30 } \
31 while (0)
33 /* CPP_SPEC parts common to all NetBSD targets. */
34 #define NETBSD_CPP_SPEC \
35 "%{posix:-D_POSIX_SOURCE} \
36 %{pthread:-D_REENTRANT -D_PTHREADS}"
38 /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD
39 source tree so it can be configured appropriately without using
40 the GNU configure/build mechanism. */
42 #ifdef NETBSD_NATIVE
44 /* Look for the include files in the system-defined places. */
46 #undef GPLUSPLUS_INCLUDE_DIR
47 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
49 #undef GCC_INCLUDE_DIR
50 #define GCC_INCLUDE_DIR "/usr/include"
52 #undef INCLUDE_DEFAULTS
53 #define INCLUDE_DEFAULTS \
54 { \
55 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
56 { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
57 { 0, 0, 0, 0 } \
60 /* Under NetBSD, the normal location of the compiler back ends is the
61 /usr/libexec directory. */
63 #undef STANDARD_EXEC_PREFIX
64 #define STANDARD_EXEC_PREFIX "/usr/libexec/"
66 /* Under NetBSD, the normal location of the various *crt*.o files is the
67 /usr/lib directory. */
69 #undef STANDARD_STARTFILE_PREFIX
70 #define STANDARD_STARTFILE_PREFIX "/usr/lib/"
72 #endif /* NETBSD_NATIVE */
75 /* Provide a LIB_SPEC appropriate for NetBSD. Here we:
77 1. Select the appropriate set of libs, depending on whether we're
78 profiling.
80 2. Include the pthread library if -pthread is specified (only
81 if threads are enabled).
83 3. Include the posix library if -posix is specified.
85 FIXME: Could eliminate the duplication here if we were allowed to
86 use string concatenation. */
88 #ifdef NETBSD_ENABLE_PTHREADS
89 #define NETBSD_LIB_SPEC \
90 "%{pthread: \
91 %{!p: \
92 %{!pg:-lpthread}} \
93 %{p:-lpthread_p} \
94 %{pg:-lpthread_p}} \
95 %{posix: \
96 %{!p: \
97 %{!pg:-lposix}} \
98 %{p:-lposix_p} \
99 %{pg:-lposix_p}} \
100 %{!shared: \
101 %{!symbolic: \
102 %{!p: \
103 %{!pg:-lc}} \
104 %{p:-lc_p} \
105 %{pg:-lc_p}}}"
106 #else
107 #define NETBSD_LIB_SPEC \
108 "%{posix: \
109 %{!p: \
110 %{!pg:-lposix}} \
111 %{p:-lposix_p} \
112 %{pg:-lposix_p}} \
113 %{!shared: \
114 %{!symbolic: \
115 %{!p: \
116 %{!pg:-lc}} \
117 %{p:-lc_p} \
118 %{pg:-lc_p}}}"
119 #endif
121 #undef LIB_SPEC
122 #define LIB_SPEC NETBSD_LIB_SPEC
124 /* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude
125 libgcc with -symbolic. */
127 #ifdef NETBSD_NATIVE
128 #define NETBSD_LIBGCC_SPEC \
129 "%{!symbolic: \
130 %{!shared: \
131 %{!p: \
132 %{!pg: -lgcc}}} \
133 %{shared: -lgcc_pic} \
134 %{p: -lgcc_p} \
135 %{pg: -lgcc_p}}"
136 #else
137 #define NETBSD_LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}"
138 #endif
140 #undef LIBGCC_SPEC
141 #define LIBGCC_SPEC NETBSD_LIBGCC_SPEC
143 /* When building shared libraries, the initialization and finalization
144 functions for the library are .init and .fini respectively. */
146 #define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC) \
147 do { \
148 fprintf ((STREAM), "void __init() __asm__ (\".init\");"); \
149 fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC)); \
150 } while (0)
152 #define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC) \
153 do { \
154 fprintf ((STREAM), "void __fini() __asm__ (\".fini\");"); \
155 fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
156 } while (0)
158 #undef TARGET_POSIX_IO
159 #define TARGET_POSIX_IO
161 /* Don't assume anything about the header files. */
162 #undef NO_IMPLICIT_EXTERN_C
163 #define NO_IMPLICIT_EXTERN_C 1
165 /* Define some types that are the same on all NetBSD platforms,
166 making them agree with <machine/ansi.h>. */
168 #undef WCHAR_TYPE
169 #define WCHAR_TYPE "int"
171 #undef WCHAR_TYPE_SIZE
172 #define WCHAR_TYPE_SIZE 32
174 #undef WINT_TYPE
175 #define WINT_TYPE "int"
178 /* Attempt to turn on execute permission for the stack. This may be
179 used by TARGET_TRAMPOLINE_INIT if the target needs it (that is,
180 if the target machine can change execute permissions on a page).
182 There is no way to query the execute permission of the stack, so
183 we always issue the mprotect() call.
185 Note that we go out of our way to use namespace-non-invasive calls
186 here. Unfortunately, there is no libc-internal name for mprotect().
188 Also note that no errors should be emitted by this code; it is considered
189 dangerous for library calls to send messages to stdout/stderr. */
191 #define NETBSD_ENABLE_EXECUTE_STACK \
192 extern void __enable_execute_stack (void *); \
193 void \
194 __enable_execute_stack (void *addr) \
196 extern int mprotect (void *, size_t, int); \
197 extern int __sysctl (int *, unsigned int, void *, size_t *, \
198 void *, size_t); \
200 static int size; \
201 static long mask; \
203 char *page, *end; \
205 if (size == 0) \
207 int mib[2]; \
208 size_t len; \
210 mib[0] = 6; /* CTL_HW */ \
211 mib[1] = 7; /* HW_PAGESIZE */ \
212 len = sizeof (size); \
213 (void) __sysctl (mib, 2, &size, &len, NULL, 0); \
214 mask = ~((long) size - 1); \
217 page = (char *) (((long) addr) & mask); \
218 end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
220 /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \
221 (void) mprotect (page, end - page, 7); \