/* 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.
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
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. */
%{mrtp:-q %{h*} \
%{R*} %{!Wl,-T*: %{!T*: %(link_start) }} \
%(link_target) %(link_os)}} \
- %{v:-V} \
+ %{v:-v} \
%{shared:-shared} \
%{Bstatic:-Bstatic} \
%{Bdynamic:-Bdynamic} \
"-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