patches/glibc/2.7/210-alpha-ptr_mangle.patch
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
parent 744 4bf8448536d5
permissions -rw-r--r--
arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 --- glibc-2.7.orig/sysdeps/unix/alpha/sysdep.h
     2 +++ glibc-2.7/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.7.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h
    47 +++ glibc-2.7/sysdeps/unix/sysv/linux/alpha/sysdep.h
    48 @@ -98,4 +98,46 @@
    49  	INTERNAL_SYSCALL1(name, err_out, nr, args);			\
    50  })
    51  
    52 +/* Pointer mangling support.  Note that tls access is slow enough that
    53 +   we don't deoptimize things by placing the pointer check value there.  */
    54 +
    55 +#if defined NOT_IN_libc && defined IS_IN_rtld
    56 +# ifdef __ASSEMBLER__
    57 +#  define PTR_MANGLE(dst, src, tmp)				\
    58 +	ldah	tmp, __pointer_chk_guard_local($29) !gprelhigh;	\
    59 +	ldq	tmp, __pointer_chk_guard_local(tmp) !gprellow;	\
    60 +	xor	src, tmp, dst
    61 +#  define PTR_MANGLE2(dst, src, tmp)				\
    62 +	xor	src, tmp, dst
    63 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    64 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    65 +# else
    66 +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
    67 +#  define PTR_MANGLE(var)	\
    68 +  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
    69 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    70 +# endif
    71 +#elif defined PIC
    72 +# ifdef __ASSEMBLER__
    73 +#  define PTR_MANGLE(dst, src, tmp)		\
    74 +	ldq	tmp, __pointer_chk_guard;	\
    75 +	xor	src, tmp, dst
    76 +#  define PTR_MANGLE2(dst, src, tmp)		\
    77 +	xor	src, tmp, dst
    78 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
    79 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
    80 +# else
    81 +extern uintptr_t __pointer_chk_guard attribute_relro;
    82 +#  define PTR_MANGLE(var)	\
    83 +	(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
    84 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
    85 +# endif
    86 +#else
    87 +/* Pointer mangling is not yet supported for static libc on alpha.  */
    88 +# ifndef __ASSEMBLER__
    89 +#  define PTR_MANGLE(var)   (void) (var)
    90 +#  define PTR_DEMANGLE(var) (void) (var)
    91 +# endif
    92 +#endif
    93 +
    94  #endif /* _LINUX_ALPHA_SYSDEP_H */