OSDN Git Service

cp/:
[pf3gnuchains/gcc-fork.git] / gcc / config / vxworks.h
index 2d8bfbd..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,9 +17,12 @@ 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
@@ -35,12 +38,11 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 /* 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:-idirafter %:getenv(WIND_USR /h)}}                 \
- %{!mrtp:-D_WRS_KERNEL=1                                               \
-        %{!nostdinc:-idirafter %:getenv(WIND_BASE /target/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.  */
@@ -60,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}                                 \
@@ -79,7 +81,7 @@ 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 ""
 
 /* Do VxWorks-specific parts of OVERRIDE_OPTIONS.  */
@@ -87,9 +89,15 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #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);
@@ -101,4 +109,31 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority);
 #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