1e49d1c41SMathieu Desnoyers /* SPDX-License-Identifier: LGPL-2.1-only OR MIT */ 2e49d1c41SMathieu Desnoyers /* 3e49d1c41SMathieu Desnoyers * rseq-generic-thread-pointer.h 4e49d1c41SMathieu Desnoyers * 5e49d1c41SMathieu Desnoyers * (C) Copyright 2021 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com> 6e49d1c41SMathieu Desnoyers */ 7e49d1c41SMathieu Desnoyers 8e49d1c41SMathieu Desnoyers #ifndef _RSEQ_GENERIC_THREAD_POINTER 9e49d1c41SMathieu Desnoyers #define _RSEQ_GENERIC_THREAD_POINTER 10e49d1c41SMathieu Desnoyers 11e49d1c41SMathieu Desnoyers #ifdef __cplusplus 12e49d1c41SMathieu Desnoyers extern "C" { 13e49d1c41SMathieu Desnoyers #endif 14e49d1c41SMathieu Desnoyers 15e49d1c41SMathieu Desnoyers /* Use gcc builtin thread pointer. */ rseq_thread_pointer(void)16e49d1c41SMathieu Desnoyersstatic inline void *rseq_thread_pointer(void) 17e49d1c41SMathieu Desnoyers { 18e49d1c41SMathieu Desnoyers return __builtin_thread_pointer(); 19e49d1c41SMathieu Desnoyers } 20e49d1c41SMathieu Desnoyers 21e49d1c41SMathieu Desnoyers #ifdef __cplusplus 22e49d1c41SMathieu Desnoyers } 23e49d1c41SMathieu Desnoyers #endif 24e49d1c41SMathieu Desnoyers 25e49d1c41SMathieu Desnoyers #endif 26