X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=gcc%2Fconfig%2Fnetbsd.h;h=3f4245283187f52b2aae7ebe6e201b785ae2ba44;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=227942cd4900f0faa3c5d0dfcee07945ba9e8944;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/netbsd.h b/gcc/config/netbsd.h index 227942cd..3f424528 100644 --- a/gcc/config/netbsd.h +++ b/gcc/config/netbsd.h @@ -1,6 +1,43 @@ +/* Base configuration file for all NetBSD targets. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2007 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +/* TARGET_OS_CPP_BUILTINS() common to all NetBSD targets. */ +#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) + +/* CPP_SPEC parts common to all NetBSD targets. */ +#define NETBSD_CPP_SPEC \ + "%{posix:-D_POSIX_SOURCE} \ + %{pthread:-D_REENTRANT -D_PTHREADS}" + /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD source tree so it can be configured appropriately without using - the GNU configure/build mechanism. */ + the GNU configure/build mechanism. */ #ifdef NETBSD_NATIVE @@ -35,20 +72,39 @@ #endif /* NETBSD_NATIVE */ -/* Provide a CPP_SPEC appropriate for NetBSD. Currently we just deal with - the GCC option `-posix'. */ +/* Provide a LIB_SPEC appropriate for NetBSD. Here we: -#undef CPP_SPEC -#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE}" + 1. Select the appropriate set of libs, depending on whether we're + profiling. + 2. Include the pthread library if -pthread is specified (only + if threads are enabled). -/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate - libc, depending on whether we're doing profiling; if `-posix' is specified, - link against the appropriate libposix first. Don't include libc when - linking a shared library. */ + 3. Include the posix library if -posix is specified. -#undef LIB_SPEC -#define LIB_SPEC \ + FIXME: Could eliminate the duplication here if we were allowed to + use string concatenation. */ + +#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}} \ @@ -60,24 +116,30 @@ %{!pg:-lc}} \ %{p:-lc_p} \ %{pg:-lc_p}}}" +#endif + +#undef LIB_SPEC +#define LIB_SPEC NETBSD_LIB_SPEC /* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude libgcc with -symbolic. */ -#undef LIBGCC_SPEC #ifdef NETBSD_NATIVE -#define LIBGCC_SPEC \ +#define NETBSD_LIBGCC_SPEC \ "%{!symbolic: \ %{!shared: \ %{!p: \ - %{!pg: -lgcc}}} \ + %{!pg: -lgcc}}} \ %{shared: -lgcc_pic} \ %{p: -lgcc_p} \ %{pg: -lgcc_p}}" #else -#define LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}" +#define NETBSD_LIBGCC_SPEC "%{!shared:%{!symbolic: -lgcc}}" #endif +#undef LIBGCC_SPEC +#define LIBGCC_SPEC NETBSD_LIBGCC_SPEC + /* When building shared libraries, the initialization and finalization functions for the library are .init and .fini respectively. */ @@ -93,23 +155,16 @@ fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \ } while (0) -/* Allow #sccs in preprocessor. */ - -#undef SCCS_DIRECTIVE -#define SCCS_DIRECTIVE - -#undef TARGET_HAS_F_SETLKW -#define TARGET_HAS_F_SETLKW - -/* Implicit library calls should use memcpy, not bcopy, etc. */ - -#undef TARGET_MEM_FUNCTIONS -#define TARGET_MEM_FUNCTIONS 1 +#undef TARGET_POSIX_IO +#define TARGET_POSIX_IO /* Handle #pragma weak and #pragma pack. */ -#define HANDLE_SYSV_PRAGMA +#define HANDLE_SYSV_PRAGMA 1 +/* Don't assume anything about the header files. */ +#undef NO_IMPLICIT_EXTERN_C +#define NO_IMPLICIT_EXTERN_C 1 /* Define some types that are the same on all NetBSD platforms, making them agree with . */ @@ -122,3 +177,53 @@ #undef WINT_TYPE #define WINT_TYPE "int" + + +/* Attempt to turn on execute permission for the stack. This may be + used by INITIALIZE_TRAMPOLINE of the target needs it (that is, + if the target machine can change execute permissions on a page). + + There is no way to query the execute permission of the stack, so + we always issue the mprotect() call. + + Note that we go out of our way to use namespace-non-invasive calls + here. Unfortunately, there is no libc-internal name for mprotect(). + + Also note that no errors should be emitted by this code; it is considered + dangerous for library calls to send messages to stdout/stderr. */ + +#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; /* CTL_HW */ \ + mib[1] = 7; /* HW_PAGESIZE */ \ + 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); \ + \ + /* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \ + (void) mprotect (page, end - page, 7); \ +} + +/* Define this so we can compile MS code for use with WINE. */ +#define HANDLE_PRAGMA_PACK_PUSH_POP 1