rseq-x86-thread-pointer.h (687B)
1/* SPDX-License-Identifier: LGPL-2.1-only OR MIT */ 2/* 3 * rseq-x86-thread-pointer.h 4 * 5 * (C) Copyright 2021 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com> 6 */ 7 8#ifndef _RSEQ_X86_THREAD_POINTER 9#define _RSEQ_X86_THREAD_POINTER 10 11#include <features.h> 12 13#ifdef __cplusplus 14extern "C" { 15#endif 16 17#if __GNUC_PREREQ (11, 1) 18static inline void *rseq_thread_pointer(void) 19{ 20 return __builtin_thread_pointer(); 21} 22#else 23static inline void *rseq_thread_pointer(void) 24{ 25 void *__result; 26 27# ifdef __x86_64__ 28 __asm__ ("mov %%fs:0, %0" : "=r" (__result)); 29# else 30 __asm__ ("mov %%gs:0, %0" : "=r" (__result)); 31# endif 32 return __result; 33} 34#endif /* !GCC 11 */ 35 36#ifdef __cplusplus 37} 38#endif 39 40#endif