patches/glibc/2.6.1/200-alpha-ptr_mangle.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 --- glibc-2.6.1.orig/sysdeps/unix/alpha/sysdep.h
     2 +++ glibc-2.6.1/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.1.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h
    47 +++ glibc-2.6.1/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 */