20#include <l4/util/arch/thread.h>
55#ifndef L4UTIL_THREAD_FUNC
74# define __L4UTIL_THREAD_FUNC(name) void L4_NORETURN name(void)
75# define L4UTIL_THREAD_FUNC(name) __L4UTIL_THREAD_FUNC(name)
76# define __L4UTIL_THREAD_STATIC_FUNC(name) static L4_NORETURN void name(void)
77# define L4UTIL_THREAD_STATIC_FUNC(name) __L4UTIL_THREAD_STATIC_FUNC(name)
80#ifndef L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR
81# define L4UTIL_THREAD_CXX_FUNC_HELPER_PROTO_ATTR
83#ifndef L4UTIL_THREAD_CXX_FUNC_INTERRUPT_HELPER_PROTO_ATTR
84# define L4UTIL_THREAD_CXX_FUNC_INTERRUPT_HELPER_PROTO_ATTR
102#define _L4UTIL_THREAD_CXX_FUNC_IMPL_(suffix, class, fn_name, from_asm_name, ...)\
103 asm (".global " L4_stringify(fn_name ## _stub) "\n" \
104 ".type " L4_stringify(fn_name ## _stub) " STT_FUNC \n" \
105 L4_stringify(fn_name ## _stub) ": \n" \
106 L4UTIL_THREAD_CXX_FUNC_IMPL ## suffix ## _STUB(from_asm_name) \
109 [[noreturn]] void __attribute__((used)) class::from_asm_name(__VA_ARGS__)
111#define _L4UTIL_THREAD_CXX_FUNC_IMPL(suffix, class, fn_name, ...) \
112 _L4UTIL_THREAD_CXX_FUNC_IMPL_(suffix, class, fn_name, fn_name ## _from_asm, \
115#ifndef L4UTIL_THREAD_CXX_FUNC_PROTO
127# define L4UTIL_THREAD_CXX_FUNC_PROTO(fn_name, ...) \
128 [[noreturn]] static void fn_name(__VA_ARGS__) \
129 asm (L4_stringify(fn_name ## _stub)); \
130 [[noreturn]] static void fn_name ## _from_asm(__VA_ARGS__) \
131 asm (L4_stringify(fn_name ## _from_asm))
169#ifdef L4UTIL_THREAD_CXX_FUNC_IMPL_STUB
171# define L4UTIL_THREAD_CXX_FUNC_IMPL(class, fn_name, ...) \
172 _L4UTIL_THREAD_CXX_FUNC_IMPL(, class, fn_name, ##__VA_ARGS__)
176# define L4UTIL_THREAD_CXX_FUNC_IMPL(class, fn_name, ...) \
177 [[noreturn]] void class::fn_name(__VA_ARGS__)
190#ifndef L4UTIL_THREAD_CXX_FUNC_IMPL_INTERRUPT_STUB
191# error architecture-specific L4UTIL_THREAD_CXX_FUNC_IMPL_INTERRUPT_STUB missing
194#define L4UTIL_THREAD_CXX_FUNC_INTERRUPT_IMPL(class, fn_name, ...) \
195 _L4UTIL_THREAD_CXX_FUNC_IMPL(_INTERRUPT, class, fn_name, ##__VA_ARGS__)
L4 compiler related defines.
unsigned long l4_umword_t
Unsigned machine word.
unsigned long l4_cap_idx_t
Capability selector type.
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
#define L4_CV
Define calling convention.
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
#define L4_BEGIN_DECLS
Start section with C types and functions.
#define L4_END_DECLS
End section with C types and functions.
Common L4 ABI Data Types.
Scheduler object functions.