chiark / gitweb /
eglibc (2.11.3-4+deb6u3) squeeze-lts; urgency=medium
[eglibc.git] / debian / patches / alpha / submitted-PTR_MANGLE.diff
1 ---
2  ports/sysdeps/unix/alpha/sysdep.h            |   38 ------------------------
3  ports/sysdeps/unix/sysv/linux/alpha/sysdep.h |   42 +++++++++++++++++++++++++++
4  2 files changed, 42 insertions(+), 38 deletions(-)
5
6 --- a/ports/sysdeps/unix/alpha/sysdep.h
7 +++ b/ports/sysdeps/unix/alpha/sysdep.h
8 @@ -397,42 +397,4 @@
9         _sc_ret = _sc_0, _sc_err = _sc_19;                      \
10  }
11  
12 -/* Pointer mangling support.  Note that tls access is slow enough that
13 -   we don't deoptimize things by placing the pointer check value there.  */
14 -
15 -#include <stdint.h>
16 -
17 -#if defined NOT_IN_libc && defined IS_IN_rtld
18 -# ifdef __ASSEMBLER__
19 -#  define PTR_MANGLE(dst, src, tmp)                            \
20 -       ldah    tmp, __pointer_chk_guard_local($29) !gprelhigh; \
21 -       ldq     tmp, __pointer_chk_guard_local(tmp) !gprellow;  \
22 -       xor     src, tmp, dst
23 -#  define PTR_MANGLE2(dst, src, tmp)                           \
24 -       xor     src, tmp, dst
25 -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
26 -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
27 -# else
28 -extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
29 -#  define PTR_MANGLE(var)      \
30 -  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
31 -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
32 -# endif
33 -#elif defined PIC
34 -# ifdef __ASSEMBLER__
35 -#  define PTR_MANGLE(dst, src, tmp)            \
36 -       ldq     tmp, __pointer_chk_guard;       \
37 -       xor     src, tmp, dst
38 -#  define PTR_MANGLE2(dst, src, tmp)           \
39 -       xor     src, tmp, dst
40 -#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
41 -#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
42 -# else
43 -extern uintptr_t __pointer_chk_guard attribute_relro;
44 -#  define PTR_MANGLE(var)      \
45 -       (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
46 -#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
47 -# endif
48 -#endif
49 -
50  #endif /* ASSEMBLER */
51 --- a/ports/sysdeps/unix/sysv/linux/alpha/sysdep.h
52 +++ b/ports/sysdeps/unix/sysv/linux/alpha/sysdep.h
53 @@ -98,4 +98,46 @@
54         INTERNAL_SYSCALL1(name, err_out, nr, args);                     \
55  })
56  
57 +/* Pointer mangling support.  Note that tls access is slow enough that
58 +   we don't deoptimize things by placing the pointer check value there.  */
59 +
60 +#if defined NOT_IN_libc && defined IS_IN_rtld
61 +# ifdef __ASSEMBLER__
62 +#  define PTR_MANGLE(dst, src, tmp)                            \
63 +       ldah    tmp, __pointer_chk_guard_local($29) !gprelhigh; \
64 +       ldq     tmp, __pointer_chk_guard_local(tmp) !gprellow;  \
65 +       xor     src, tmp, dst
66 +#  define PTR_MANGLE2(dst, src, tmp)                           \
67 +       xor     src, tmp, dst
68 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
69 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
70 +# else
71 +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
72 +#  define PTR_MANGLE(var)      \
73 +  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
74 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
75 +# endif
76 +#elif defined PIC
77 +# ifdef __ASSEMBLER__
78 +#  define PTR_MANGLE(dst, src, tmp)            \
79 +       ldq     tmp, __pointer_chk_guard;       \
80 +       xor     src, tmp, dst
81 +#  define PTR_MANGLE2(dst, src, tmp)           \
82 +       xor     src, tmp, dst
83 +#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
84 +#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
85 +# else
86 +extern uintptr_t __pointer_chk_guard attribute_relro;
87 +#  define PTR_MANGLE(var)      \
88 +       (var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
89 +#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
90 +# endif
91 +#else
92 +/* Pointer mangling is not yet supported for static libc on alpha.  */
93 +# ifndef __ASSEMBLER__
94 +#  define PTR_MANGLE(var)   (void) (var)
95 +#  define PTR_DEMANGLE(var) (void) (var)
96 +# endif
97 +#endif
98 +
99  #endif /* _LINUX_ALPHA_SYSDEP_H */