patches/glibc/2.6/200-alpha-ptr_mangle.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.
     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 */