]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/38118 (gcc emits non-TLS data as TLS on Solaris 11/SPARC)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Wed, 24 Mar 2010 18:49:49 +0000 (18:49 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Wed, 24 Mar 2010 18:49:49 +0000 (18:49 +0000)
* 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.

From-SVN: r157705

14 files changed:
gcc/ChangeLog
gcc/config.gcc
gcc/config.in
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/config/i386/sol2-10.h
gcc/config/i386/sol2-gas.h
gcc/config/i386/sol2.h
gcc/config/sol2.h
gcc/config/sparc/sol2.h
gcc/configure
gcc/configure.ac
gcc/defaults.h
gcc/varasm.c

index 1bbb9d8f9d86821f2c1957cde998f58e1f5271e8..bff16dc5d19d451faac7a15c3d01889666dfb6b3 100644 (file)
@@ -1,3 +1,44 @@
+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
index 21782065cec8b8fa6e2f87f4dbeb5d4a0d23c354..d4e733c29c597d67954584879d9611b66d6f3365 100644 (file)
@@ -2412,6 +2412,9 @@ sparc*-*-solaris2*)
        else
                tmake_file="$tmake_file t-slibgcc-sld"
        fi
+       if test x$gas = xyes; then
+               tm_file="usegas.h ${tm_file}"
+       fi
        c_target_objs="sol2-c.o"
        cxx_target_objs="sol2-c.o"
        extra_objs="sol2.o"
index 98dffa73b2c8f9b951511659ec79778293a22703..a9e208fa4eb8c68ceb91eee5ba9c5b3e33e02dca 100644 (file)
 #endif
 
 
+/* Define to the flag used to mark TLS sections if the default (`T') doesn't
+   work. */
+#ifndef USED_FOR_TARGET
+#undef TLS_SECTION_ASM_FLAG
+#endif
+
+
 /* Define if your assembler mis-optimizes .eh_frame data. */
 #ifndef USED_FOR_TARGET
 #undef USE_AS_TRADITIONAL_FORMAT
index 2179b5a1fb0f540fbd3bb0059a14591065a520f3..a6ffc1921fc660f94c9c0f5f9d7cbdbf0f7eb273 100644 (file)
@@ -10863,29 +10863,29 @@ output_pic_addr_const (FILE *file, rtx x, int code)
          break;
        case UNSPEC_GOTTPOFF:
          /* FIXME: This might be @TPOFF in Sun ld too.  */
-         fputs ("@GOTTPOFF", file);
+         fputs ("@gottpoff", file);
          break;
        case UNSPEC_TPOFF:
-         fputs ("@TPOFF", file);
+         fputs ("@tpoff", file);
          break;
        case UNSPEC_NTPOFF:
          if (TARGET_64BIT)
-           fputs ("@TPOFF", file);
+           fputs ("@tpoff", file);
          else
-           fputs ("@NTPOFF", file);
+           fputs ("@ntpoff", file);
          break;
        case UNSPEC_DTPOFF:
-         fputs ("@DTPOFF", file);
+         fputs ("@dtpoff", file);
          break;
        case UNSPEC_GOTNTPOFF:
          if (TARGET_64BIT)
            fputs (ASSEMBLER_DIALECT == ASM_ATT ?
-                  "@GOTTPOFF(%rip)": "@GOTTPOFF[rip]", file);
+                  "@gottpoff(%rip)": "@gottpoff[rip]", file);
          else
-           fputs ("@GOTNTPOFF", file);
+           fputs ("@gotntpoff", file);
          break;
        case UNSPEC_INDNTPOFF:
-         fputs ("@INDNTPOFF", file);
+         fputs ("@indntpoff", file);
          break;
 #if TARGET_MACHO
        case UNSPEC_MACHOPIC_OFFSET:
@@ -10912,7 +10912,7 @@ i386_output_dwarf_dtprel (FILE *file, int size, rtx x)
 {
   fputs (ASM_LONG, file);
   output_addr_const (file, x);
-  fputs ("@DTPOFF", file);
+  fputs ("@dtpoff", file);
   switch (size)
     {
     case 4:
@@ -12189,34 +12189,34 @@ output_addr_const_extra (FILE *file, rtx x)
     case UNSPEC_GOTTPOFF:
       output_addr_const (file, op);
       /* FIXME: This might be @TPOFF in Sun ld.  */
-      fputs ("@GOTTPOFF", file);
+      fputs ("@gottpoff", file);
       break;
     case UNSPEC_TPOFF:
       output_addr_const (file, op);
-      fputs ("@TPOFF", file);
+      fputs ("@tpoff", file);
       break;
     case UNSPEC_NTPOFF:
       output_addr_const (file, op);
       if (TARGET_64BIT)
-       fputs ("@TPOFF", file);
+       fputs ("@tpoff", file);
       else
-       fputs ("@NTPOFF", file);
+       fputs ("@ntpoff", file);
       break;
     case UNSPEC_DTPOFF:
       output_addr_const (file, op);
-      fputs ("@DTPOFF", file);
+      fputs ("@dtpoff", file);
       break;
     case UNSPEC_GOTNTPOFF:
       output_addr_const (file, op);
       if (TARGET_64BIT)
        fputs (ASSEMBLER_DIALECT == ASM_ATT ?
-              "@GOTTPOFF(%rip)" : "@GOTTPOFF[rip]", file);
+              "@gottpoff(%rip)" : "@gottpoff[rip]", file);
       else
-       fputs ("@GOTNTPOFF", file);
+       fputs ("@gotntpoff", file);
       break;
     case UNSPEC_INDNTPOFF:
       output_addr_const (file, op);
-      fputs ("@INDNTPOFF", file);
+      fputs ("@indntpoff", file);
       break;
 #if TARGET_MACHO
     case UNSPEC_MACHOPIC_OFFSET:
index da28f1cc840ba4c25c858d31a5d8cec409a7f7f3..9adf0a67cb941b26589ed11378d890234f42b75c 100644 (file)
    (clobber (match_scratch:SI 5 "=c"))
    (clobber (reg:CC FLAGS_REG))]
   "!TARGET_64BIT && TARGET_GNU_TLS"
-  "lea{l}\t{%a2@TLSGD(,%1,1), %0|%0, %a2@TLSGD[%1*1]}\;call\t%P3"
+  "lea{l}\t{%a2@tlsgd(,%1,1), %0|%0, %a2@tlsgd[%1*1]}\;call\t%P3"
   [(set_attr "type" "multi")
    (set_attr "length" "12")])
 
    (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")]
              UNSPEC_TLS_GD)]
   "TARGET_64BIT"
-  { return ASM_BYTE "0x66\n\tlea{q}\t{%a1@TLSGD(%%rip), %%rdi|rdi, %a1@TLSGD[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; }
+  { return ASM_BYTE "0x66\n\tlea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; }
   [(set_attr "type" "multi")
    (set_attr "length" "16")])
 
    (clobber (match_scratch:SI 4 "=c"))
    (clobber (reg:CC FLAGS_REG))]
   "!TARGET_64BIT && TARGET_GNU_TLS"
-  "lea{l}\t{%&@TLSLDM(%1), %0|%0, %&@TLSLDM[%1]}\;call\t%P2"
+  "lea{l}\t{%&@tlsldm(%1), %0|%0, %&@tlsldm[%1]}\;call\t%P2"
   [(set_attr "type" "multi")
    (set_attr "length" "11")])
 
                 (match_operand:DI 2 "" "")))
    (unspec:DI [(const_int 0)] UNSPEC_TLS_LD_BASE)]
   "TARGET_64BIT"
-  "lea{q}\t{%&@TLSLD(%%rip), %%rdi|rdi, %&@TLSLD[rip]}\;call\t%P1"
+  "lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}\;call\t%P1"
   [(set_attr "type" "multi")
    (set_attr "length" "12")])
 
index 6e7f13d8f2681ec7d0a5583d7f71ed4eb5f89f12..a15ada326a5e5e588c9496faa9dc9de11c6cb4e5 100644 (file)
@@ -50,6 +50,21 @@ along with GCC; see the file COPYING3.  If not see
   } while (0)
 #endif
 
+/* As in sol2.h, override the default from i386/x86-64.h to work around
+   Sun as TLS bug.  */
+#undef  ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
+  do                                                                   \
+    {                                                                  \
+      if (TARGET_SUN_TLS                                               \
+         && in_section                                                 \
+         && ((in_section->common.flags & (SECTION_TLS | SECTION_BSS))  \
+             == (SECTION_TLS | SECTION_BSS)))                          \
+       switch_to_section (bss_section);                                \
+      x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN);                        \
+    }                                                                  \
+  while  (0)
+
 #undef NO_PROFILE_COUNTERS
 
 #undef MCOUNT_NAME
index c3573966ac82f74cce7a79228ff1aa157ed17a97..8d15b9d119d793e28b2e909685c84340f7dd3ba6 100644 (file)
@@ -26,3 +26,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 /* Undefine this so that BNSYM/ENSYM pairs are emitted by STABS+.  */
 #undef NO_DBX_BNSYM_ENSYM
+
+/* Restore default; gas doesn't understand Sun as .tcomm.  */
+#undef TLS_COMMON_ASM_OP
index addaf81df36a85bf124ac9983aa6d758168f8873..70c8a8f6744300e953f86f30cafbee8d716f8e47 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 a65276c059982eb86b4f5d72da4323e2dff8bb27..a20c3b983f69d011e05d19dd9339a7512baa10ef 100644 (file)
@@ -1,6 +1,7 @@
 /* Operating system specific defines to be used when targeting GCC for any
    Solaris 2 system.
-   Copyright 2002, 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2004, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -265,6 +266,24 @@ __enable_execute_stack (void *addr)                                        \
     }                                                          \
   while (0)
 
+/* Solaris 'as' has a bug: a .common directive in .tbss section
+   behaves as .tls_common rather than normal non-TLS .common.  */
+#undef  ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
+  do                                                                   \
+    {                                                                  \
+      if (TARGET_SUN_TLS                                               \
+         && in_section                                                 \
+         && ((in_section->common.flags & (SECTION_TLS | SECTION_BSS))  \
+             == (SECTION_TLS | SECTION_BSS)))                          \
+       switch_to_section (bss_section);                                \
+      fprintf ((FILE), "%s", COMMON_ASM_OP);                           \
+      assemble_name ((FILE), (NAME));                                  \
+      fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n",         \
+              (SIZE), (ALIGN) / BITS_PER_UNIT);                        \
+    }                                                                  \
+  while (0)
+
 extern GTY(()) tree solaris_pending_aligns;
 extern GTY(()) tree solaris_pending_inits;
 extern GTY(()) tree solaris_pending_finis;
index 21882ae206a56035fd6a14742f238ad915b6f07f..294f9874b01eda5abc284eb4ef9555859d3fcf66 100644 (file)
@@ -177,24 +177,6 @@ along with GCC; see the file COPYING3.  If not see
     }                                                          \
   while (0)
 
-/* Solaris 'as' has a bug: a .common directive in .tbss section
-   behaves as .tls_common rather than normal non-TLS .common.  */
-#undef  ASM_OUTPUT_ALIGNED_COMMON
-#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
-  do                                                                   \
-    {                                                                  \
-      if (TARGET_SUN_TLS                                               \
-         && in_section                                                 \
-         && ((in_section->common.flags & (SECTION_TLS | SECTION_BSS))  \
-             == (SECTION_TLS | SECTION_BSS)))                          \
-       switch_to_section (bss_section);                                \
-      fprintf ((FILE), "%s", COMMON_ASM_OP);                           \
-      assemble_name ((FILE), (NAME));                                  \
-      fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n",         \
-              (SIZE), (ALIGN) / BITS_PER_UNIT);                        \
-    }                                                                  \
-  while (0)
-
 /* Use Solaris ELF section syntax.  */
 #undef TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION sparc_solaris_elf_asm_named_section
index 6934b1cae161dc510985c9823ede3a1733383362..f5cb4fec8137debed1b3c29640ee6aa2954469e1 100755 (executable)
@@ -21946,25 +21946,53 @@ foo:  .long   25
        tls_first_minor=17
        ;;
   i[34567]86-*-*)
-    conftest_s='
-       .section ".tdata","awT",@progbits
+    case "$target" in
+      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
+         on_solaris=yes
+       else
+         enable_tls=no;
+       fi
+       ;;
+      i[34567]86-*-solaris2.*)
+       on_solaris=yes
+       ;;
+      *)
+       on_solaris=no
+       ;;
+    esac
+    if test x$on_solaris = xyes && test x$gas_flag = xno; then
+      conftest_s='
+       .section .tdata,"awt",@progbits'
+      tls_first_major=0
+      tls_first_minor=0
+
+$as_echo "#define TLS_SECTION_ASM_FLAG 't'" >>confdefs.h
+
+    else
+      conftest_s='
+       .section ".tdata","awT",@progbits'
+      tls_first_major=2
+      tls_first_minor=14
+      tls_as_opt="--fatal-warnings"
+    fi
+    conftest_s="$conftest_s
 foo:   .long   25
        .text
        movl    %gs:0, %eax
-       leal    foo@TLSGD(,%ebx,1), %eax
-       leal    foo@TLSLDM(%ebx), %eax
-       leal    foo@DTPOFF(%eax), %edx
-       movl    foo@GOTTPOFF(%ebx), %eax
-       subl    foo@GOTTPOFF(%ebx), %eax
-       addl    foo@GOTNTPOFF(%ebx), %eax
-       movl    foo@INDNTPOFF, %eax
-       movl    $foo@TPOFF, %eax
-       subl    $foo@TPOFF, %eax
-       leal    foo@NTPOFF(%ecx), %eax'
-       tls_first_major=2
-       tls_first_minor=14
-       tls_as_opt=--fatal-warnings
-       ;;
+       leal    foo@tlsgd(,%ebx,1), %eax
+       leal    foo@tlsldm(%ebx), %eax
+       leal    foo@dtpoff(%eax), %edx
+       movl    foo@gottpoff(%ebx), %eax
+       subl    foo@gottpoff(%ebx), %eax
+       addl    foo@gotntpoff(%ebx), %eax
+       movl    foo@indntpoff, %eax
+       movl    \$foo@tpoff, %eax
+       subl    \$foo@tpoff, %eax
+       leal    foo@ntpoff(%ecx), %eax"
+    ;;
   x86_64-*-*)
     conftest_s='
        .section ".tdata","awT",@progbits
index 15ce300dd6d21dad13a2c671237ec95c6c280257..6eee49b48e34a0978ec5e0f9bcfab9d4085a1d2d 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to generate a configuration script.
 
 # Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 #This file is part of GCC.
 
@@ -2573,25 +2573,54 @@ foo:    .long   25
        tls_first_minor=17
        ;;
   i[34567]86-*-*)
-    conftest_s='
-       .section ".tdata","awT",@progbits
+    case "$target" in
+      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
+         on_solaris=yes
+       else
+         enable_tls=no;
+       fi
+       ;;
+      i[34567]86-*-solaris2.*)
+       on_solaris=yes
+       ;;
+      *)
+       on_solaris=no
+       ;;
+    esac
+    if test x$on_solaris = xyes && test x$gas_flag = xno; then
+      conftest_s='
+       .section .tdata,"awt",@progbits'
+      tls_first_major=0
+      tls_first_minor=0
+changequote([,])dnl
+      AC_DEFINE(TLS_SECTION_ASM_FLAG, 't',
+[Define to the flag used to mark TLS sections if the default (`T') doesn't work.])
+changequote(,)dnl
+    else
+      conftest_s='
+       .section ".tdata","awT",@progbits'
+      tls_first_major=2
+      tls_first_minor=14
+      tls_as_opt="--fatal-warnings"
+    fi
+    conftest_s="$conftest_s
 foo:   .long   25
        .text
        movl    %gs:0, %eax
-       leal    foo@TLSGD(,%ebx,1), %eax
-       leal    foo@TLSLDM(%ebx), %eax
-       leal    foo@DTPOFF(%eax), %edx
-       movl    foo@GOTTPOFF(%ebx), %eax
-       subl    foo@GOTTPOFF(%ebx), %eax
-       addl    foo@GOTNTPOFF(%ebx), %eax
-       movl    foo@INDNTPOFF, %eax
-       movl    $foo@TPOFF, %eax
-       subl    $foo@TPOFF, %eax
-       leal    foo@NTPOFF(%ecx), %eax'
-       tls_first_major=2
-       tls_first_minor=14
-       tls_as_opt=--fatal-warnings
-       ;;
+       leal    foo@tlsgd(,%ebx,1), %eax
+       leal    foo@tlsldm(%ebx), %eax
+       leal    foo@dtpoff(%eax), %edx
+       movl    foo@gottpoff(%ebx), %eax
+       subl    foo@gottpoff(%ebx), %eax
+       addl    foo@gotntpoff(%ebx), %eax
+       movl    foo@indntpoff, %eax
+       movl    \$foo@tpoff, %eax
+       subl    \$foo@tpoff, %eax
+       leal    foo@ntpoff(%ecx), %eax"
+    ;;
   x86_64-*-*)
     conftest_s='
        .section ".tdata","awT",@progbits
index 8ca889684948b8a4dfffb3dba9980254b9c85df3..26f90edf3fbd4b100b351dbb62b3740619d1e64b 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of various defaults for tm.h macros.
    Copyright (C) 1992, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2007, 2008, 2009
+   2005, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
    Contributed by Ron Guilmette (rfg@monkeys.com)
 
@@ -118,11 +118,15 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #endif
 #endif
 
+#ifndef TLS_COMMON_ASM_OP
+#define TLS_COMMON_ASM_OP ".tls_common"
+#endif
+
 #if defined (HAVE_AS_TLS) && !defined (ASM_OUTPUT_TLS_COMMON)
 #define ASM_OUTPUT_TLS_COMMON(FILE, DECL, NAME, SIZE)                  \
   do                                                                   \
     {                                                                  \
-      fprintf ((FILE), "\t.tls_common\t");                             \
+      fprintf ((FILE), "\t%s\t", TLS_COMMON_ASM_OP);                   \
       assemble_name ((FILE), (NAME));                                  \
       fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n",         \
               (SIZE), DECL_ALIGN (DECL) / BITS_PER_UNIT);              \
index 424d704aa86bc478d32878842cd5dd2bd3078ce4..ba4e61218345178f6ae52516eefde302ceb9966c 100644 (file)
@@ -6067,6 +6067,10 @@ default_no_named_section (const char *name ATTRIBUTE_UNUSED,
   gcc_unreachable ();
 }
 
+#ifndef TLS_SECTION_ASM_FLAG
+#define TLS_SECTION_ASM_FLAG 'T'
+#endif
+
 void
 default_elf_asm_named_section (const char *name, unsigned int flags,
                               tree decl ATTRIBUTE_UNUSED)
@@ -6097,7 +6101,7 @@ default_elf_asm_named_section (const char *name, unsigned int flags,
   if (flags & SECTION_STRINGS)
     *f++ = 'S';
   if (flags & SECTION_TLS)
-    *f++ = 'T';
+    *f++ = TLS_SECTION_ASM_FLAG;
   if (HAVE_COMDAT_GROUP && (flags & SECTION_LINKONCE))
     *f++ = 'G';
   *f = '\0';