patches/glibc/ports-2.10.1/450-alpha-ptr-mangling.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
yann@1625
     1
http://bugs.gentoo.org/201910
yann@1625
     2
yann@1625
     3
For every arch, PTR_MANGLE and PTR_DEMANGLE defines are in
yann@1625
     4
sysdeps/unix/sysv/linux/<arch>/sysdep.h. But for alpha this is not true. The
yann@1625
     5
defines are in sysdeps/unix/alpha/sysdep.h and unix/sysv/linux/alpha/sysdep.h
yann@1625
     6
includes the first.
yann@1625
     7
yann@1625
     8
This is a patch that fixes the issue and let alpha build, at the expense of
yann@1625
     9
disabling MANGLING in the non PIC case, but googling showed that the issue is
yann@1625
    10
known, and that nobody really cares about it. 
yann@1625
    11
yann@1625
    12
Info from: http://sourceware.org/bugzilla/show_bug.cgi?id=5216
yann@1625
    13
yann@1625
    14
diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/alpha/sysdep.h glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/alpha/sysdep.h
yann@1625
    15
--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/alpha/sysdep.h	2009-05-16 10:36:20.000000000 +0200
yann@1625
    16
+++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/alpha/sysdep.h	2009-11-13 00:50:55.000000000 +0100
yann@1625
    17
@@ -397,42 +397,4 @@
yann@1625
    18
 	_sc_ret = _sc_0, _sc_err = _sc_19;			\
yann@1625
    19
 }
yann@1625
    20
 
yann@1625
    21
-/* Pointer mangling support.  Note that tls access is slow enough that
yann@1625
    22
-   we don't deoptimize things by placing the pointer check value there.  */
yann@1625
    23
-
yann@1625
    24
-#include <stdint.h>
yann@1625
    25
-
yann@1625
    26
-#if defined NOT_IN_libc && defined IS_IN_rtld
yann@1625
    27
-# ifdef __ASSEMBLER__
yann@1625
    28
-#  define PTR_MANGLE(dst, src, tmp)				\
yann@1625
    29
-	ldah	tmp, __pointer_chk_guard_local($29) !gprelhigh;	\
yann@1625
    30
-	ldq	tmp, __pointer_chk_guard_local(tmp) !gprellow;	\
yann@1625
    31
-	xor	src, tmp, dst
yann@1625
    32
-#  define PTR_MANGLE2(dst, src, tmp)				\
yann@1625
    33
-	xor	src, tmp, dst
yann@1625
    34
-#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
yann@1625
    35
-#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
yann@1625
    36
-# else
yann@1625
    37
-extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
yann@1625
    38
-#  define PTR_MANGLE(var)	\
yann@1625
    39
-  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
yann@1625
    40
-#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
yann@1625
    41
-# endif
yann@1625
    42
-#elif defined PIC
yann@1625
    43
-# ifdef __ASSEMBLER__
yann@1625
    44
-#  define PTR_MANGLE(dst, src, tmp)		\
yann@1625
    45
-	ldq	tmp, __pointer_chk_guard;	\
yann@1625
    46
-	xor	src, tmp, dst
yann@1625
    47
-#  define PTR_MANGLE2(dst, src, tmp)		\
yann@1625
    48
-	xor	src, tmp, dst
yann@1625
    49
-#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
yann@1625
    50
-#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
yann@1625
    51
-# else
yann@1625
    52
-extern uintptr_t __pointer_chk_guard attribute_relro;
yann@1625
    53
-#  define PTR_MANGLE(var)	\
yann@1625
    54
-	(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
yann@1625
    55
-#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
yann@1625
    56
-# endif
yann@1625
    57
-#endif
yann@1625
    58
-
yann@1625
    59
 #endif /* ASSEMBLER */
yann@1625
    60
diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/sysdep.h glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/sysdep.h
yann@1625
    61
--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/sysdep.h	2009-05-16 10:36:20.000000000 +0200
yann@1625
    62
+++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/sysdep.h	2009-11-13 00:50:55.000000000 +0100
yann@1625
    63
@@ -98,4 +98,46 @@
yann@1625
    64
 	INTERNAL_SYSCALL1(name, err_out, nr, args);			\
yann@1625
    65
 })
yann@1625
    66
 
yann@1625
    67
+/* Pointer mangling support.  Note that tls access is slow enough that
yann@1625
    68
+   we don't deoptimize things by placing the pointer check value there.  */
yann@1625
    69
+
yann@1625
    70
+#if defined NOT_IN_libc && defined IS_IN_rtld
yann@1625
    71
+# ifdef __ASSEMBLER__
yann@1625
    72
+#  define PTR_MANGLE(dst, src, tmp)                            \
yann@1625
    73
+       ldah    tmp, __pointer_chk_guard_local($29) !gprelhigh; \
yann@1625
    74
+       ldq     tmp, __pointer_chk_guard_local(tmp) !gprellow;  \
yann@1625
    75
+       xor     src, tmp, dst
yann@1625
    76
+#  define PTR_MANGLE2(dst, src, tmp)                           \
yann@1625
    77
+       xor     src, tmp, dst
yann@1625
    78
+#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
yann@1625
    79
+#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
yann@1625
    80
+# else
yann@1625
    81
+extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
yann@1625
    82
+#  define PTR_MANGLE(var)      \
yann@1625
    83
+  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
yann@1625
    84
+#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
yann@1625
    85
+# endif
yann@1625
    86
+#elif defined PIC
yann@1625
    87
+# ifdef __ASSEMBLER__
yann@1625
    88
+#  define PTR_MANGLE(dst, src, tmp)            \
yann@1625
    89
+       ldq     tmp, __pointer_chk_guard;       \
yann@1625
    90
+       xor     src, tmp, dst
yann@1625
    91
+#  define PTR_MANGLE2(dst, src, tmp)           \
yann@1625
    92
+       xor     src, tmp, dst
yann@1625
    93
+#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
yann@1625
    94
+#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
yann@1625
    95
+# else
yann@1625
    96
+extern uintptr_t __pointer_chk_guard attribute_relro;
yann@1625
    97
+#  define PTR_MANGLE(var)      \
yann@1625
    98
+       (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
yann@1625
    99
+#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
yann@1625
   100
+# endif
yann@1625
   101
+#else
yann@1625
   102
+/* Pointer mangling is not yet supported for static libc on alpha.  */
yann@1625
   103
+# ifndef __ASSEMBLER__
yann@1625
   104
+#  define PTR_MANGLE(var)   (void) (var)
yann@1625
   105
+#  define PTR_DEMANGLE(var) (void) (var)
yann@1625
   106
+# endif
yann@1625
   107
+#endif
yann@1625
   108
+
yann@1625
   109
 #endif /* _LINUX_ALPHA_SYSDEP_H */
yann@1625
   110
diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/alpha/sysdep.h glibc-2.10.1/ports/sysdeps/unix/alpha/sysdep.h
yann@1625
   111
diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/sysdep.h glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/sysdep.h