public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* improve support for vxworks TLS, available for RTPs on VX7
@ 2017-06-27  9:14 Olivier Hainque
  0 siblings, 0 replies; only message in thread
From: Olivier Hainque @ 2017-06-27  9:14 UTC (permalink / raw)
  To: GCC Patches
  Cc: Olivier Hainque, Douglas B Rupp, Jerome Lambourg, Nathan Sidwell

[-- Attachment #1: Type: text/plain, Size: 799 bytes --]

Hello,

VxWorks 7 features TLS support for RTPs. This patch adjusts the VxWorks
configuration to leverage this.

I checked that a toolchain+libgcc build passes on mainline and this is passing
ACATS on a gcc-7 based development port in-house.

With Kind Regards,

Olivier

2017-06-27  Jerome Lambourg  <lambourg@adacore.com>
            Olivier Hainque  <hainque@adacore.com>

 	* config/vxworks.h (VXWORKS_LIB_SPEC): Incorporate ...
	(TLS_SYM): New local macro, forcing reference to __tls__ on
	link command lines for VxWorks 7 RTPs, triggering initialization
	of tlsLib.
	(VXWORKS_HAVE_TLS): New macro. State whether the target VxWorks
	OS features TLS support, true for RTPs on VxWorks 7.
    	* config/vxworks.c (vxworks_override_options): Setup emutls
    	accordingly.


[-- Attachment #2: 0004-improve-support-for-vxworks-TLS-available-for-RTPs-o.patch --]
[-- Type: application/octet-stream, Size: 2934 bytes --]

--- a/gcc/config/vxworks.c
+++ b/gcc/config/vxworks.c
@@ -125,20 +125,24 @@ vxworks_emutls_var_init (tree var, tree decl, tree tmpl_addr)
 void
 vxworks_override_options (void)
 {
-  /* We don't support __thread via target hooks.  */
-  targetm.have_tls = false;
-
-  targetm.emutls.get_address = "__builtin___tls_lookup";
-  targetm.emutls.register_common = NULL;
-  targetm.emutls.var_section = ".tls_vars";
-  targetm.emutls.tmpl_section = ".tls_data";
-  targetm.emutls.var_prefix = "__tls__";
-  targetm.emutls.tmpl_prefix = "";
-  targetm.emutls.var_fields = vxworks_emutls_var_fields;
-  targetm.emutls.var_init = vxworks_emutls_var_init;
-  targetm.emutls.var_align_fixed = true;
-  targetm.emutls.debug_form_tls_address = true;
-  
+  /* Setup the tls emulation bits if the OS misses proper
+     tls support.  */
+  targetm.have_tls = VXWORKS_HAVE_TLS;
+
+  if (!VXWORKS_HAVE_TLS)
+    {
+      targetm.emutls.get_address = "__builtin___tls_lookup";
+      targetm.emutls.register_common = NULL;
+      targetm.emutls.var_section = ".tls_vars";
+      targetm.emutls.tmpl_section = ".tls_data";
+      targetm.emutls.var_prefix = "__tls__";
+      targetm.emutls.tmpl_prefix = "";
+      targetm.emutls.var_fields = vxworks_emutls_var_fields;
+      targetm.emutls.var_init = vxworks_emutls_var_init;
+      targetm.emutls.var_align_fixed = true;
+      targetm.emutls.debug_form_tls_address = true;
+    }
+
   /* We can use .ctors/.dtors sections only in RTP mode.  */
   targetm.have_ctors_dtors = TARGET_VXWORKS_RTP;
 
diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h
index 9afd332..e78ea28 100644
--- a/gcc/config/vxworks.h
+++ b/gcc/config/vxworks.h
@@ -81,16 +81,22 @@ along with GCC; see the file COPYING3.  If not see
    and its structure is fixed and does not depend on the arch.  We can thus
    tell gcc where to look for when linking with RTP libraries.  */
 
+/* On Vx7 RTP, we need to drag the __tls__ symbol to trigger initialization of
+   tlsLib, responsible for TLS support by the OS.  */
+
 #if TARGET_VXWORKS7
 #define VXWORKS_LIBS_DIR_RTP "-L%:getenv(VSB_DIR /usr/lib/common)"
+#define TLS_SYM "-u __tls__"
 #else
 #define VXWORKS_LIBS_DIR_RTP ""
+#define TLS_SYM ""
 #endif
 
 #undef VXWORKS_LIB_SPEC
 #define	VXWORKS_LIB_SPEC						\
 "%{mrtp:%{shared:-u " USER_LABEL_PREFIX "__init -u " USER_LABEL_PREFIX "__fini} \
 	%{!shared:%{non-static:-u " USER_LABEL_PREFIX "_STI__6__rtld -ldl} \
+		  " TLS_SYM " \
 		  --start-group " VXWORKS_LIBS_RTP " --end-group} \
         " VXWORKS_LIBS_DIR_RTP "}"
 
@@ -126,6 +132,9 @@ along with GCC; see the file COPYING3.  If not see
 #define VXWORKS_ENDFILE_SPEC ""
 
 /* Do VxWorks-specific parts of TARGET_OPTION_OVERRIDE.  */
+
+#define VXWORKS_HAVE_TLS (TARGET_VXWORKS7 && TARGET_VXWORKS_RTP)
+
 #undef VXWORKS_OVERRIDE_OPTIONS
 #define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
 extern void vxworks_override_options (void);
-- 
1.7.10.4


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-06-27  9:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-27  9:14 improve support for vxworks TLS, available for RTPs on VX7 Olivier Hainque

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).