diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/sysdep.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/sysdep.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 929c6e5191..cb5767955c 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -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 */ |