Commit abb6c3ee by Olivier Hainque Committed by Olivier Hainque

Introduce an internal API for VxWorks version checks

This changes introduces an internal API for VxWorks version checks
within runtime files, a prerequisite to a few fixes coming up for libstdc++
builds on more recent versions of the OS.

2019-12-30  Olivier Hainque  <hainque@adacore.com>

	gcc/
	* config/vxworks/_vxworks-versions.h: New file.
	* config.gcc (*-*-vxworks*): Add it to extra_headers.

	libgcc/
	* config/gthr-vxworks.h: Use _vxworks-versions.h.
	* config/gthr-vxworks-tls.c: Likewise.

From-SVN: r279783
parent c62f986a
2019-12-30 Olivier Hainque <hainque@adacore.com> 2019-12-30 Olivier Hainque <hainque@adacore.com>
* config/vxworks/_vxworks-versions.h: New file.
* config.gcc (*-*-vxworks*): Add it to extra_headers.
2019-12-30 Olivier Hainque <hainque@adacore.com>
* config/t-vxworks: Rework the vxworks.o compilation * config/t-vxworks: Rework the vxworks.o compilation
rules to use $(COMPILE). rules to use $(COMPILE).
...@@ -961,6 +961,13 @@ case ${target} in ...@@ -961,6 +961,13 @@ case ${target} in
target_has_targetcm="yes" target_has_targetcm="yes"
use_gcc_stdint=provide use_gcc_stdint=provide
tm_file="${tm_file} vxworks-stdint.h" tm_file="${tm_file} vxworks-stdint.h"
# This private header exposes a consistent interface for checks on
# the VxWorks version our runtime header files need to perform, based on
# what the system headers adverstise:
extra_headers="${extra_headers} ../vxworks/_vxworks-versions.h"
case ${enable_threads} in case ${enable_threads} in
no) ;; no) ;;
"" | yes | vxworks) thread_file='vxworks' ;; "" | yes | vxworks) thread_file='vxworks' ;;
......
2019-12-30 Olivier Hainque <hainque@adacore.com> 2019-12-30 Olivier Hainque <hainque@adacore.com>
* config/gthr-vxworks.h: Use _vxworks-versions.h.
* config/gthr-vxworks-tls.c: Likewise.
2019-12-30 Olivier Hainque <hainque@adacore.com>
* config/gthr-vxworks.h (GTHREAD_ONCE_INIT): Use * config/gthr-vxworks.h (GTHREAD_ONCE_INIT): Use
standard zero-initializer syntax. standard zero-initializer syntax.
......
...@@ -45,6 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -45,6 +45,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include <errno.h> #include <errno.h>
#endif #endif
#include <_vxworks-versions.h>
/* Thread-local storage. /* Thread-local storage.
A gthread TLS key is simply an offset in an array, the address of which A gthread TLS key is simply an offset in an array, the address of which
...@@ -91,10 +93,10 @@ static int self_owner; ...@@ -91,10 +93,10 @@ static int self_owner;
it is only removed when unloading this module. */ it is only removed when unloading this module. */
static volatile int delete_hook_installed; static volatile int delete_hook_installed;
/* TLS data access internal API. A straight __thread variable on VxWorks 7, /* TLS data access internal API. A straight __thread variable starting with
a pointer returned by kernel provided routines otherwise. */ VxWorks 7, a pointer returned by kernel provided routines otherwise. */
#ifdef __VXWORKS7__ #if _VXWORKS_MAJOR_GE(7)
static __thread struct tls_data *__gthread_tls_data; static __thread struct tls_data *__gthread_tls_data;
...@@ -118,7 +120,7 @@ extern void __gthread_leave_tls_dtor_context (void); ...@@ -118,7 +120,7 @@ extern void __gthread_leave_tls_dtor_context (void);
#define VX_ENTER_TLS_DTOR() __gthread_enter_tls_dtor_context () #define VX_ENTER_TLS_DTOR() __gthread_enter_tls_dtor_context ()
#define VX_LEAVE_TLS_DTOR() __gthread_leave_tls_dtor_context () #define VX_LEAVE_TLS_DTOR() __gthread_leave_tls_dtor_context ()
#endif /* __VXWORKS7__ */ #endif
/* This is a global structure which records all of the active keys. /* This is a global structure which records all of the active keys.
......
...@@ -35,13 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -35,13 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#else #else
#include <vxWorks.h> #include <vxWorks.h>
#include <version.h> #include <_vxworks-versions.h>
/* Conditional compilation directives are easier to read when they fit on a
single line, which is helped by macros with shorter names. */
#define _VXW_MAJOR _WRS_VXWORKS_MAJOR
#define _VXW_MINOR _WRS_VXWORKS_MINOR
#define _VXW_PRE_69 (_VXW_MAJOR < 6 || (_VXW_MAJOR == 6 && _VXW_MINOR < 9))
/* Some VxWorks headers profusely use typedefs of a pointer to a function with /* Some VxWorks headers profusely use typedefs of a pointer to a function with
undefined number of arguments. */ undefined number of arguments. */
...@@ -62,7 +56,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -62,7 +56,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* RTP, pre 6.9. */ /* RTP, pre 6.9. */
#if defined(__RTP__) && _VXW_PRE_69 #if defined(__RTP__) && _VXWORKS_PRE(6,9)
#define __TAS(x) vxCas ((x), 0, 1) #define __TAS(x) vxCas ((x), 0, 1)
typedef volatile unsigned char __vx_tas_t; typedef volatile unsigned char __vx_tas_t;
...@@ -71,7 +65,7 @@ typedef volatile unsigned char __vx_tas_t; ...@@ -71,7 +65,7 @@ typedef volatile unsigned char __vx_tas_t;
/* RTP, 6.9 and beyond. */ /* RTP, 6.9 and beyond. */
#if defined(__RTP__) && !_VXW_PRE_69 #if defined(__RTP__) && !_VXWORKS_PRE(6,9)
#define __TAS(x) vxAtomicCas ((x), 0, 1) #define __TAS(x) vxAtomicCas ((x), 0, 1)
typedef atomic_t __vx_tas_t; typedef atomic_t __vx_tas_t;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment