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 Desnoyers static 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