aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorRasmus Villemoes <rv@rasmusvillemoes.dk>2020-10-02 12:58:45 +0000
committerOlivier Hainque <hainque@adacore.com>2020-10-16 16:14:52 +0000
commit4cde835fd7add8979ab92fd27ee7efcea235f763 (patch)
tree3321b73008c2fc6ae5dddcdc5bf36d24bf4d10b2 /libgcc
parent2d23fd23bbb84a6ea87cb8c77699261d6ae8100e (diff)
downloadgcc-4cde835fd7add8979ab92fd27ee7efcea235f763.zip
gcc-4cde835fd7add8979ab92fd27ee7efcea235f763.tar.gz
gcc-4cde835fd7add8979ab92fd27ee7efcea235f763.tar.bz2
Stub out VX_ENTER_TLS_DTOR for VxWorks != 6
As of today, the __gthread_enter/leave entry points are only meaningful on VxWorks 6. Refactor the VX_ENTER_TLS_DTOR macros accordingly. 2020-10-15 Rasmus Villemoes <rv@rasmusvillemoes.dk> libgcc/ * config/gthr-vxworks-tls.c (VX_ENTER_TLS_DTOR): Nil except on VxWorks 6. Co-authored-by: Olivier Hainque <hainque@adacore.com>
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/config/gthr-vxworks-tls.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/libgcc/config/gthr-vxworks-tls.c b/libgcc/config/gthr-vxworks-tls.c
index fac25e3..8987e55 100644
--- a/libgcc/config/gthr-vxworks-tls.c
+++ b/libgcc/config/gthr-vxworks-tls.c
@@ -94,7 +94,9 @@ static int self_owner;
static volatile int delete_hook_installed;
/* TLS data access internal API. A straight __thread variable starting with
- VxWorks 7, a pointer returned by kernel provided routines otherwise. */
+ VxWorks 7, a pointer returned by kernel provided routines otherwise. And
+ on VxWorks 6, the kernel expects us to notify entry/exit of regions
+ handling such variables by calls to kernel provided __gthread routines. */
#if _VXWORKS_MAJOR_GE(7)
@@ -103,23 +105,29 @@ static __thread struct tls_data *__gthread_tls_data;
#define VX_GET_TLS_DATA() __gthread_tls_data
#define VX_SET_TLS_DATA(x) __gthread_tls_data = (x)
-#define VX_ENTER_TLS_DTOR()
-#define VX_LEAVE_TLS_DTOR()
-
#else
extern void *__gthread_get_tls_data (void);
extern void __gthread_set_tls_data (void *data);
-extern void __gthread_enter_tls_dtor_context (void);
-extern void __gthread_leave_tls_dtor_context (void);
-
#define VX_GET_TLS_DATA() __gthread_get_tls_data()
#define VX_SET_TLS_DATA(x) __gthread_set_tls_data(x)
+#endif
+
+#ifdef _VXWORKS_MAJOR_EQ(6)
+
+extern void __gthread_enter_tls_dtor_context (void);
+extern void __gthread_leave_tls_dtor_context (void);
+
#define VX_ENTER_TLS_DTOR() __gthread_enter_tls_dtor_context ()
#define VX_LEAVE_TLS_DTOR() __gthread_leave_tls_dtor_context ()
+#else
+
+#define VX_ENTER_TLS_DTOR()
+#define VX_LEAVE_TLS_DTOR()
+
#endif
/* This is a global structure which records all of the active keys.