VSF Documented
setjmp.h
Go to the documentation of this file.
1#ifndef __SIMPLE_LIBC_SETJMP_H__
2#define __SIMPLE_LIBC_SETJMP_H__
3
5
6// for VSF_ARCH_SETJMP and VSF_ARCH_LONGJMP
7#include "hal/arch/vsf_arch.h"
8// for ALIGN and stdint.h
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#ifndef __SIMPLE_LIBC_SETJMP_VPLT_ONLY__
16# if defined(__CPU_X64__)
17
18typedef struct {
19 uint64_t part[2];
20} VSF_CAL_ALIGN(16) setjmp_float128;
21typedef setjmp_float128 jmp_buf[16];
22
23# elif defined(__CPU_ARM__)
24typedef unsigned long long int jmp_buf[16];
25# elif defined(__CPU_RV__) || defined(__CPU_RISCV__)
26// 16 words, matches the gp-aware rv_setjmp in hal/arch/rv
27typedef unsigned long int jmp_buf[16];
28# else
29# error not supported, do not add to path, use setjmp from libc instead
30# endif
31#endif
32
33#if VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
40# ifndef __VSF_APPLET__
42# endif
43#endif
44
45#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_LIBC_SETJMP_LIB__))\
46 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
47
48#ifndef VSF_LINUX_APPLET_LIBC_SETJMP_VPLT
49# if VSF_LINUX_USE_APPLET == ENABLED
50# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
51 ((vsf_linux_libc_setjmp_vplt_t *)(VSF_LINUX_APPLET_VPLT->libc_setjmp_vplt))
52# else
53# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
54 ((vsf_linux_libc_setjmp_vplt_t *)vsf_vplt((void *)0))
55# endif
56#endif
57
58#define VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(__NAME) \
59 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __NAME)
60#define VSF_LINUX_APPLET_LIBC_SETJMP_IMP(...) \
61 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __VA_ARGS__)
62
63VSF_LINUX_APPLET_LIBC_SETJMP_IMP(setjmp, int, jmp_buf env) {
64 return VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(setjmp)(env);
65}
66VSF_LINUX_APPLET_LIBC_SETJMP_IMP(longjmp, void, jmp_buf env, int val) {
67 VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(longjmp)(env, val);
68}
69
70#else
71
72#if defined(VSF_ARCH_SETJMP) && !defined(__VSF_APPLET__)
73# undef setjmp
74# define setjmp VSF_ARCH_SETJMP
75#endif
76int setjmp(jmp_buf env);
77
78#if defined(VSF_ARCH_LONGJMP) && !defined(__VSF_APPLET__)
79# undef longjmp
80# define longjmp VSF_ARCH_LONGJMP
81#endif
82void longjmp(jmp_buf env, int val);
83
84#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_LIBC_SETJMP
85
86#undef __SIMPLE_LIBC_SETJMP_VPLT_ONLY__
87
88#ifdef __cplusplus
89}
90#endif
91
92#endif
#define VSF_CAL_ALIGN(__N)
Definition __compiler.h:187
unsigned long long uint64_t
Definition stdint.h:11
Definition setjmp.h:34
vsf_vplt_info_t info
Definition setjmp.h:35
void longjmp(jmp_buf env, int val)
int setjmp(jmp_buf env)
struct vsf_linux_libc_setjmp_vplt_t vsf_linux_libc_setjmp_vplt_t
__VSF_VPLT_DECORATOR__ vsf_linux_libc_setjmp_vplt_t vsf_linux_libc_setjmp_vplt
Definition vsf_linux_glibc.c:61
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
Generated from commit: vsfteam/vsf@4327394