patches/glibc/2.6/200-alpha-ptr_mangle.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Wed Dec 26 13:30:51 2012 +0100 (2012-12-26)
changeset 3145 598880dab0f3
permissions -rw-r--r--
libc/glibc: both glibc and eglibc have pkgversion and bugurl

Well, all eglibc version we support do, and latest glibc versions
we support do.

Not all glibc versions do, but older versions simply ignore the
unrecognised ./configure flags.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
     1 --- glibc-2.6.orig/sysdeps/unix/alpha/sysdep.h
     2 +++ glibc-2.6/sysdeps/unix/alpha/sysdep.h
     3 @@ -397,42 +397,4 @@
     4  	_sc_ret = _sc_0, _sc_err = _sc_19;			\
     5  }
     6  
     7 -/* Pointer mangling support.  Note that tls access is slow enough that
     8 -   we don't deoptimize things by placing the pointer check value there.  */
     9 -
    10 -#include <stdint.h>
    11 -
    12 -#if defined NOT_IN_libc && defined IS_IN_rtld
    13 -# ifdef __ASSEMBLER__
    14 -#  define PTR_MANGLE(dst, src, tmp)				\
    15 -	ldah	tmp, __pointer_chk_guard_local($29) !gprelhigh;	\
    16 -	ldq	tmp, __pointer_chk_guard_local(tmp) !gprellow;	\
    17 -	xor	src, tmp, dst
    18 -#  define PTR_MANGLE2(dst, src, tmp)				\
    19 -	xor	src, tmp, dst
    20 -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    21 -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    22 -# else
    23 -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
    24 -#  define PTR_MANGLE(var)	\
    25 -  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
    26 -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    27 -# endif
    28 -#elif defined PIC
    29 -# ifdef __ASSEMBLER__
    30 -#  define PTR_MANGLE(dst, src, tmp)		\
    31 -	ldq	tmp, __pointer_chk_guard;	\
    32 -	xor	src, tmp, dst
    33 -#  define PTR_MANGLE2(dst, src, tmp)		\
    34 -	xor	src, tmp, dst
    35 -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    36 -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    37 -# else
    38 -extern uintptr_t __pointer_chk_guard attribute_relro;
    39 -#  define PTR_MANGLE(var)	\
    40 -	(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
    41 -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    42 -# endif
    43 -#endif
    44 -
    45  #endif /* ASSEMBLER */
    46 --- glibc-2.6.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h
    47 +++ glibc-2.6/sysdeps/unix/sysv/linux/alpha/sysdep.h
    48 @@ -29,6 +29,8 @@
    49  /* There is some commonality.  */
    50  #include <sysdeps/unix/alpha/sysdep.h>
    51  
    52 +#include <tls.h>
    53 +
    54  /* For Linux we can use the system call table in the header file
    55  	/usr/include/asm/unistd.h
    56     of the kernel.  But these symbols do not follow the SYS_* syntax
    57 @@ -96,4 +96,46 @@
    58  	INTERNAL_SYSCALL1(name, err_out, nr, args);			\
    59  })
    60  
    61 +/* Pointer mangling support.  Note that tls access is slow enough that
    62 +   we don't deoptimize things by placing the pointer check value there.  */
    63 +
    64 +#if defined NOT_IN_libc && defined IS_IN_rtld
    65 +# ifdef __ASSEMBLER__
    66 +#  define PTR_MANGLE(dst, src, tmp)				\
    67 +	ldah	tmp, __pointer_chk_guard_local($29) !gprelhigh;	\
    68 +	ldq	tmp, __pointer_chk_guard_local(tmp) !gprellow;	\
    69 +	xor	src, tmp, dst
    70 +#  define PTR_MANGLE2(dst, src, tmp)				\
    71 +	xor	src, tmp, dst
    72 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    73 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    74 +# else
    75 +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
    76 +#  define PTR_MANGLE(var)	\
    77 +  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
    78 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    79 +# endif
    80 +#elif defined PIC
    81 +# ifdef __ASSEMBLER__
    82 +#  define PTR_MANGLE(dst, src, tmp)		\
    83 +	ldq	tmp, __pointer_chk_guard;	\
    84 +	xor	src, tmp, dst
    85 +#  define PTR_MANGLE2(dst, src, tmp)		\
    86 +	xor	src, tmp, dst
    87 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    88 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    89 +# else
    90 +extern uintptr_t __pointer_chk_guard attribute_relro;
    91 +#  define PTR_MANGLE(var)	\
    92 +	(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
    93 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    94 +# endif
    95 +#else
    96 +/* Pointer mangling is not yet supported for static libc on alpha.  */
    97 +# ifndef __ASSEMBLER__
    98 +#  define PTR_MANGLE(var)   (void) (var)
    99 +#  define PTR_DEMANGLE(var) (void) (var)
   100 +# endif
   101 +#endif
   102 +
   103  #endif /* _LINUX_ALPHA_SYSDEP_H */