Author: pluto Date: Tue Feb 26 13:22:19 2008 GMT Module: SOURCES Tag: HEAD ---- Log message: - updated, now it works.
---- Files affected: SOURCES: glibc-2.7-alpha_PTR_MANGLE_move-1.patch (1.1 -> 1.2) ---- Diffs: ================================================================ Index: SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch diff -u SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch:1.1 SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch:1.2 --- SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch:1.1 Mon Feb 25 20:59:29 2008 +++ SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch Tue Feb 26 14:22:13 2008 @@ -1,6 +1,28 @@ -diff -Naur glibc-2.7.orig/sysdeps/unix/alpha/sysdep.h glibc-2.7/sysdeps/unix/alpha/sysdep.h ---- glibc-2.7.orig/sysdeps/unix/alpha/sysdep.h 2006-03-03 06:21:28.000000000 -0500 -+++ glibc-2.7/sysdeps/unix/alpha/sysdep.h 2007-10-27 23:14:36.000000000 -0400 +Additional Comment #5 From Pierre Habouzit 2007-11-02 08:2012 + +Subject: Re: glibc 2.7 compilation problem on alpha due to PTR_MANGLE and PTR_DEMANGLE +On Sun, Oct 28, 2007 at 09:47:59PM +0000, jciccone at gmail dot com wrote: +> +> ------- Additional Comments From jciccone at gmail dot com 2007-10-28 19:47 ------- +> Created an attachment (id=2062) +> --> (http://sourceware.org/bugzilla/attachment.cgi?id=2062&action=view) +> patch that moves PTR_MANGLE for alpha + +> Also, in every architecture besides alpha, the #if defined NOT_IN_libc && +> defined IS_IN_rtld contition has #else. alpha has a #elif defined PIC. The +> attached patch changes that #elif defined PIC to a #else. + +The thing is, in non PIC mode, rtld.o is not in the libc.a (or hasn't +the symbol that the libc uses for PTR_MANGLE which is the same), so PIC +is definitely special cased. + +Attached is a patch that fixes the issue for Debian, and let alpha +build, at the expense of disabling MANGLING in the non PIC case, but +googling showed that the issue is known, and that nobody really cares +about it. + +--- glibc-2.7.orig/sysdeps/unix/alpha/sysdep.h ++++ glibc-2.7/sysdeps/unix/alpha/sysdep.h @@ -397,42 +397,4 @@ _sc_ret = _sc_0, _sc_err = _sc_19; \ } @@ -44,44 +66,52 @@ -#endif - #endif /* ASSEMBLER */ -diff -Naur glibc-2.7.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h glibc-2.7/sysdeps/unix/sysv/linux/alpha/sysdep.h ---- glibc-2.7.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h 2007-08-21 04:07:28.000000000 -0400 -+++ glibc-2.7/sysdeps/unix/sysv/linux/alpha/sysdep.h 2007-10-27 23:39:45.000000000 -0400 -@@ -98,4 +98,37 @@ +--- glibc-2.7.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h ++++ glibc-2.7/sysdeps/unix/sysv/linux/alpha/sysdep.h +@@ -98,4 +98,46 @@ INTERNAL_SYSCALL1(name, err_out, nr, args); \ }) ++/* Pointer mangling support. Note that tls access is slow enough that ++ we don't deoptimize things by placing the pointer check value there. */ ++ +#if defined NOT_IN_libc && defined IS_IN_rtld +# ifdef __ASSEMBLER__ -+# define PTR_MANGLE(dst, src, tmp) \ -+ ldah tmp, __pointer_chk_guard_local($29) !gprelhigh; \ -+ ldq tmp, __pointer_chk_guard_local(tmp) !gprellow; \ -+ xor src, tmp, dst -+# define PTR_MANGLE2(dst, src, tmp) \ -+ xor src, tmp, dst ++# define PTR_MANGLE(dst, src, tmp) \ ++ ldah tmp, __pointer_chk_guard_local($29) !gprelhigh; \ ++ ldq tmp, __pointer_chk_guard_local(tmp) !gprellow; \ ++ xor src, tmp, dst ++# define PTR_MANGLE2(dst, src, tmp) \ ++ xor src, tmp, dst +# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp) +# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp) +# else +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; -+# define PTR_MANGLE(var) \ ++# define PTR_MANGLE(var) \ + (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) +# define PTR_DEMANGLE(var) PTR_MANGLE(var) +# endif -+#else ++#elif defined PIC +# ifdef __ASSEMBLER__ -+# define PTR_MANGLE(dst, src, tmp) \ -+ ldq tmp, __pointer_chk_guard; \ -+ xor src, tmp, dst -+# define PTR_MANGLE2(dst, src, tmp) \ -+ xor src, tmp, dst ++# define PTR_MANGLE(dst, src, tmp) \ ++ ldq tmp, __pointer_chk_guard; \ ++ xor src, tmp, dst ++# define PTR_MANGLE2(dst, src, tmp) \ ++ xor src, tmp, dst +# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp) +# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp) +# else +extern uintptr_t __pointer_chk_guard attribute_relro; -+# define PTR_MANGLE(var) \ -+ (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard) ++# define PTR_MANGLE(var) \ ++ (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard) +# define PTR_DEMANGLE(var) PTR_MANGLE(var) +# endif ++#else ++/* Pointer mangling is not yet supported for static libc on alpha. */ ++# ifndef __ASSEMBLER__ ++# define PTR_MANGLE(var) (void) (var) ++# define PTR_DEMANGLE(var) (void) (var) ++# endif +#endif + #endif /* _LINUX_ALPHA_SYSDEP_H */ ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/glibc-2.7-alpha_PTR_MANGLE_move-1.patch?r1=1.1&r2=1.2&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
