| [bd88a5f] | 1 | Submitted By: Joe Ciccone <jciccone@gmail.com> | 
|---|
|  | 2 | Date: 2007-12-21 | 
|---|
|  | 3 | Initial Package Version: 2.7 | 
|---|
|  | 4 | Upstream Status: Reported | 
|---|
|  | 5 | Origin: http://sources.redhat.com/bugzilla/show_bug.cgi?id=5216 | 
|---|
|  | 6 | Description: Moves and fixes the PTR_MANGLE definitions. | 
|---|
|  | 7 |  | 
|---|
|  | 8 | --- glibc-2.7.orig/sysdeps/unix/alpha/sysdep.h | 
|---|
|  | 9 | +++ glibc-2.7/sysdeps/unix/alpha/sysdep.h | 
|---|
|  | 10 | @@ -397,42 +397,4 @@ | 
|---|
|  | 11 | _sc_ret = _sc_0, _sc_err = _sc_19;                      \ | 
|---|
|  | 12 | } | 
|---|
|  | 13 |  | 
|---|
|  | 14 | -/* Pointer mangling support.  Note that tls access is slow enough that | 
|---|
|  | 15 | -   we don't deoptimize things by placing the pointer check value there.  */ | 
|---|
|  | 16 | - | 
|---|
|  | 17 | -#include <stdint.h> | 
|---|
|  | 18 | - | 
|---|
|  | 19 | -#if defined NOT_IN_libc && defined IS_IN_rtld | 
|---|
|  | 20 | -# ifdef __ASSEMBLER__ | 
|---|
|  | 21 | -#  define PTR_MANGLE(dst, src, tmp)                            \ | 
|---|
|  | 22 | -       ldah    tmp, __pointer_chk_guard_local($29) !gprelhigh; \ | 
|---|
|  | 23 | -       ldq     tmp, __pointer_chk_guard_local(tmp) !gprellow;  \ | 
|---|
|  | 24 | -       xor     src, tmp, dst | 
|---|
|  | 25 | -#  define PTR_MANGLE2(dst, src, tmp)                           \ | 
|---|
|  | 26 | -       xor     src, tmp, dst | 
|---|
|  | 27 | -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp) | 
|---|
|  | 28 | -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp) | 
|---|
|  | 29 | -# else | 
|---|
|  | 30 | -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; | 
|---|
|  | 31 | -#  define PTR_MANGLE(var)      \ | 
|---|
|  | 32 | -  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) | 
|---|
|  | 33 | -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var) | 
|---|
|  | 34 | -# endif | 
|---|
|  | 35 | -#elif defined PIC | 
|---|
|  | 36 | -# ifdef __ASSEMBLER__ | 
|---|
|  | 37 | -#  define PTR_MANGLE(dst, src, tmp)            \ | 
|---|
|  | 38 | -       ldq     tmp, __pointer_chk_guard;       \ | 
|---|
|  | 39 | -       xor     src, tmp, dst | 
|---|
|  | 40 | -#  define PTR_MANGLE2(dst, src, tmp)           \ | 
|---|
|  | 41 | -       xor     src, tmp, dst | 
|---|
|  | 42 | -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp) | 
|---|
|  | 43 | -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp) | 
|---|
|  | 44 | -# else | 
|---|
|  | 45 | -extern uintptr_t __pointer_chk_guard attribute_relro; | 
|---|
|  | 46 | -#  define PTR_MANGLE(var)      \ | 
|---|
|  | 47 | -       (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard) | 
|---|
|  | 48 | -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var) | 
|---|
|  | 49 | -# endif | 
|---|
|  | 50 | -#endif | 
|---|
|  | 51 | - | 
|---|
|  | 52 | #endif /* ASSEMBLER */ | 
|---|
|  | 53 | --- glibc-2.7.orig/sysdeps/unix/sysv/linux/alpha/sysdep.h | 
|---|
|  | 54 | +++ glibc-2.7/sysdeps/unix/sysv/linux/alpha/sysdep.h | 
|---|
|  | 55 | @@ -98,4 +98,46 @@ | 
|---|
|  | 56 | INTERNAL_SYSCALL1(name, err_out, nr, args);                     \ | 
|---|
|  | 57 | }) | 
|---|
|  | 58 |  | 
|---|
|  | 59 | +/* Pointer mangling support.  Note that tls access is slow enough that | 
|---|
|  | 60 | +   we don't deoptimize things by placing the pointer check value there.  */ | 
|---|
|  | 61 | + | 
|---|
|  | 62 | +#if defined NOT_IN_libc && defined IS_IN_rtld | 
|---|
|  | 63 | +# ifdef __ASSEMBLER__ | 
|---|
|  | 64 | +#  define PTR_MANGLE(dst, src, tmp)                            \ | 
|---|
|  | 65 | +       ldah    tmp, __pointer_chk_guard_local($29) !gprelhigh; \ | 
|---|
|  | 66 | +       ldq     tmp, __pointer_chk_guard_local(tmp) !gprellow;  \ | 
|---|
|  | 67 | +       xor     src, tmp, dst | 
|---|
|  | 68 | +#  define PTR_MANGLE2(dst, src, tmp)                           \ | 
|---|
|  | 69 | +       xor     src, tmp, dst | 
|---|
|  | 70 | +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp) | 
|---|
|  | 71 | +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp) | 
|---|
|  | 72 | +# else | 
|---|
|  | 73 | +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; | 
|---|
|  | 74 | +#  define PTR_MANGLE(var)      \ | 
|---|
|  | 75 | +  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) | 
|---|
|  | 76 | +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var) | 
|---|
|  | 77 | +# endif | 
|---|
|  | 78 | +#elif defined PIC | 
|---|
|  | 79 | +# ifdef __ASSEMBLER__ | 
|---|
|  | 80 | +#  define PTR_MANGLE(dst, src, tmp)            \ | 
|---|
|  | 81 | +       ldq     tmp, __pointer_chk_guard;       \ | 
|---|
|  | 82 | +       xor     src, tmp, dst | 
|---|
|  | 83 | +#  define PTR_MANGLE2(dst, src, tmp)           \ | 
|---|
|  | 84 | +       xor     src, tmp, dst | 
|---|
|  | 85 | +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp) | 
|---|
|  | 86 | +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp) | 
|---|
|  | 87 | +# else | 
|---|
|  | 88 | +extern uintptr_t __pointer_chk_guard attribute_relro; | 
|---|
|  | 89 | +#  define PTR_MANGLE(var)      \ | 
|---|
|  | 90 | +       (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard) | 
|---|
|  | 91 | +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var) | 
|---|
|  | 92 | +# endif | 
|---|
|  | 93 | +#else | 
|---|
|  | 94 | +/* Pointer mangling is not yet supported for static libc on alpha.  */ | 
|---|
|  | 95 | +# ifndef __ASSEMBLER__ | 
|---|
|  | 96 | +#  define PTR_MANGLE(var)   (void) (var) | 
|---|
|  | 97 | +#  define PTR_DEMANGLE(var) (void) (var) | 
|---|
|  | 98 | +# endif | 
|---|
|  | 99 | +#endif | 
|---|
|  | 100 | + | 
|---|
|  | 101 | #endif /* _LINUX_ALPHA_SYSDEP_H */ | 
|---|