This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc 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]

Community source repository for glibc add-on ports branch, master, updated. glibc-2.15-46-g8c7adf8


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Community source repository for glibc add-on ports".

The branch, master has been updated
       via  8c7adf8e7921c02c5cdb27841dd204b0ec0be56f (commit)
       via  dd0c700a975b6e47fdfaff63b924931f3a698302 (commit)
       via  23a7453bbd725b826f9589c2e1c17002a548f0de (commit)
       via  be917baf452416e1a9e56137ed884d6d89789e58 (commit)
       via  9fb2a6b9af5612cf99789f17a8f4cfb095715bf8 (commit)
       via  e544dcd508d61c3736d43ab6bbaf1fe83130819c (commit)
       via  2011e6018cece62599c78e9a3c500ec887335a90 (commit)
       via  6aa8bd8cd15f1563db859805e9681cb750247667 (commit)
       via  fe7b738e7a0cf88f28bb40f55daa4237733f290f (commit)
       via  f81b9186fff072e96954399a479bf2eb6b32a228 (commit)
      from  92e47068b33040b59efdbedfbeedab1cba1e1e62 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=8c7adf8e7921c02c5cdb27841dd204b0ec0be56f

commit 8c7adf8e7921c02c5cdb27841dd204b0ec0be56f
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 17:00:52 2012 -0800

    alpha: Add ldsodefs.h and tst-audit.h.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index 804dd64..b82edba 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,7 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/alpha/ldsodefs.h: New file.
+	* sysdeps/alpha/tst-audit.h: New file.
 	* sysdeps/alpha/tls-macros.h: New file.
 
 	* sysdeps/unix/sysv/linux/alpha/getitimer.S: Don't check HAVE_ELF.
diff --git a/sysdeps/alpha/ldsodefs.h b/sysdeps/alpha/ldsodefs.h
new file mode 100644
index 0000000..a059cb1
--- /dev/null
+++ b/sysdeps/alpha/ldsodefs.h
@@ -0,0 +1,43 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
+   Copyright (C) 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef __LDSODEFS_H
+
+#include <elf.h>
+
+struct La_alpha_regs;
+struct La_alpha_retval;
+
+#define ARCH_PLTENTER_MEMBERS						\
+    Elf64_Addr (*alpha_gnu_pltenter) (Elf64_Sym *, unsigned int,	\
+				     uintptr_t *, uintptr_t *,		\
+				     const struct La_alpha_regs *,	\
+				     unsigned int *, const char *name,  \
+				     long int *framesizep);
+
+#define ARCH_PLTEXIT_MEMBERS						\
+    unsigned int (*alpha_gnu_pltexit) (Elf64_Sym *, unsigned int,	\
+				      uintptr_t *, uintptr_t *,		\
+				      const struct La_alpha_regs *,	\
+				      struct La_alpha_retval *,		\
+				      const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
diff --git a/sysdeps/alpha/tst-audit.h b/sysdeps/alpha/tst-audit.h
new file mode 100644
index 0000000..3bc50fa
--- /dev/null
+++ b/sysdeps/alpha/tst-audit.h
@@ -0,0 +1,24 @@
+/* Definitions for testing PLT entry/exit auditing.  Alpha version.
+   Copyright (C) 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define pltenter la_alpha_gnu_pltenter
+#define pltexit la_alpha_gnu_pltexit
+#define La_regs La_alpha_regs
+#define La_retval La_alpha_retval

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=dd0c700a975b6e47fdfaff63b924931f3a698302

commit dd0c700a975b6e47fdfaff63b924931f3a698302
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 16:59:11 2012 -0800

    alpha: Add tls-macros.h.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index 8ade582..804dd64 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,7 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/alpha/tls-macros.h: New file.
+
 	* sysdeps/unix/sysv/linux/alpha/getitimer.S: Don't check HAVE_ELF.
 	* sysdeps/unix/sysv/linux/alpha/getrusage.S: Likewise.
 	* sysdeps/unix/sysv/linux/alpha/gettimeofday.S: Likewise.
diff --git a/sysdeps/alpha/tls-macros.h b/sysdeps/alpha/tls-macros.h
new file mode 100644
index 0000000..0385d93
--- /dev/null
+++ b/sysdeps/alpha/tls-macros.h
@@ -0,0 +1,25 @@
+/* Macros to support TLS testing in times of missing compiler support.  */
+
+extern void *__tls_get_addr (void *);
+
+# define TLS_GD(x)						\
+  ({ void *__result;						\
+     asm ("lda %0, " #x "($gp) !tlsgd" : "=r" (__result));	\
+     __tls_get_addr (__result); })
+
+# define TLS_LD(x)						\
+  ({ void *__result;						\
+     asm ("lda %0, " #x "($gp) !tlsldm" : "=r" (__result));	\
+     __result = __tls_get_addr (__result);			\
+     asm ("lda %0, " #x "(%0) !dtprel" : "+r" (__result));	\
+     __result; })
+
+# define TLS_IE(x)						\
+  ({ long ofs;							\
+     asm ("ldq %0, " #x "($gp) !gottprel" : "=r"(ofs));		\
+     __builtin_thread_pointer () + ofs; })
+
+# define TLS_LE(x)						\
+  ({ void *__result = __builtin_thread_pointer ();		\
+     asm ("lda %0, " #x "(%0) !tprel" : "+r" (__result));	\
+     __result; })

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=23a7453bbd725b826f9589c2e1c17002a548f0de

commit 23a7453bbd725b826f9589c2e1c17002a548f0de
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 15:55:41 2012 -0800

    alpha: Remove HAVE_ELF tests.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index e76205d..8ade582 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,14 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/unix/sysv/linux/alpha/getitimer.S: Don't check HAVE_ELF.
+	* sysdeps/unix/sysv/linux/alpha/getrusage.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/gettimeofday.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/select.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/setitimer.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/settimeofday.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/utimes.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/wait4.S: Likewise.
+
 	* sysdeps/alpha/elf/crti.S, sysdeps/alpha/elf/crtn.S: New files...
 	* sysdeps/alpha/elf/initfini.c: ... split from here.  Remove file.
 	* sysdeps/alpha/nptl/elf/pt-initfini.c: Remove file.
diff --git a/sysdeps/unix/sysv/linux/alpha/getitimer.S b/sysdeps/unix/sysv/linux/alpha/getitimer.S
index 6644a5c..c29b3bd 100644
--- a/sysdeps/unix/sysv/linux/alpha/getitimer.S
+++ b/sysdeps/unix/sysv/linux/alpha/getitimer.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define GETITIMER	__getitimer_tv64
 #else
 #define GETITIMER	getitimer
@@ -108,6 +108,6 @@ $error:
 END(GETITIMER)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__getitimer_tv64, getitimer, GLIBC_2.1)
 #endif
diff --git a/sysdeps/unix/sysv/linux/alpha/getrusage.S b/sysdeps/unix/sysv/linux/alpha/getrusage.S
index 0bca4b5..2516ab0 100644
--- a/sysdeps/unix/sysv/linux/alpha/getrusage.S
+++ b/sysdeps/unix/sysv/linux/alpha/getrusage.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define GETRUSAGE	__getrusage_tv64
 #else
 #define GETRUSAGE	__getrusage
@@ -140,7 +140,7 @@ $error:
 END(GETRUSAGE)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 strong_alias(__getrusage_tv64, ____getrusage_tv64)
 default_symbol_version (____getrusage_tv64, __getrusage, GLIBC_2.1)
 default_symbol_version (__getrusage_tv64, getrusage, GLIBC_2.1)
diff --git a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S b/sysdeps/unix/sysv/linux/alpha/gettimeofday.S
index 7c9183a..2910830 100644
--- a/sysdeps/unix/sysv/linux/alpha/gettimeofday.S
+++ b/sysdeps/unix/sysv/linux/alpha/gettimeofday.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2002, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2002, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define GETTIMEOFDAY	__gettimeofday_tv64
 #else
 #define GETTIMEOFDAY	__gettimeofday
@@ -106,7 +106,7 @@ $error:
 END(GETTIMEOFDAY)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__gettimeofday_tv64, __gettimeofday, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only
diff --git a/sysdeps/unix/sysv/linux/alpha/select.S b/sysdeps/unix/sysv/linux/alpha/select.S
index 35a81e9..94f209b 100644
--- a/sysdeps/unix/sysv/linux/alpha/select.S
+++ b/sysdeps/unix/sysv/linux/alpha/select.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,2002,2003,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998,2002,2003,2006,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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define SELECT	__select_tv64
 #else
 #define SELECT	__select
@@ -224,7 +224,7 @@ $error:
 END(SELECT)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__select_tv64, __select, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only
diff --git a/sysdeps/unix/sysv/linux/alpha/setitimer.S b/sysdeps/unix/sysv/linux/alpha/setitimer.S
index 59caeac..59f97f7 100644
--- a/sysdeps/unix/sysv/linux/alpha/setitimer.S
+++ b/sysdeps/unix/sysv/linux/alpha/setitimer.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define SETITIMER	__setitimer_tv64
 #else
 #define SETITIMER	__setitimer
@@ -124,7 +124,7 @@ $error:
 END(SETITIMER)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__setitimer_tv64, __setitimer, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only
diff --git a/sysdeps/unix/sysv/linux/alpha/settimeofday.S b/sysdeps/unix/sysv/linux/alpha/settimeofday.S
index e39eadc..e80d054 100644
--- a/sysdeps/unix/sysv/linux/alpha/settimeofday.S
+++ b/sysdeps/unix/sysv/linux/alpha/settimeofday.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define SETTIMEOFDAY	__settimeofday_tv64
 #else
 #define SETTIMEOFDAY	__settimeofday
@@ -105,7 +105,7 @@ $error:
 END(SETTIMEOFDAY)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__settimeofday_tv64, __settimeofday, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only
diff --git a/sysdeps/unix/sysv/linux/alpha/utimes.S b/sysdeps/unix/sysv/linux/alpha/utimes.S
index 0dd0a93..2ab2b19 100644
--- a/sysdeps/unix/sysv/linux/alpha/utimes.S
+++ b/sysdeps/unix/sysv/linux/alpha/utimes.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define UTIMES	__utimes_tv64
 #else
 #define UTIMES	__utimes
@@ -110,7 +110,7 @@ $error:
 END(UTIMES)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__utimes_tv64, __utimes, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only
diff --git a/sysdeps/unix/sysv/linux/alpha/wait4.S b/sysdeps/unix/sysv/linux/alpha/wait4.S
index 634993d..5e1e5d4 100644
--- a/sysdeps/unix/sysv/linux/alpha/wait4.S
+++ b/sysdeps/unix/sysv/linux/alpha/wait4.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 2003, 2006, 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
@@ -23,7 +23,7 @@
 
 .text
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 #define WAIT4	__wait4_tv64
 #else
 #define WAIT4	__wait4
@@ -143,7 +143,7 @@ $error:
 END(WAIT4)
 #endif /* __ASSUME_TIMEVAL64 */
 
-#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
+#if defined PIC && defined DO_VERSIONING
 default_symbol_version (__wait4_tv64, __wait4, GLIBC_2.1)
 
 /* It seems to me to be a misfeature of the assembler that we can only

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=be917baf452416e1a9e56137ed884d6d89789e58

commit be917baf452416e1a9e56137ed884d6d89789e58
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 15:17:41 2012 -0800

    alpha: Support __NR_fstatat64.

diff --git a/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c b/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
new file mode 100644
index 0000000..41e83bc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c
@@ -0,0 +1,9 @@
+/* In this implementation we do not really care whether the call fails
+   because of missing kernel support since we do not even call the
+   function in this case.  */
+/* For Alpha, in <kernel-features.h> we redefine the default definition of
+   when __ASSUME_ATFCTS is present.  The hack must wait until after that.  */
+#include <kernel-features.h>
+#undef __ASSUME_ATFCTS
+#define __ASSUME_ATFCTS 1
+#include "fxstatat.c"
diff --git a/sysdeps/unix/sysv/linux/alpha/fxstatat.c b/sysdeps/unix/sysv/linux/alpha/fxstatat.c
index 6fa3aeb..a6fd06b 100644
--- a/sysdeps/unix/sysv/linux/alpha/fxstatat.c
+++ b/sysdeps/unix/sysv/linux/alpha/fxstatat.c
@@ -30,11 +30,44 @@
 
 #undef __fxstatat64
 
+#ifdef __ASSUME_ATFCTS
+# define __have_atfcts 1
+#endif
+#ifdef __ASSUME_STAT64_SYSCALL
+# define __libc_missing_axp_stat64 0
+#endif
 
 /* Get information about the file NAME in BUF.  */
 int
 __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
 {
+  INTERNAL_SYSCALL_DECL (err);
+  int result, errno_out;
+
+  /* ??? The __fxstatat entry point is new enough that it must be using
+     vers == _STAT_VER_KERNEL64.  For the benefit of dl-fxstatat64.c, we
+     cannot actually check this, lest the compiler not optimize the rest
+     of the function away.  */
+
+#ifdef __NR_fstatat64
+  if (__have_atfcts >= 0)
+    {
+      result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, st, flag);
+      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
+	return result;
+      errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
+#ifndef __ASSUME_ATFCTS
+      if (errno_out == ENOSYS)
+	__have_atfcts = -1;
+      else
+#endif
+	{
+	  __set_errno (errno_out);
+	  return -1;
+	}
+    }
+#endif /* __NR_fstatat64 */
+
   if (flag & ~AT_SYMLINK_NOFOLLOW)
     {
       __set_errno (EINVAL);
@@ -67,12 +100,8 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
       file = buf;
     }
 
-  INTERNAL_SYSCALL_DECL (err);
-  int result, errno_out;
-  struct kernel_stat kst;
-
-#if __ASSUME_STAT64_SYSCALL > 0
-  if (vers == _STAT_VER_KERNEL64)
+#ifdef __NR_stat64
+  if (!__libc_missing_axp_stat64)
     {
       if (flag & AT_SYMLINK_NOFOLLOW)
 	result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
@@ -82,24 +111,16 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
 	return result;
       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
-      goto fail;
-    }
-#elif defined __NR_stat64
-  if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
-    {
-      if (flag & AT_SYMLINK_NOFOLLOW)
-	result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
+# if __ASSUME_STAT64_SYSCALL == 0
+      if (errno_out == ENOSYS)
+	__libc_missing_axp_stat64 = 1;
       else
-	result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
-
-      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
-	return result;
-      errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
-      if (errno_out != ENOSYS)
+# endif
 	goto fail;
-      __libc_missing_axp_stat64 = 1;
     }
-#endif
+#endif /* __NR_stat64 */
+
+  struct kernel_stat kst;
 
   if (flag & AT_SYMLINK_NOFOLLOW)
     result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=9fb2a6b9af5612cf99789f17a8f4cfb095715bf8

commit 9fb2a6b9af5612cf99789f17a8f4cfb095715bf8
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 13:40:03 2012 -0800

    alpha: Convert to crt[in].S.
    
    A particularly trivial conversion, since we were already using
    assembler, smuggled inside the C file.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index 42e3c85..e76205d 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,9 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/alpha/elf/crti.S, sysdeps/alpha/elf/crtn.S: New files...
+	* sysdeps/alpha/elf/initfini.c: ... split from here.  Remove file.
+	* sysdeps/alpha/nptl/elf/pt-initfini.c: Remove file.
+
 	* sysdeps/unix/alpha/sysdep.h (INTERNAL_SYSCALL_DECL): Mark unused.
 
 	* sysdeps/unix/sysv/linux/alpha/bits/stat.h (_STAT_VER_LINUX): New.
diff --git a/sysdeps/alpha/elf/initfini.c b/sysdeps/alpha/elf/crti.S
similarity index 55%
rename from sysdeps/alpha/elf/initfini.c
rename to sysdeps/alpha/elf/crti.S
index 4d3342d..b5989bf 100644
--- a/sysdeps/alpha/elf/initfini.c
+++ b/sysdeps/alpha/elf/crti.S
@@ -1,5 +1,5 @@
 /* Special .init and .fini section support for Alpha.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 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
@@ -34,17 +34,12 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-/* This file is compiled into assembly code which is then munged by a sed
-   script into two files: crti.s and crtn.s.
+/* crti.S puts a function prologue at the beginning of the .init and
+   .fini sections and defines global symbols for those addresses, so
+   they can be called as functions.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.
 
-   * crti.s puts a function prologue at the beginning of the .init and .fini
-   sections and defines global symbols for those addresses, so they can be
-   called as functions.
-
-   * crtn.s puts the corresponding function epilogues in the .init and .fini
-   sections.
-
-   This differs from what would be generated by the generic code in that
+   This differs from what would be generated for ordinary code in that
    we save and restore the GP within the function.  In order for linker
    relaxation to work, the value in the GP register on exit from a function
    must be valid for the function entry point.  Normally, a function is
@@ -54,57 +49,52 @@
    files, all of which may have different GP values.  So we must reload
    the GP value from crti.o in crtn.o.  */
 
-__asm__ ("						\n\
-#include \"defs.h\"					\n\
-							\n\
-/*@HEADER_ENDS*/					\n\
-							\n\
-/*@_init_PROLOG_BEGINS*/				\n\
-	.section .init, \"ax\", @progbits		\n\
-	.globl	_init					\n\
-	.type	_init, @function			\n\
-	.usepv	_init, std				\n\
-_init:							\n\
-	ldgp	$29, 0($27)				\n\
-	subq	$30, 16, $30				\n\
-	lda	$27, __gmon_start__			\n\
-	stq	$26, 0($30)				\n\
-	stq	$29, 8($30)				\n\
-	beq	$27, 1f					\n\
-	jsr	$26, ($27), __gmon_start__		\n\
-	ldq	$29, 8($30)				\n\
-	.align 3					\n\
-1:							\n\
-/*@_init_PROLOG_ENDS*/					\n\
-							\n\
-/*@_init_EPILOG_BEGINS*/				\n\
-	.section .init, \"ax\", @progbits		\n\
-	ldq	$26, 0($30)				\n\
-	ldq	$29, 8($30)				\n\
-	addq	$30, 16, $30				\n\
-	ret						\n\
-/*@_init_EPILOG_ENDS*/					\n\
-							\n\
-/*@_fini_PROLOG_BEGINS*/				\n\
-	.section .fini, \"ax\", @progbits		\n\
-	.globl	_fini					\n\
-	.type	_fini,@function				\n\
-	.usepv	_fini,std				\n\
-_fini:							\n\
-	ldgp	$29, 0($27)				\n\
-	subq	$30, 16, $30				\n\
-	stq	$26, 0($30)				\n\
-	stq	$29, 8($30)				\n\
-	.align 3					\n\
-/*@_fini_PROLOG_ENDS*/					\n\
-							\n\
-/*@_fini_EPILOG_BEGINS*/				\n\
-	.section .fini, \"ax\", @progbits		\n\
-	ldq	$26, 0($30)				\n\
-	ldq	$29, 8($30)				\n\
-	addq	$30, 16, $30				\n\
-	ret						\n\
-/*@_fini_EPILOG_ENDS*/					\n\
-							\n\
-/*@TRAILER_BEGINS*/					\n\
-");
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+        weak_extern (PREINIT_FUNCTION)
+#else
+        .hidden PREINIT_FUNCTION
+#endif
+
+	.section .init, "ax", @progbits
+	.globl	_init
+	.type	_init, @function
+	.usepv	_init, std
+_init:
+	ldgp	$29, 0($27)
+	subq	$30, 16, $30
+#if PREINIT_FUNCTION_WEAK
+	lda	$27, PREINIT_FUNCTION
+#endif
+	stq	$26, 0($30)
+	stq	$29, 8($30)
+#if PREINIT_FUNCTION_WEAK
+	beq	$27, 1f
+	jsr	$26, ($27), PREINIT_FUNCTION
+	ldq	$29, 8($30)
+1:
+#else
+	bsr	$26, PREINIT_FUNCTION !samegp
+#endif
+	.p2align 3
+
+	.section .fini, "ax", @progbits
+	.globl	_fini
+	.type	_fini,@function
+	.usepv	_fini,std
+_fini:
+	ldgp	$29, 0($27)
+	subq	$30, 16, $30
+	stq	$26, 0($30)
+	stq	$29, 8($30)
+	.p2align 3
diff --git a/sysdeps/alpha/elf/crtn.S b/sysdeps/alpha/elf/crtn.S
new file mode 100644
index 0000000..50e772f
--- /dev/null
+++ b/sysdeps/alpha/elf/crtn.S
@@ -0,0 +1,50 @@
+/* Special .init and .fini section support for Alpha.
+   Copyright (C) 2001, 2002, 2003, 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* crtn.S puts function epilogues in the .init and .fini sections
+   corresponding to the prologues in crti.S. */
+
+	.section .init, "ax", @progbits
+	ldq	$26, 0($30)
+	ldq	$29, 8($30)
+	addq	$30, 16, $30
+	ret
+
+	.section .fini, "ax", @progbits
+	ldq	$26, 0($30)
+	ldq	$29, 8($30)
+	addq	$30, 16, $30
+	ret
diff --git a/sysdeps/alpha/nptl/elf/pt-initfini.c b/sysdeps/alpha/nptl/elf/pt-initfini.c
deleted file mode 100644
index ba2e419..0000000
--- a/sysdeps/alpha/nptl/elf/pt-initfini.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Special .init and .fini section support for Alpha.  NPTL version.
-   Copyright (C) 2003 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-/* This file is compiled into assembly code which is then munged by a sed
-   script into two files: crti.s and crtn.s.
-
-   * crti.s puts a function prologue at the beginning of the .init and .fini
-   sections and defines global symbols for those addresses, so they can be
-   called as functions.
-
-   * crtn.s puts the corresponding function epilogues in the .init and .fini
-   sections.
-
-   This differs from what would be generated by the generic code in that
-   we save and restore the GP within the function.  In order for linker
-   relaxation to work, the value in the GP register on exit from a function
-   must be valid for the function entry point.  Normally, a function is
-   contained within one object file and this is not an issue, provided
-   that the function reloads the gp after making any function calls.
-   However, _init and _fini are constructed from pieces of many object
-   files, all of which may have different GP values.  So we must reload
-   the GP value from crti.o in crtn.o.  */
-
-__asm__ ("						\n\
-#include \"defs.h\"					\n\
-							\n\
-/*@HEADER_ENDS*/					\n\
-							\n\
-/*@_init_PROLOG_BEGINS*/				\n\
-	.section .init, \"ax\", @progbits		\n\
-	.globl	_init					\n\
-	.type	_init,@function				\n\
-	.usepv	_init,std				\n\
-_init:							\n\
-	ldgp	$29, 0($27)				\n\
-	subq	$30, 16, $30				\n\
-	stq	$26, 0($30)				\n\
-	stq	$29, 8($30)				\n\
-	bsr	$26, __pthread_initialize_minimal_internal !samegp \n\
-	.align 3					\n\
-/*@_init_PROLOG_ENDS*/					\n\
-							\n\
-/*@_init_EPILOG_BEGINS*/				\n\
-	.section .init, \"ax\", @progbits		\n\
-	ldq	$26, 0($30)				\n\
-	ldq	$29, 8($30)				\n\
-	addq	$30, 16, $30				\n\
-	ret						\n\
-/*@_init_EPILOG_ENDS*/					\n\
-							\n\
-/*@_fini_PROLOG_BEGINS*/				\n\
-	.section .fini, \"ax\", @progbits		\n\
-	.globl	_fini					\n\
-	.type	_fini,@function				\n\
-	.usepv	_fini,std				\n\
-_fini:							\n\
-	ldgp	$29, 0($27)				\n\
-	subq	$30, 16, $30				\n\
-	stq	$26, 0($30)				\n\
-	stq	$29, 8($30)				\n\
-	.align 3					\n\
-/*@_fini_PROLOG_ENDS*/					\n\
-							\n\
-/*@_fini_EPILOG_BEGINS*/				\n\
-	.section .fini, \"ax\", @progbits		\n\
-	ldq	$26, 0($30)				\n\
-	ldq	$29, 8($30)				\n\
-	addq	$30, 16, $30				\n\
-	ret						\n\
-/*@_fini_EPILOG_ENDS*/					\n\
-							\n\
-/*@TRAILER_BEGINS*/					\n\
-");

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=e544dcd508d61c3736d43ab6bbaf1fe83130819c

commit e544dcd508d61c3736d43ab6bbaf1fe83130819c
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 12:36:16 2012 -0800

    alpha: Eliminate set-but-not-used warnings with internal syscalls.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index afcf75a..42e3c85 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,7 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/unix/alpha/sysdep.h (INTERNAL_SYSCALL_DECL): Mark unused.
+
 	* sysdeps/unix/sysv/linux/alpha/bits/stat.h (_STAT_VER_LINUX): New.
 
 	* sysdeps/alpha/dl-tls.h (TLS_DTV_UNALLOCATED): New.
diff --git a/sysdeps/unix/alpha/sysdep.h b/sysdeps/unix/alpha/sysdep.h
index 64add9e..224c95d 100644
--- a/sysdeps/unix/alpha/sysdep.h
+++ b/sysdeps/unix/alpha/sysdep.h
@@ -190,7 +190,9 @@ __LABEL(name)						\
 	_sc_ret;					\
 })
 
-#define INTERNAL_SYSCALL_DECL(err)		long int err
+#define INTERNAL_SYSCALL_DECL(err) \
+	long int err __attribute__((unused))
+
 /* Make sure and "use" the variable that we're not returning,
    in order to suppress unused variable warnings.  */
 #define INTERNAL_SYSCALL_ERROR_P(val, err)	((void)val, err)

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=2011e6018cece62599c78e9a3c500ec887335a90

commit 2011e6018cece62599c78e9a3c500ec887335a90
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 11:48:38 2012 -0800

    alpha: Define _STAT_VER_LINUX.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index ae6839d..afcf75a 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,7 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/unix/sysv/linux/alpha/bits/stat.h (_STAT_VER_LINUX): New.
+
 	* sysdeps/alpha/dl-tls.h (TLS_DTV_UNALLOCATED): New.
 
 	* sysdeps/unix/sysv/linux/alpha/configure.in: New file.
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h b/sysdeps/unix/sysv/linux/alpha/bits/stat.h
index d7241bd..e70e836 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/stat.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/stat.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2000,2001,2004,2010
+/* Copyright (C) 1996,1997,1998,1999,2000,2001,2004,2010,2012
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -30,7 +30,8 @@
 #define _STAT_VER_GLIBC2_1	2
 #define _STAT_VER_KERNEL64	3
 #define _STAT_VER_GLIBC2_3_4	3
-#define _STAT_VER		_STAT_VER_GLIBC2_3_4
+#define _STAT_VER_LINUX		3
+#define _STAT_VER		_STAT_VER_LINUX
 
 /* Versions of the `xmknod' interface.  */
 #define _MKNOD_VER_LINUX	0

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=6aa8bd8cd15f1563db859805e9681cb750247667

commit 6aa8bd8cd15f1563db859805e9681cb750247667
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 11:44:40 2012 -0800

    alpha: Define TLS_DTV_UNALLOCATED.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index a1732f9..ae6839d 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,7 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/alpha/dl-tls.h (TLS_DTV_UNALLOCATED): New.
+
 	* sysdeps/unix/sysv/linux/alpha/configure.in: New file.
 	* sysdeps/unix/sysv/linux/alpha/configure: Build.
 	* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Protect from
diff --git a/sysdeps/alpha/dl-tls.h b/sysdeps/alpha/dl-tls.h
index f81f95d..d40d0a4 100644
--- a/sysdeps/alpha/dl-tls.h
+++ b/sysdeps/alpha/dl-tls.h
@@ -25,5 +25,7 @@ typedef struct
   unsigned long int ti_offset;
 } tls_index;
 
-
 extern void *__tls_get_addr (tls_index *ti);
+
+/* Value used for dtv entries for which the allocation is delayed.  */
+#define TLS_DTV_UNALLOCATED	((void *) -1l)

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=fe7b738e7a0cf88f28bb40f55daa4237733f290f

commit fe7b738e7a0cf88f28bb40f55daa4237733f290f
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 11:43:50 2012 -0800

    alpha: Require kernel version 2.6.0.
    
    The minimum version that supports TLS.  Also avoids having to
    fix the build for ancient __ASSUME_* settings.

diff --git a/ChangeLog.alpha b/ChangeLog.alpha
index 9c304d7..a1732f9 100644
--- a/ChangeLog.alpha
+++ b/ChangeLog.alpha
@@ -1,5 +1,10 @@
 2012-02-08  Richard Henderson  <rth@twiddle.net>
 
+	* sysdeps/unix/sysv/linux/alpha/configure.in: New file.
+	* sysdeps/unix/sysv/linux/alpha/configure: Build.
+	* sysdeps/unix/sysv/linux/alpha/kernel-features.h: Protect from
+	multiple includes.  Disable statfs64 entirely.
+
 	* 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
diff --git a/sysdeps/unix/sysv/linux/alpha/configure b/sysdeps/unix/sysv/linux/alpha/configure
new file mode 100644
index 0000000..80528ee
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/configure
@@ -0,0 +1,8 @@
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/unix/sysv/linux/alpha
+
+# There are several bits that no longer compile cleanly without
+# realtime signal support (ver 2.2.0).  Given that we also now
+# require TLS (ver 2.6.0), it seems pointless to fix them.
+# ??? Surely this should now be the generic default.
+arch_minimum_kernel=2.6.0
diff --git a/sysdeps/unix/sysv/linux/alpha/configure.in b/sysdeps/unix/sysv/linux/alpha/configure.in
new file mode 100644
index 0000000..7136b85
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/configure.in
@@ -0,0 +1,8 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/alpha
+
+# There are several bits that no longer compile cleanly without
+# realtime signal support (ver 2.2.0).  Given that we also now
+# require TLS (ver 2.6.0), it seems pointless to fix them.
+# ??? Surely this should now be the generic default.
+arch_minimum_kernel=2.6.0
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index 9c640f9..ce4d160 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -18,6 +18,9 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#ifndef _KERNEL_FEATURES_H
+#define _KERNEL_FEATURES_H 1
+
 /* alpha switched to a 64-bit timeval sometime before 2.2.0.  */
 #if __LINUX_KERNEL_VERSION >= 131584
 # define __ASSUME_TIMEVAL64	1
@@ -96,3 +99,9 @@
 #if __LINUX_KERNEL_VERSION < 0x020621
 # undef __ASSUME_FALLOCATE
 #endif
+
+/* There never has been support for fstat64.  */
+#undef __ASSUME_STATFS64
+#define __ASSUME_STATFS64 0
+
+#endif /* _KERNEL_FEATURES_H */

http://sources.redhat.com/git/gitweb.cgi?p=glibc-ports.git;a=commitdiff;h=f81b9186fff072e96954399a479bf2eb6b32a228

commit f81b9186fff072e96954399a479bf2eb6b32a228
Author: Richard Henderson <rth@twiddle.net>
Date:   Wed Feb 8 10:06:06 2012 -0800

    alpha: Remove HAVE_TLS_SUPPORT and HAVE___THREAD tests.

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);				\

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog.alpha                                  |   36 +++++++
 sysdeps/alpha/dl-tls.h                           |    4 +-
 sysdeps/alpha/elf/configure                      |  122 +++++++++++++++++----
 sysdeps/alpha/elf/configure.in                   |    9 +-
 sysdeps/alpha/elf/{initfini.c => crti.S}         |  120 ++++++++++------------
 sysdeps/{m68k => alpha/elf}/crtn.S               |   24 +++--
 sysdeps/{m68k => alpha}/ldsodefs.h               |   16 ++--
 sysdeps/alpha/nptl/elf/pt-initfini.c             |   89 ----------------
 sysdeps/alpha/nptl/tls.h                         |   16 +---
 sysdeps/alpha/tls-macros.h                       |   25 +++++
 sysdeps/{m68k/bsd-setjmp.c => alpha/tst-audit.h} |   11 ++-
 sysdeps/unix/alpha/sysdep.h                      |   68 ++++--------
 sysdeps/unix/sysv/linux/alpha/bits/stat.h        |    5 +-
 sysdeps/unix/sysv/linux/alpha/configure          |    8 ++
 sysdeps/unix/sysv/linux/alpha/configure.in       |    8 ++
 sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c    |    9 ++
 sysdeps/unix/sysv/linux/alpha/fxstatat.c         |   63 ++++++++----
 sysdeps/unix/sysv/linux/alpha/getitimer.S        |    6 +-
 sysdeps/unix/sysv/linux/alpha/getrusage.S        |    6 +-
 sysdeps/unix/sysv/linux/alpha/gettimeofday.S     |    6 +-
 sysdeps/unix/sysv/linux/alpha/kernel-features.h  |    9 ++
 sysdeps/unix/sysv/linux/alpha/select.S           |    6 +-
 sysdeps/unix/sysv/linux/alpha/setitimer.S        |    6 +-
 sysdeps/unix/sysv/linux/alpha/settimeofday.S     |    6 +-
 sysdeps/unix/sysv/linux/alpha/utimes.S           |    6 +-
 sysdeps/unix/sysv/linux/alpha/wait4.S            |    6 +-
 26 files changed, 377 insertions(+), 313 deletions(-)
 rename sysdeps/alpha/elf/{initfini.c => crti.S} (55%)
 copy sysdeps/{m68k => alpha/elf}/crtn.S (85%)
 copy sysdeps/{m68k => alpha}/ldsodefs.h (77%)
 delete mode 100644 sysdeps/alpha/nptl/elf/pt-initfini.c
 create mode 100644 sysdeps/alpha/tls-macros.h
 copy sysdeps/{m68k/bsd-setjmp.c => alpha/tst-audit.h} (75%)
 create mode 100644 sysdeps/unix/sysv/linux/alpha/configure
 create mode 100644 sysdeps/unix/sysv/linux/alpha/configure.in
 create mode 100644 sysdeps/unix/sysv/linux/alpha/dl-fxstatat64.c


hooks/post-receive
-- 
Community source repository for glibc add-on ports


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