* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and
authorUlrich Drepper <drepper@redhat.com>
Sun, 18 Dec 2005 16:59:55 +0000 (16:59 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 18 Dec 2005 16:59:55 +0000 (16:59 +0000)
PTR_DEMANGLE for C code in libc.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.

ChangeLog
sysdeps/unix/sysv/linux/i386/sysdep.h
sysdeps/unix/sysv/linux/x86_64/sysdep.h

index e992f38..70b6515 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-12-18  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/i386/sysdep.h: Define PTR_MANGLE and
+       PTR_DEMANGLE for C code in libc.
+       * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
+
 2005-12-17  Ulrich Drepper  <drepper@redhat.com>
 
        * elf/Versions [GLIBC_PRIVATE]: Export __pointer_chk_guard if defined.
index 929c6e5..cb57679 100644 (file)
@@ -565,8 +565,17 @@ asm (".L__X'%ebx = 1\n\t"
    earlier than the descriptor is initialized.  Using a global variable
    is too complicated here since we have no PC-relative addressing mode.  */
 #else
-# define PTR_MANGLE(reg)       xorl %gs:POINTER_GUARD, reg
-# define PTR_DEMANGLE(reg)     PTR_MANGLE (reg)
+# ifdef __ASSEMBLER__
+#  define PTR_MANGLE(reg)      xorl %gs:POINTER_GUARD, reg
+#  define PTR_DEMANGLE(reg)    PTR_MANGLE (reg)
+# else
+#  define PTR_MANGLE(var)      asm ("xorl %%gs:%c2, %0"                      \
+                                    : "=r" (var)                             \
+                                    : "0" (var),                             \
+                                      "i" (offsetof (tcbhead_t,              \
+                                                     pointer_guard)))
+#  define PTR_DEMANGLE(var)    PTR_MANGLE (var)
+# endif
 #endif
 
 #endif /* linux/i386/sysdep.h */
index 2ea69c3..bb0b604 100644 (file)
 #if defined NOT_IN_libc && defined IS_IN_rtld
 /* We cannot use the thread descriptor because in ld.so we use setjmp
    earlier than the descriptor is initialized.  */
-# define PTR_MANGLE(reg)       xorq __pointer_chk_guard_local(%rip), reg
-# define PTR_DEMANGLE(reg)     PTR_MANGLE (reg)
+# ifdef __ASSEMBLER__
+#  define PTR_MANGLE(reg)      xorq __pointer_chk_guard_local(%rip), reg
+#  define PTR_DEMANGLE(reg)    PTR_MANGLE (reg)
+# else
+#  error "Define these if necessary"
+# endif
 #else
-# define PTR_MANGLE(reg)       xorq %fs:POINTER_GUARD, reg
-# define PTR_DEMANGLE(reg)     PTR_MANGLE (reg)
+# ifdef __ASSEMBLER__
+#  define PTR_MANGLE(reg)      xorq %fs:POINTER_GUARD, reg
+#  define PTR_DEMANGLE(reg)    PTR_MANGLE (reg)
+# else
+#  define PTR_MANGLE(var)      asm ("xorq %%fs:%c2, %0"                      \
+                                    : "=r" (var)                             \
+                                    : "0" (var),                             \
+                                      "i" (offsetof (tcbhead_t,              \
+                                                     pointer_guard)))
+#  define PTR_DEMANGLE(var)    PTR_MANGLE (var)
+# endif
 #endif
 
 #endif /* linux/x86_64/sysdep.h */