This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 01/10] alpha: Remove HAVE_TLS_SUPPORT and HAVE___THREAD tests.


---
 ChangeLog.alpha                |    8 +++
 sysdeps/alpha/elf/configure    |  122 ++++++++++++++++++++++++++++++++--------
 sysdeps/alpha/elf/configure.in |    9 +--
 sysdeps/alpha/nptl/tls.h       |   16 +----
 sysdeps/unix/alpha/sysdep.h    |   64 +++++++--------------
 5 files changed, 132 insertions(+), 87 deletions(-)

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index b011d3c..9c304d7 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,3 +1,11 @@
+2012-02-08  Richard Henderson  <rth@twiddle.net>
+
+	* sysdeps/alpha/nptl/tls.h: Don't test HAVE_TLS_SUPPORT.
+	* sysdeps/unix/alpha/sysdep.h: Don't test HAVE___THREAD.
+	* sysdeps/alpha/elf/configure.in (libc_cv_alpha_tls): Error out if
+	the test fails.  Don't set HAVE_TLS_SUPPORT.
+	* sysdeps/alpha/elf/configure: Rebuild.
+
 2012-01-07  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/alpha/backtrace.c: Use x86_64 version of backtrace.c.
diff --git a/sysdeps/alpha/elf/configure b/sysdeps/alpha/elf/configure
index 1d594dc..5da9875 100644
--- a/sysdeps/alpha/elf/configure
+++ b/sysdeps/alpha/elf/configure
@@ -1,12 +1,92 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
 # This file is generated from configure.in by Autoconf.  DO NOT EDIT!
  # Local configure fragment for sysdeps/alpha/elf.
 
-if test "$usetls" != no; then
-# Check for support of thread-local storage handling in assembler and
-# linker.
-{ $as_echo "$as_me:$LINENO: checking for Alpha TLS support" >&5
+# Check for support of thread-local storage handling in assembler and linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Alpha TLS support" >&5
 $as_echo_n "checking for Alpha TLS support... " >&6; }
-if test "${libc_cv_alpha_tls+set}" = set; then
+if ${libc_cv_alpha_tls+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.s <<\EOF
@@ -44,30 +124,26 @@ baz:
 	lda	$16, n($31)			!tprel
 EOF
 if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
   libc_cv_alpha_tls=yes
 else
   libc_cv_alpha_tls=no
 fi
 rm -f conftest*
 fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_alpha_tls" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_alpha_tls" >&5
 $as_echo "$libc_cv_alpha_tls" >&6; }
-if test $libc_cv_alpha_tls = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_TLS_SUPPORT 1
-_ACEOF
-
-fi
+if test $libc_cv_alpha_tls = no; then
+  as_fn_error $? "the assembler must support TLS" "$LINENO" 5
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for GP relative module local relocs" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GP relative module local relocs" >&5
 $as_echo_n "checking for GP relative module local relocs... " >&6; }
-if test "${libc_cv_alpha_hidden_gprel+set}" = set; then
+if ${libc_cv_alpha_hidden_gprel+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat > conftest.c <<\EOF
@@ -78,11 +154,11 @@ EOF
 
 libc_cv_alpha_hidden_gprel=no
 if { ac_try='${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&5'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
   if grep -q 'bar.*!gprel' conftest.s \
      && grep -q 'baz.*!gprel' conftest.s \
      && ! grep -q 'bar.*!literal' conftest.s \
@@ -92,11 +168,9 @@ if { ac_try='${CC-cc} -S $CFLAGS -O2 -fpic conftest.c 1>&5'
 fi
 rm -f conftest*
 fi
-{ $as_echo "$as_me:$LINENO: result: $libc_cv_alpha_hidden_gprel" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_alpha_hidden_gprel" >&5
 $as_echo "$libc_cv_alpha_hidden_gprel" >&6; }
 if test $libc_cv_alpha_hidden_gprel = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PI_STATIC_AND_HIDDEN 1
-_ACEOF
+  $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
 
 fi
diff --git a/sysdeps/alpha/elf/configure.in b/sysdeps/alpha/elf/configure.in
index 3a47934..75fff53 100644
--- a/sysdeps/alpha/elf/configure.in
+++ b/sysdeps/alpha/elf/configure.in
@@ -1,9 +1,7 @@
 GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
 # Local configure fragment for sysdeps/alpha/elf.
 
-if test "$usetls" != no; then
-# Check for support of thread-local storage handling in assembler and
-# linker.
+# Check for support of thread-local storage handling in assembler and linker.
 AC_CACHE_CHECK(for Alpha TLS support, libc_cv_alpha_tls, [dnl
 cat > conftest.s <<\EOF
 	.section ".tdata", "awT", @progbits
@@ -46,9 +44,8 @@ else
   libc_cv_alpha_tls=no
 fi
 rm -f conftest*])
-if test $libc_cv_alpha_tls = yes; then
-  AC_DEFINE(HAVE_TLS_SUPPORT)
-fi
+if test $libc_cv_alpha_tls = no; then
+  AC_MSG_ERROR([the assembler must support TLS])
 fi
 
 AC_CACHE_CHECK(for GP relative module local relocs, libc_cv_alpha_hidden_gprel, [dnl
diff --git a/sysdeps/alpha/nptl/tls.h b/sysdeps/alpha/nptl/tls.h
index e77b1ff..887a457 100644
--- a/sysdeps/alpha/nptl/tls.h
+++ b/sysdeps/alpha/nptl/tls.h
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/Alpha version.
-   Copyright (C) 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005, 2006, 2007, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -38,18 +38,6 @@ typedef union dtv
   } pointer;
 } dtv_t;
 
-#else /* __ASSEMBLER__ */
-# include <tcb-offsets.h>
-#endif /* __ASSEMBLER__ */
-
-
-/* We require TLS support in the tools.  */
-#ifndef HAVE_TLS_SUPPORT
-# error "TLS support is required."
-#endif
-
-#ifndef __ASSEMBLER__
-
 /* Get system call information.  */
 # include <sysdep.h>
 
@@ -144,6 +132,8 @@ typedef struct
 #define THREAD_GSCOPE_WAIT() \
   GL(dl_wait_lookup_done) ()
 
+#else /* __ASSEMBLER__ */
+# include <tcb-offsets.h>
 #endif /* __ASSEMBLER__ */
 
 #endif	/* tls.h */
diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h
index d9009c1..64add9e 100644
--- a/sysdeps/unix/alpha/sysdep.h
+++ b/sysdeps/unix/alpha/sysdep.h
@@ -200,39 +200,19 @@ __LABEL(name)						\
 	"$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8",	\
 	"$22", "$23", "$24", "$25", "$27", "$28", "memory"
 
-/* If TLS is in use, we have a conflict between the PAL_rduniq primitive,
-   as modeled within GCC, and explicit use of the R0 register.  If we use
-   the register via the asm, the scheduler may place the PAL_rduniq insn
-   before we've copied the data from R0 into _sc_ret.  If this happens
-   we'll get a reload abort, since R0 is live at the same time it is
-   needed for the PAL_rduniq.
-
-   Solve this by using the "v" constraint instead of an asm for the syscall
-   output.  We don't do this unconditionally to allow compilation with
-   older compilers.  */
-
-#ifdef HAVE___THREAD
-#define inline_syscall_r0_asm
-#define inline_syscall_r0_out_constraint	"=v"
-#else
-#define inline_syscall_r0_asm			__asm__("$0")
-#define inline_syscall_r0_out_constraint	"=r"
-#endif
-
 /* It is moderately important optimization-wise to limit the lifetime
    of the hard-register variables as much as possible.  Thus we copy
    in/out as close to the asm as possible.  */
 
 #define inline_syscall0(name, args...)				\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_19 __asm__("$19");			\
 								\
 	_sc_0 = name;						\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2"				\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19)					\
+	   : "=v"(_sc_0), "=r"(_sc_19)				\
 	   : "0"(_sc_0)						\
 	   : inline_syscall_clobbers,				\
 	     "$16", "$17", "$18", "$20", "$21");		\
@@ -241,7 +221,7 @@ __LABEL(name)						\
 
 #define inline_syscall1(name,arg1)				\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_19 __asm__("$19");			\
 	register long _tmp_16 = (long) (arg1);			\
@@ -250,8 +230,7 @@ __LABEL(name)						\
 	_sc_16 = _tmp_16;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3"				\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16)				\
+	   : "=v"(_sc_0), "=r"(_sc_19), "=r"(_sc_16)		\
 	   : "0"(_sc_0), "2"(_sc_16)				\
 	   : inline_syscall_clobbers,				\
 	     "$17", "$18", "$20", "$21");			\
@@ -260,7 +239,7 @@ __LABEL(name)						\
 
 #define inline_syscall2(name,arg1,arg2)				\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_17 __asm__("$17");			\
 	register long _sc_19 __asm__("$19");			\
@@ -272,8 +251,8 @@ __LABEL(name)						\
 	_sc_17 = _tmp_17;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3 %4"			\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17)		\
+	   : "=v"(_sc_0), "=r"(_sc_19),				\
+	     "=r"(_sc_16), "=r"(_sc_17)				\
 	   : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17)		\
 	   : inline_syscall_clobbers,				\
 	     "$18", "$20", "$21");				\
@@ -282,7 +261,7 @@ __LABEL(name)						\
 
 #define inline_syscall3(name,arg1,arg2,arg3)			\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_17 __asm__("$17");			\
 	register long _sc_18 __asm__("$18");			\
@@ -297,9 +276,8 @@ __LABEL(name)						\
 	_sc_18 = _tmp_18;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3 %4 %5"			\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17),		\
-	     "=r"(_sc_18)					\
+	   : "=v"(_sc_0), "=r"(_sc_19), "=r"(_sc_16),		\
+	     "=r"(_sc_17), "=r"(_sc_18)				\
 	   : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17),		\
 	     "4"(_sc_18)					\
 	   : inline_syscall_clobbers, "$20", "$21");		\
@@ -308,7 +286,7 @@ __LABEL(name)						\
 
 #define inline_syscall4(name,arg1,arg2,arg3,arg4)		\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_17 __asm__("$17");			\
 	register long _sc_18 __asm__("$18");			\
@@ -325,9 +303,8 @@ __LABEL(name)						\
 	_sc_19 = _tmp_19;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3 %4 %5 %6"			\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17),		\
-	     "=r"(_sc_18)					\
+	   : "=v"(_sc_0), "=r"(_sc_19), "=r"(_sc_16),		\
+	     "=r"(_sc_17), "=r"(_sc_18)				\
 	   : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17),		\
 	     "4"(_sc_18), "1"(_sc_19)				\
 	   : inline_syscall_clobbers, "$20", "$21");		\
@@ -336,7 +313,7 @@ __LABEL(name)						\
 
 #define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5)		\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_17 __asm__("$17");			\
 	register long _sc_18 __asm__("$18");			\
@@ -356,9 +333,8 @@ __LABEL(name)						\
 	_sc_20 = _tmp_20;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7"		\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17),		\
-	     "=r"(_sc_18), "=r"(_sc_20)				\
+	   : "=v"(_sc_0), "=r"(_sc_19), "=r"(_sc_16),		\
+	     "=r"(_sc_17), "=r"(_sc_18), "=r"(_sc_20)		\
 	   : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17),		\
 	     "4"(_sc_18), "1"(_sc_19), "5"(_sc_20)		\
 	   : inline_syscall_clobbers, "$21");			\
@@ -367,7 +343,7 @@ __LABEL(name)						\
 
 #define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
 {								\
-	register long _sc_0 inline_syscall_r0_asm;		\
+	register long _sc_0;					\
 	register long _sc_16 __asm__("$16");			\
 	register long _sc_17 __asm__("$17");			\
 	register long _sc_18 __asm__("$18");			\
@@ -390,9 +366,9 @@ __LABEL(name)						\
 	_sc_21 = _tmp_21;					\
 	__asm__ __volatile__					\
 	  ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8"		\
-	   : inline_syscall_r0_out_constraint (_sc_0),		\
-	     "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17),		\
-	     "=r"(_sc_18), "=r"(_sc_20), "=r"(_sc_21)		\
+	   : "=v"(_sc_0), "=r"(_sc_19), "=r"(_sc_16),		\
+	     "=r"(_sc_17), "=r"(_sc_18), "=r"(_sc_20),		\
+	     "=r"(_sc_21)					\
 	   : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), "4"(_sc_18),	\
 	     "1"(_sc_19), "5"(_sc_20), "6"(_sc_21)		\
 	   : inline_syscall_clobbers);				\
-- 
1.7.7.6


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]