#define NETBSD_OS_CPP_BUILTINS_COMMON() \
do \
{ \
builtin_define ("__NetBSD__"); \
builtin_define ("__unix__"); \
builtin_assert ("system=bsd"); \
builtin_assert ("system=unix"); \
builtin_assert ("system=NetBSD"); \
} \
while (0)
#define NETBSD_CPP_SPEC \
"%{posix:-D_POSIX_SOURCE} \
%{pthread:-D_REENTRANT -D_PTHREADS}"
#ifdef NETBSD_NATIVE
#undef GPLUSPLUS_INCLUDE_DIR
#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
#undef GCC_INCLUDE_DIR
#define GCC_INCLUDE_DIR "/usr/include"
#undef INCLUDE_DEFAULTS
#define INCLUDE_DEFAULTS \
{ \
{ GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
{ GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
{ 0, 0, 0, 0 } \
}
#undef STANDARD_EXEC_PREFIX
#define STANDARD_EXEC_PREFIX "/usr/libexec/"
#undef STANDARD_STARTFILE_PREFIX
#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
#endif
#ifdef NETBSD_ENABLE_PTHREADS
#define NETBSD_LIB_SPEC \
"%{pthread: \
%{!p: \
%{!pg:-lpthread}} \
%{p:-lpthread_p} \
%{pg:-lpthread_p}} \
%{posix: \
%{!p: \
%{!pg:-lposix}} \
%{p:-lposix_p} \
%{pg:-lposix_p}} \
%{!shared: \
%{!symbolic: \
%{!p: \
%{!pg:-lc}} \
%{p:-lc_p} \
%{pg:-lc_p}}}"
#else
#define NETBSD_LIB_SPEC \
"%{posix: \
%{!p: \
%{!pg:-lposix}} \
%{p:-lposix_p} \
%{pg:-lposix_p}} \
%{!shared: \
%{!symbolic: \
%{!p: \
%{!pg:-lc}} \
%{p:-lc_p} \
%{pg:-lc_p}}}"
#endif
#undef LIB_SPEC
#define LIB_SPEC NETBSD_LIB_SPEC
#ifdef NETBSD_NATIVE
#define NETBSD_LIBGCC_SPEC \
"%{!symbolic: \
%{!shared: \
%{!p: \
%{!pg: -lgcc}}} \
%{shared: -lgcc_pic} \
%{p: -lgcc_p} \
%{pg: -lgcc_p}}"
#else
#define NETBSD_LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}"
#endif
#undef LIBGCC_SPEC
#define LIBGCC_SPEC NETBSD_LIBGCC_SPEC
#define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC) \
do { \
fprintf ((STREAM), "void __init() __asm__ (\".init\");"); \
fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC)); \
} while (0)
#define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC) \
do { \
fprintf ((STREAM), "void __fini() __asm__ (\".fini\");"); \
fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
} while (0)
#undef TARGET_POSIX_IO
#define TARGET_POSIX_IO
#define HANDLE_SYSV_PRAGMA 1
#undef NO_IMPLICIT_EXTERN_C
#define NO_IMPLICIT_EXTERN_C 1
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
#undef WINT_TYPE
#define WINT_TYPE "int"
#define NETBSD_ENABLE_EXECUTE_STACK \
extern void __enable_execute_stack (void *); \
void \
__enable_execute_stack (void *addr) \
{ \
extern int mprotect (void *, size_t, int); \
extern int __sysctl (int *, unsigned int, void *, size_t *, \
void *, size_t); \
\
static int size; \
static long mask; \
\
char *page, *end; \
\
if (size == 0) \
{ \
int mib[2]; \
size_t len; \
\
mib[0] = 6; \
mib[1] = 7; \
len = sizeof (size); \
(void) __sysctl (mib, 2, &size, &len, NULL, 0); \
mask = ~((long) size - 1); \
} \
\
page = (char *) (((long) addr) & mask); \
end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
\
\
(void) mprotect (page, end - page, 7); \
}