OSDN Git Service

* configure.ac (i[34567]86-*-*): Handle Solaris 2/x86 TLS support
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / sol2.h
index addaf81..70c8a8f 100644 (file)
@@ -96,6 +96,43 @@ along with GCC; see the file COPYING3.  If not see
 #undef TARGET_SUN_TLS
 #define TARGET_SUN_TLS 1
 
+/* Follow Sun requirements for TLS code sequences and use Sun assembler TLS
+   syntax.  */
+#undef TARGET_SUN_TLS
+#define TARGET_SUN_TLS 1
+
+/* The Sun assembler uses .tcomm for TLS common sections.  */
+#define TLS_COMMON_ASM_OP ".tcomm"
+
+/* Similar to the Sun assembler on SPARC, the native assembler requires
+   TLS objects to be declared as @tls_obj (not @tls_object).  Unlike SPARC,
+   gas doesn't understand this variant.  */
+#ifndef USE_GAS
+#undef  ASM_DECLARE_OBJECT_NAME
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)              \
+  do                                                           \
+    {                                                          \
+      HOST_WIDE_INT size;                                      \
+                                                               \
+      if (targetm.have_tls && DECL_THREAD_LOCAL_P (DECL))      \
+       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "tls_obj");      \
+      else                                                     \
+       ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");       \
+                                                               \
+      size_directive_output = 0;                               \
+      if (!flag_inhibit_size_directive                         \
+         && (DECL) && DECL_SIZE (DECL))                        \
+       {                                                       \
+         size_directive_output = 1;                            \
+         size = int_size_in_bytes (TREE_TYPE (DECL));          \
+         ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);         \
+       }                                                       \
+                                                               \
+      ASM_OUTPUT_LABEL (FILE, NAME);                           \
+    }                                                          \
+  while (0)
+#endif
+
 /* The Solaris assembler cannot grok .stabd directives.  */
 #undef NO_DBX_BNSYM_ENSYM
 #define NO_DBX_BNSYM_ENSYM 1