Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/netbsd.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | 77e2b8dfacca |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 /* Base configuration file for all NetBSD targets. |
2 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
3 2007, 2009, 2010 Free Software Foundation, Inc. |
0 | 4 |
5 This file is part of GCC. | |
6 | |
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. | |
11 | |
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. | |
16 | |
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/>. */ | |
20 | |
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) | |
32 | |
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}" | |
37 | |
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. */ | |
41 | |
42 #ifdef NETBSD_NATIVE | |
43 | |
44 /* Look for the include files in the system-defined places. */ | |
45 | |
46 #undef GPLUSPLUS_INCLUDE_DIR | |
47 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++" | |
48 | |
49 #undef GCC_INCLUDE_DIR | |
50 #define GCC_INCLUDE_DIR "/usr/include" | |
51 | |
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 } \ | |
58 } | |
59 | |
60 /* Under NetBSD, the normal location of the compiler back ends is the | |
61 /usr/libexec directory. */ | |
62 | |
63 #undef STANDARD_EXEC_PREFIX | |
64 #define STANDARD_EXEC_PREFIX "/usr/libexec/" | |
65 | |
66 /* Under NetBSD, the normal location of the various *crt*.o files is the | |
67 /usr/lib directory. */ | |
68 | |
69 #undef STANDARD_STARTFILE_PREFIX | |
70 #define STANDARD_STARTFILE_PREFIX "/usr/lib/" | |
71 | |
72 #endif /* NETBSD_NATIVE */ | |
73 | |
74 | |
75 /* Provide a LIB_SPEC appropriate for NetBSD. Here we: | |
76 | |
77 1. Select the appropriate set of libs, depending on whether we're | |
78 profiling. | |
79 | |
80 2. Include the pthread library if -pthread is specified (only | |
81 if threads are enabled). | |
82 | |
83 3. Include the posix library if -posix is specified. | |
84 | |
85 FIXME: Could eliminate the duplication here if we were allowed to | |
86 use string concatenation. */ | |
87 | |
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 | |
120 | |
121 #undef LIB_SPEC | |
122 #define LIB_SPEC NETBSD_LIB_SPEC | |
123 | |
124 /* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude | |
125 libgcc with -symbolic. */ | |
126 | |
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 | |
139 | |
140 #undef LIBGCC_SPEC | |
141 #define LIBGCC_SPEC NETBSD_LIBGCC_SPEC | |
142 | |
143 /* When building shared libraries, the initialization and finalization | |
144 functions for the library are .init and .fini respectively. */ | |
145 | |
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) | |
151 | |
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) | |
157 | |
158 #undef TARGET_POSIX_IO | |
159 #define TARGET_POSIX_IO | |
160 | |
161 /* Don't assume anything about the header files. */ | |
162 #undef NO_IMPLICIT_EXTERN_C | |
163 #define NO_IMPLICIT_EXTERN_C 1 | |
164 | |
165 /* Define some types that are the same on all NetBSD platforms, | |
166 making them agree with <machine/ansi.h>. */ | |
167 | |
168 #undef WCHAR_TYPE | |
169 #define WCHAR_TYPE "int" | |
170 | |
171 #undef WCHAR_TYPE_SIZE | |
172 #define WCHAR_TYPE_SIZE 32 | |
173 | |
174 #undef WINT_TYPE | |
175 #define WINT_TYPE "int" | |
176 | |
177 | |
178 /* Attempt to turn on execute permission for the stack. This may be | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
179 used by TARGET_TRAMPOLINE_INIT if the target needs it (that is, |
0 | 180 if the target machine can change execute permissions on a page). |
181 | |
182 There is no way to query the execute permission of the stack, so | |
183 we always issue the mprotect() call. | |
184 | |
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(). | |
187 | |
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. */ | |
190 | |
191 #define NETBSD_ENABLE_EXECUTE_STACK \ | |
192 extern void __enable_execute_stack (void *); \ | |
193 void \ | |
194 __enable_execute_stack (void *addr) \ | |
195 { \ | |
196 extern int mprotect (void *, size_t, int); \ | |
197 extern int __sysctl (int *, unsigned int, void *, size_t *, \ | |
198 void *, size_t); \ | |
199 \ | |
200 static int size; \ | |
201 static long mask; \ | |
202 \ | |
203 char *page, *end; \ | |
204 \ | |
205 if (size == 0) \ | |
206 { \ | |
207 int mib[2]; \ | |
208 size_t len; \ | |
209 \ | |
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); \ | |
215 } \ | |
216 \ | |
217 page = (char *) (((long) addr) & mask); \ | |
218 end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \ | |
219 \ | |
220 /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \ | |
221 (void) mprotect (page, end - page, 7); \ | |
222 } |