OSDN Git Service

* configure.ac (i[34567]86-*-*): Handle Solaris 2/x86 TLS support
authorro@138bc75d-0d04-0410-961f-82ee72b054a4 <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 24 Mar 2010 18:49:49 +0000 (18:49 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:14:33 +0000 (14:14 +0900)
and Sun as TLS syntax.
(TLS_SECTION_ASM_FLAG) [on_solaris && !gas_flag]: Define.
* configure: Regenerate.
* config.in: Regenerate.
* varasm.c (TLS_SECTION_ASM_FLAG): Define default.
(default_elf_asm_named_section): Use it.
* config/i386/i386.c (output_pic_addr_const): Lowercase @DTPOFF.
(i386_output_dwarf_dtprel): Likewise.
(output_addr_const_extra): Likewise.
(output_pic_addr_const): Lowercase @GOTTPOFF.
(output_addr_const_extra): Likewise.
(output_pic_addr_const): Lowercase @GOTNTPOFF.
(output_addr_const_extra): Likewise.
(output_pic_addr_const): Lowercase @INDNTPOFF.
(output_addr_const_extra): Likewise.
(output_pic_addr_const): Lowercase @NTPOFF.
(output_addr_const_extra): Likewise.
(output_pic_addr_const): Lowercase @TPOFF.
(output_addr_const_extra): Likewise.
* config/i386/i386.md (*tls_global_dynamic_32_gnu): Lowercase
@TLSGD.
(*tls_global_dynamic_64): Likewise.
(*tls_local_dynamic_base_32_gnu): Lowercase @TLSLDM.
(*tls_local_dynamic_base_64): Lowercase @TLSLD.

* defaults.h (TLS_COMMON_ASM_OP): Provide default.
(ASM_OUTPUT_TLS_COMMON): Use it.
* config/i386/sol2-gas.h (TLS_COMMON_ASM_OP): Undef.

PR target/38118
* config.gcc (sparc*-*-solaris2*) [$gas=yes]: Add usegas.h to
tm_file.
* config/sparc/sol2.h (ASM_OUTPUT_ALIGNED_COMMON): Move ...
* config/sol2.h (ASM_OUTPUT_ALIGNED_COMMON): ... here.
* config/i386/sol2-10.h (ASM_OUTPUT_ALIGNED_COMMON): Redefine.
* config/i386/sol2.h (TARGET_SUN_TLS): Redefine.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157705 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/sol2.h
gcc/config/sol2.h
gcc/configure
gcc/configure.ac

index 52f45af..63dd2b3 100644 (file)
@@ -1,5 +1,46 @@
 2010-03-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
+       * configure.ac (i[34567]86-*-*): Handle Solaris 2/x86 TLS support
+       and Sun as TLS syntax.
+       (TLS_SECTION_ASM_FLAG) [on_solaris && !gas_flag]: Define.
+       * configure: Regenerate.
+       * config.in: Regenerate.
+       * varasm.c (TLS_SECTION_ASM_FLAG): Define default.
+       (default_elf_asm_named_section): Use it.
+       * config/i386/i386.c (output_pic_addr_const): Lowercase @DTPOFF.
+       (i386_output_dwarf_dtprel): Likewise.
+       (output_addr_const_extra): Likewise.
+       (output_pic_addr_const): Lowercase @GOTTPOFF.
+       (output_addr_const_extra): Likewise.
+       (output_pic_addr_const): Lowercase @GOTNTPOFF.
+       (output_addr_const_extra): Likewise.
+       (output_pic_addr_const): Lowercase @INDNTPOFF.
+       (output_addr_const_extra): Likewise.
+       (output_pic_addr_const): Lowercase @NTPOFF.
+       (output_addr_const_extra): Likewise.
+       (output_pic_addr_const): Lowercase @TPOFF.
+       (output_addr_const_extra): Likewise.
+       * config/i386/i386.md (*tls_global_dynamic_32_gnu): Lowercase
+       @TLSGD.
+       (*tls_global_dynamic_64): Likewise.
+       (*tls_local_dynamic_base_32_gnu): Lowercase @TLSLDM.
+       (*tls_local_dynamic_base_64): Lowercase @TLSLD.
+
+       * defaults.h (TLS_COMMON_ASM_OP): Provide default.
+       (ASM_OUTPUT_TLS_COMMON): Use it.
+       * config/i386/sol2-gas.h (TLS_COMMON_ASM_OP): Undef.
+
+       PR target/38118
+       * config.gcc (sparc*-*-solaris2*) [$gas=yes]: Add usegas.h to
+       tm_file.
+       * config/sparc/sol2.h (ASM_OUTPUT_ALIGNED_COMMON): Move ...
+       * config/sol2.h (ASM_OUTPUT_ALIGNED_COMMON): ... here.
+       * config/i386/sol2-10.h (ASM_OUTPUT_ALIGNED_COMMON): Redefine.
+       * config/i386/sol2.h (TARGET_SUN_TLS): Redefine.
+       (ASM_DECLARE_OBJECT_NAME) [!USE_GAS]: Redefine.
+
+2010-03-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
        * config/i386/i386.c (override_options): Don't accept
        -mtls-dialect=sun any longer.
        * config/i386/i386.h (TARGET_SUN_TLS): Define as 0.
index f639770..777fc2c 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
index 98e54e6..e95686e 100644 (file)
@@ -292,11 +292,6 @@ __enable_execute_stack (void *addr)                                        \
     }                                                                  \
   while (0)
 
-#ifndef USE_GAS
-#undef TARGET_ASM_ASSEMBLE_VISIBILITY
-#define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility
-#endif
-
 extern GTY(()) tree solaris_pending_aligns;
 extern GTY(()) tree solaris_pending_inits;
 extern GTY(()) tree solaris_pending_finis;
index 2384f42..f57917e 100755 (executable)
@@ -22081,7 +22081,7 @@ foo:    .long   25
        ;;
   i[34567]86-*-*)
     case "$target" in
-      i[34567]86-*-solaris2.[89]*)
+      i[34567]86-*-solaris2.[56789]*)
        # TLS was introduced in the Solaris 9 4/04 release but
        # we do not enable it by default on Solaris 9 either.
        if test "x$enable_tls" = xyes ; then
index 743798e..74dd9a3 100644 (file)
@@ -2659,7 +2659,7 @@ foo:      .long   25
        ;;
   i[34567]86-*-*)
     case "$target" in
-      i[34567]86-*-solaris2.[89]*)
+      i[34567]86-*-solaris2.[56789]*)
        # TLS was introduced in the Solaris 9 4/04 release but
        # we do not enable it by default on Solaris 9 either.
        if test "x$enable_tls" = xyes ; then