+2019-11-06 Pat Bernardi <bernardi@adacore.com>
+ Jerome Lambourg <lambourg@adacore.com>
+ Olivier Hainque <hainque@adacore.com>
+
+ * config.gcc: Add comment to introduce the TARGET_VXWORKS
+ common macro definitions, conveying VXWORKS7 or 64bit general
+ variations. Add a block to set gcc_cv_initfini_array
+ unconditionally to "yes" for VxWorks7.
+ config/vx-common.h (VXWORKS_CC1_SPEC): New macro, empty string
+ by default. Update some comments.
+ config/vxworks.h (VXWORKS_EXTRA_LIBS_RTP): New macro, empty by
+ default, to be added the end of VXWORKS_LIBS_RTP.
+ (VXWORKS_LIBS_RTP): Replace hardcoded part by VXWORKS_BASE_LIBS_RTP
+ and append VXWORKS_EXTRA_LIBS_RTP, both of which specific ports may
+ redefine.
+ (VXWORKS_NET_LIBS_RTP): Account for VxWorks7 specificities.
+ (VXWORKS_CC1_SPEC): Common base definition, with VxWorks7 variation
+ to account for the now available TLS abilities.
+ (TARGET_LIBC_HAS_FUNCTION): Account for VxWorks7 abilities.
+ (VXWORKS_HAVE_TLS): Likewise.
+
2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-slp.c (vect_contains_pattern_stmt_p): New function.
"" | yes | vxworks) thread_file='vxworks' ;;
*) echo 'Unknown thread configuration for VxWorks'; exit 1 ;;
esac
+
+ # A few common macro definitions conveying general characteristics
+ # of the configuration at hand. Note that by VxWorks 7, we mean the
+ # the SR6xx major update or beyond in vendor parlance:
+
case $target in
*-*-vxworks7*)
tm_defines="$tm_defines TARGET_VXWORKS7=1"
tm_defines="$tm_defines TARGET_VXWORKS64=1"
;;
esac
+
+ # Then a few build configuration controls for VxWorks 7, which
+ # has specificities on top of which we aim to provide more complete
+ # C++ support:
+
+ case $target in
+ *-*-vxworks7*)
+ # VxWorks 7 always has init/fini_array support and it is simpler to
+ # just leverage this, sticking to what the system toolchain does:
+ gcc_cv_initfini_array=yes
+ ;;
+ esac
;;
*-*-elf|arc*-*-elf*)
# Assume that newlib is being used and so __cxa_atexit is provided.
#define VXWORKS_LIBGCC_SPEC ""
#define VXWORKS_STARTFILE_SPEC ""
#define VXWORKS_ENDFILE_SPEC ""
+#define VXWORKS_CC1_SPEC ""
/* VxWorks cannot have dots in constructor labels, because it uses a
mutant variation of collect2 that generates C code instead of
#undef DWARF2_UNWIND_INFO
#define DWARF2_UNWIND_INFO 1
-/* VxWorks uses DWARF2. */
+/* VxWorks uses DWARF2 debugging info. */
#define DWARF2_DEBUGGING_INFO 1
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
#define VXWORKS_SYSCALL_LIBS_RTP
+#if TARGET_VXWORKS7
+#define VXWORKS_NET_LIBS_RTP "-lnet"
+#else
#define VXWORKS_NET_LIBS_RTP "-lnet -ldsi"
+#endif
+
+#define VXWORKS_BASE_LIBS_RTP "-lc -lgcc -lc_internal"
+
+#define VXWORKS_EXTRA_LIBS_RTP
#define VXWORKS_LIBS_RTP \
- VXWORKS_SYSCALL_LIBS_RTP " " VXWORKS_NET_LIBS_RTP " -lc -lgcc -lc_internal"
+ VXWORKS_SYSCALL_LIBS_RTP " " VXWORKS_NET_LIBS_RTP " " \
+ VXWORKS_BASE_LIBS_RTP " " VXWORKS_EXTRA_LIBS_RTP
+
+/* TLS configuration. VxWorks 7 now always has proper TLS support.
+ Earlier versions did not, not even for RTPS. */
+#define VXWORKS_HAVE_TLS TARGET_VXWORKS7
/* On Vx6 and previous, the libraries to pick up depends on the architecture,
so cannot be defined for all archs at once. On Vx7, a VSB is always needed
#define VXWORKS_STARTFILE_SPEC "%{mrtp:%{!shared:-l:crt0.o}}"
#define VXWORKS_ENDFILE_SPEC ""
-/* Do VxWorks-specific parts of TARGET_OPTION_OVERRIDE. */
-
-#define VXWORKS_HAVE_TLS (TARGET_VXWORKS7 && TARGET_VXWORKS_RTP)
+#undef VXWORKS_CC1_SPEC
+#if TARGET_VXWORKS7
+#define VXWORKS_CC1_SPEC \
+ "%(cc1_cpu) %{!mrtp:%{!ftls-model=*:-ftls-model=local-exec}}"
+#else
+#define VXWORKS_CC1_SPEC ""
+#endif
+/* Do VxWorks-specific parts of TARGET_OPTION_OVERRIDE. */
#undef VXWORKS_OVERRIDE_OPTIONS
#define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
extern void vxworks_override_options (void);
#undef SIZE_TYPE
#define SIZE_TYPE (TARGET_VXWORKS64 ? "long unsigned int" : "unsigned int")
+/* Assumptions on the target libc. VxWorks 7, post SR600, provides a C11
+ runtime without sincos support. */
#undef TARGET_LIBC_HAS_FUNCTION
-#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
+#define TARGET_LIBC_HAS_FUNCTION \
+ (TARGET_VXWORKS7 ? default_libc_has_function : no_c99_libc_has_function)
/* Both kernels and RTPs have the facilities required by this macro. */
#define TARGET_POSIX_IO