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# else
26# error not supported, do not add to path, use setjmp from libc instead
27# endif
28#endif
29
30#if VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
33
37# ifndef __VSF_APPLET__
39# endif
40#endif
41
42#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_LIBC_SETJMP_LIB__))\
43 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
44
45#ifndef VSF_LINUX_APPLET_LIBC_SETJMP_VPLT
46# if VSF_LINUX_USE_APPLET == ENABLED
47# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
48 ((vsf_linux_libc_setjmp_vplt_t *)(VSF_LINUX_APPLET_VPLT->libc_setjmp_vplt))
49# else
50# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
51 ((vsf_linux_libc_setjmp_vplt_t *)vsf_vplt((void *)0))
52# endif
53#endif
54
55#define VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(__NAME) \
56 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __NAME)
57#define VSF_LINUX_APPLET_LIBC_SETJMP_IMP(...) \
58 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __VA_ARGS__)
59
60VSF_LINUX_APPLET_LIBC_SETJMP_IMP(setjmp, int, jmp_buf env) {
61 return VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(setjmp)(env);
62}
63VSF_LINUX_APPLET_LIBC_SETJMP_IMP(longjmp, void, jmp_buf env, int val) {
64 VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(longjmp)(env, val);
65}
66
67#else
68
69#if defined(VSF_ARCH_SETJMP) && !defined(__VSF_APPLET__)
70# undef setjmp
71# define setjmp VSF_ARCH_SETJMP
72#endif
73int setjmp(jmp_buf env);
74
75#if defined(VSF_ARCH_LONGJMP) && !defined(__VSF_APPLET__)
76# undef longjmp
77# define longjmp VSF_ARCH_LONGJMP
78#endif
79void longjmp(jmp_buf env, int val);
80
81#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_LIBC_SETJMP
82
83#undef __SIMPLE_LIBC_SETJMP_VPLT_ONLY__
84
85#ifdef __cplusplus
86}
87#endif
88
89#endif
#define VSF_CAL_ALIGN(__N)
Definition __compiler.h:184
unsigned long long uint64_t
Definition stdint.h:11
Definition setjmp.h:31
vsf_vplt_info_t info
Definition setjmp.h:32
void longjmp(jmp_buf env, int val)
int setjmp(jmp_buf env)
__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@85be636