OSDN Git Service

cp/:
[pf3gnuchains/gcc-fork.git] / gcc / config / vxworks.h
index 70345e2..322260d 100644 (file)
@@ -1,5 +1,5 @@
 /* Common VxWorks target definitions for GNU compiler.
-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
    Free Software Foundation, Inc.
    Contributed by Wind River Systems.
    Rewritten by CodeSourcery, LLC.
@@ -8,7 +8,7 @@ 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 2, or (at your option) any later
+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
@@ -17,27 +17,32 @@ 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 COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Assert that we are targetting VxWorks.  */
+#undef TARGET_VXWORKS
+#define TARGET_VXWORKS 1
 
 /* In kernel mode, VxWorks provides all the libraries itself, as well as
    the functionality of startup files, etc.  In RTP mode, it behaves more
    like a traditional Unix, with more external files.  Most of our specs
    must be aware of the difference.  */
 
-/* The directory containing the VxWorks target headers.  */
-#define VXWORKS_TARGET_DIR  "/home/tornado/base6/target"
+/* We look for the VxWorks header files using the environment
+   variables that are set in VxWorks to indicate the location of the
+   system header files.  We use -idirafter so that the GCC's own
+   header-file directories (containing <stddef.h>, etc.) come before
+   the VxWorks system header directories.  */
 
 /* Since we provide a default -isystem, expand -isystem on the command
    line early.  */
 #undef VXWORKS_ADDITIONAL_CPP_SPEC
-#define VXWORKS_ADDITIONAL_CPP_SPEC "                                  \
- %{!nostdinc:%{isystem*}}                                              \
- %{mrtp: -D__RTP__=1                                                   \
-        %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/usr/h}}            \
- %{!mrtp:-D_WRS_KERNEL=1                                               \
-        %{!nostdinc:-isystem " VXWORKS_TARGET_DIR "/h}}"
+#define VXWORKS_ADDITIONAL_CPP_SPEC            \
+ "%{!nostdinc:                                 \
+    %{isystem*} -idirafter                     \
+    %{mrtp: %:getenv(WIND_USR /h)              \
+      ;:    %:getenv(WIND_BASE /target/h)}}"
 
 /* The references to __init and __fini will be satisfied by
    libc_internal.a.  */
@@ -57,7 +62,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
    %{mrtp:-q %{h*}                                     \
           %{R*} %{!Wl,-T*: %{!T*: %(link_start) }}     \
           %(link_target) %(link_os)}}                  \
- %{v:-V}                                               \
+ %{v:-v}                                               \
  %{shared:-shared}                                     \
  %{Bstatic:-Bstatic}                                   \
  %{Bdynamic:-Bdynamic}                                 \
@@ -76,28 +81,59 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   "-lgcc %{mrtp:--exclude-libs=libc_internal,libgcc -lc_internal}"
 
 #undef VXWORKS_STARTFILE_SPEC
-#define        VXWORKS_STARTFILE_SPEC "%{mrtp:%{!shared:crt0.o%s}}"
+#define        VXWORKS_STARTFILE_SPEC "%{mrtp:%{!shared:-l:crt0.o}}"
 #define VXWORKS_ENDFILE_SPEC ""
 
-/* We can use .ctors/.dtors sections only in RTP mode.
-   Unfortunately this must be an integer constant expression;
-   fix up in override_options.  */
+/* Do VxWorks-specific parts of OVERRIDE_OPTIONS.  */
 #undef VXWORKS_OVERRIDE_OPTIONS
-#define VXWORKS_OVERRIDE_OPTIONS do { \
-  targetm.have_ctors_dtors = TARGET_VXWORKS_RTP; \
-} while (0)
-
-/* The VxWorks runtime uses a clever trick to get the sentinel entry
-   (-1) inserted at the beginning of the .ctors segment.  This trick
-   will not work if we ever generate any entries in plain .ctors
-   sections; we must always use .ctors.PRIORITY.  */
-#define ALWAYS_NUMBER_CTORS_SECTIONS 1
-
-/* The name of the symbol for the table of GOTs in a particular
-   RTP.  */
+#define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
+extern void vxworks_override_options (void);
+
+/* Only RTPs support prioritized constructors and destructors:
+   the implementation relies on numbered .ctors* sections.  */
+#define SUPPORTS_INIT_PRIORITY TARGET_VXWORKS_RTP
+
+/* VxWorks requires special handling of constructors and destructors.
+   All VxWorks configurations must use these functions.  */
+#undef TARGET_ASM_CONSTRUCTOR
+#define TARGET_ASM_CONSTRUCTOR vxworks_asm_out_constructor
+#undef TARGET_ASM_DESTRUCTOR
+#define TARGET_ASM_DESTRUCTOR vxworks_asm_out_destructor
+extern void vxworks_asm_out_constructor (rtx symbol, int priority);
+extern void vxworks_asm_out_destructor (rtx symbol, int priority);
+
+/* Override the vxworks-dummy.h definitions.  TARGET_VXWORKS_RTP
+   is defined by vxworks.opt.  */
+#undef VXWORKS_GOTT_BASE
 #define VXWORKS_GOTT_BASE "__GOTT_BASE__"
-/* The name of the symbol for the index into the table of GOTs for the
-   GOT associated with the current shared library.  */
+#undef VXWORKS_GOTT_INDEX
 #define VXWORKS_GOTT_INDEX "__GOTT_INDEX__"
 
+/* As for svr4.h (which not all VxWorks targets include). */
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+
+/* Both kernels and RTPs have the facilities required by this macro.  */
+#define TARGET_POSIX_IO
+
+/* A VxWorks implementation of TARGET_OS_CPP_BUILTINS.  */
+#define VXWORKS_OS_CPP_BUILTINS()                                      \
+  do                                                                   \
+    {                                                                  \
+      builtin_define ("__vxworks");                                    \
+      builtin_define ("__VXWORKS__");                                  \
+      builtin_assert ("system=unix");                                  \
+      if (TARGET_VXWORKS_RTP)                                          \
+       builtin_define ("__RTP__");                                     \
+      else                                                             \
+       builtin_define ("_WRS_KERNEL");                                 \
+    }                                                                  \
+  while (0)
+
 #define VXWORKS_KIND VXWORKS_KIND_NORMAL
+
+/* The diab linker does not handle .gnu_attribute sections.  */
+#undef HAVE_AS_GNU_ATTRIBUTE