Common ground work for vxworks7 ports updates
authorPat Bernardi <bernardi@adacore.com>
Thu, 14 Nov 2019 15:45:50 +0000 (15:45 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Thu, 14 Nov 2019 15:45:50 +0000 (15:45 +0000)
2019-11-06  Pat Bernardi  <bernardi@adacore.com>
            Jerome Lambourg  <lambourg@adacore.com>
            Olivier Hainque  <hainque@adacore.com>

gcc/
* config.gcc: Add comment to introduce the TARGET_VXWORKS
commong 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.

Co-Authored-By: Jerome Lambourg <lambourg@adacore.com>
Co-Authored-By: Olivier Hainque <hainque@adacore.com>
From-SVN: r278247

gcc/ChangeLog
gcc/config.gcc
gcc/config/vx-common.h
gcc/config/vxworks.h

index 4bccc164947b34b8833444b0d79e94a9c067b014..0deaff18f214bad96afae23b0186e4348376fc6b 100644 (file)
@@ -1,3 +1,24 @@
+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.
index 72f656408f11802c669c3de953bf3020020ca312..aa9a79c08ded353e8b888bb409e20e3b8e529325 100644 (file)
@@ -962,6 +962,11 @@ case ${target} in
     "" | 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"
@@ -972,6 +977,18 @@ case ${target} in
       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.
index d521bb39e953c768ea777e8976a546d4a2f2e45f..2cbec744ca4cd18e2a5a0dddfadcbb447003c476 100644 (file)
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.  If not see
 #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
@@ -61,7 +62,7 @@ along with GCC; see the file COPYING3.  If not see
 #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
 
index 0f604f1bcc47cbd9e82ee009300a95127c144066..8c93a3067762da72c3a74187d0a54caa671addbb 100644 (file)
@@ -78,10 +78,23 @@ along with GCC; see the file COPYING3.  If not see
 
 #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
@@ -134,10 +147,15 @@ along with GCC; see the file COPYING3.  If not see
 #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);
@@ -179,8 +197,11 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority);
 #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