Use the __seg_gs named address space qualifiers to cast reads of
the guard values in the TCB as %gs: prefixed addresses.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: H.J.Lu <hjl.tools@gmail.com>
Cc: Florian Weimer <fweimer@redhat.com>
Cc: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
#include <stdint.h>
#define STACK_CHK_GUARD \
- ({ uintptr_t x; asm ("movl %%gs:0x14, %0" : "=r" (x)); x; })
+ (*(uintptr_t __seg_gs *) offsetof (tcbhead_t, stack_guard))
#define POINTER_CHK_GUARD \
- ({ \
- uintptr_t x; \
- asm ("movl %%gs:%c1, %0" : "=r" (x) \
- : "i" (offsetof (tcbhead_t, pointer_guard))); \
- x; \
- })
+ (*(uintptr_t __seg_gs *) offsetof (tcbhead_t, pointer_guard))