L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
thread.h
1/*
2 * Copyright (C) 2026 Kernkonzept GmbH.
3 * Author(s): Jan Klötzke <jan.kloetzke@kernkonzept.com>
4 * Frank Mehnert <frank.mehnert@kernkonzept.com>
5 *
6 * License: see LICENSE.spdx (in this directory or the directories above)
7 */
8#pragma once
9
10#define L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR \
11 __attribute__((regparm(3)))
12
13#define L4UTIL_THREAD_CXX_FUNC_PROTO(fn_name, ...) \
14 [[noreturn]] static void fn_name(__VA_ARGS__) \
15 asm (L4_stringify(fn_name ## _stub)) \
16 L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR; \
17 [[noreturn]] static void fn_name ## _from_asm(__VA_ARGS__) \
18 asm (L4_stringify(fn_name ## _from_asm)) \
19 L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR
20
21#define L4UTIL_THREAD_CXX_FUNC_INTERRUPT_HELPER_PROTO_ATTR \
22 L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR
23
24/* Similar to signal handler: Align stack pointer. */
25#define L4UTIL_THREAD_CXX_FUNC_IMPL_INTERRUPT_STUB(from_asm_name) \
26 "and $~0xf, %esp \n" \
27 "cld \n" \
28 "call " L4_stringify(from_asm_name) "\n"