This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] alpha: Improve conditions under which PTR_MANGLE is defined


After 0b1f8e35640f5b3f7af11764ade3ff060211c309, we now have
a __pointer_chk_guard_local for the static libc.
---
 ports/ChangeLog.alpha             |  5 ++++
 ports/sysdeps/unix/alpha/sysdep.h | 52 ++++++++++++++++-----------------------
 2 files changed, 26 insertions(+), 31 deletions(-)

diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha
index 1b58cb8..218cfad 100644
--- a/ports/ChangeLog.alpha
+++ b/ports/ChangeLog.alpha
@@ -1,3 +1,8 @@
+2013-10-01  Richard Henderson  <rth@redhat.com>
+
+	* sysdeps/unix/alpha/sysdep.h (PTR_MANGLE): Improve conditions under
+	which it is defined.
+
 2013-09-20  Andreas Schwab  <schwab@linux-m68k.org>
 
 	* sysdeps/alpha/alphaev67/ffs.S (__ffs): Define as hidden.
diff --git a/ports/sysdeps/unix/alpha/sysdep.h b/ports/sysdeps/unix/alpha/sysdep.h
index d20bcd6..150a919 100644
--- a/ports/sysdeps/unix/alpha/sysdep.h
+++ b/ports/sysdeps/unix/alpha/sysdep.h
@@ -343,53 +343,43 @@ __LABEL(name)						\
 	   : : inline_syscall_clobbers);			\
 	_sc_ret = _sc_0, _sc_err = _sc_19;			\
 }
+#endif /* ASSEMBLER */
 
 /* Pointer mangling support.  Note that tls access is slow enough that
    we don't deoptimize things by placing the pointer check value there.  */
 
-#include <stdint.h>
-
-#if defined NOT_IN_libc && defined IS_IN_rtld
-# ifdef __ASSEMBLER__
+#ifdef __ASSEMBLER__
+# if defined NOT_IN_libc && defined IS_IN_rtld
 #  define PTR_MANGLE(dst, src, tmp)				\
 	ldah	tmp, __pointer_chk_guard_local($29) !gprelhigh;	\
 	ldq	tmp, __pointer_chk_guard_local(tmp) !gprellow;	\
 	xor	src, tmp, dst
 #  define PTR_MANGLE2(dst, src, tmp)				\
 	xor	src, tmp, dst
-#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
-#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
-# else
-extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
-#  define PTR_MANGLE(var)	\
-  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
-#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
-# endif
-#elif defined PIC
-# ifdef __ASSEMBLER__
+# elif defined SHARED
 #  define PTR_MANGLE(dst, src, tmp)		\
 	ldq	tmp, __pointer_chk_guard;	\
 	xor	src, tmp, dst
-#  define PTR_MANGLE2(dst, src, tmp)		\
+# else
+#  define PTR_MANGLE(dst, src, tmp)		\
+	ldq	tmp, __pointer_chk_guard_local;	\
 	xor	src, tmp, dst
-#  define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
-#  define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
+# endif
+# define PTR_MANGLE2(dst, src, tmp)		\
+	xor	src, tmp, dst
+# define PTR_DEMANGLE(dst, tmp)   PTR_MANGLE(dst, dst, tmp)
+# define PTR_DEMANGLE2(dst, tmp)  PTR_MANGLE2(dst, dst, tmp)
+#else
+# include <stdint.h>
+# if (defined NOT_IN_libc && defined IS_IN_rtld) \
+     || (!defined SHARED && (!defined NOT_IN_libc || defined IS_IN_libpthread))
+extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
+#  define PTR_MANGLE(var) \
+	(var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
 # else
 extern const uintptr_t __pointer_chk_guard attribute_relro;
-#  define PTR_MANGLE(var)	\
+#  define PTR_MANGLE(var) \
 	(var) = (__typeof(var)) ((uintptr_t) (var) ^ __pointer_chk_guard)
-#  define PTR_DEMANGLE(var)  PTR_MANGLE(var)
 # endif
-#else
-/* There exists generic C code that assumes that PTR_MANGLE is always
-   defined.  When generating code for the static libc, we don't have
-   __pointer_chk_guard defined.  Nor is there any place that would
-   initialize it if it were defined, so there's little point in doing
-   anything more than nothing.  */
-# ifndef __ASSEMBLER__
-#  define PTR_MANGLE(var)
-#  define PTR_DEMANGLE(var)
-# endif
-#endif
-
+# define PTR_DEMANGLE(var)  PTR_MANGLE(var)
 #endif /* ASSEMBLER */
-- 
1.8.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]