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#ifndef __SIMPLE_LIBC_SETJMP_VPLT_ONLY__
12# if defined(__CPU_X64__)
13
14typedef struct {
15 uint64_t part[2];
16} VSF_CAL_ALIGN(16) setjmp_float128;
17typedef setjmp_float128 jmp_buf[16];
18
19# elif defined(__CPU_ARM__)
20typedef unsigned long long int jmp_buf[16];
21# else
22# error not supported, do not add to path, use setjmp from libc instead
23# endif
24#endif
25
26#if VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
29
33# ifndef __VSF_APPLET__
35# endif
36#endif
37
38#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_LIBC_SETJMP_LIB__))\
39 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_LIBC_SETJMP == ENABLED
40
41#ifndef VSF_LINUX_APPLET_LIBC_SETJMP_VPLT
42# if VSF_LINUX_USE_APPLET == ENABLED
43# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
44 ((vsf_linux_libc_setjmp_vplt_t *)(VSF_LINUX_APPLET_VPLT->libc_setjmp_vplt))
45# else
46# define VSF_LINUX_APPLET_LIBC_SETJMP_VPLT \
47 ((vsf_linux_libc_setjmp_vplt_t *)vsf_vplt((void *)0))
48# endif
49#endif
50
51#define VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(__NAME) \
52 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __NAME)
53#define VSF_LINUX_APPLET_LIBC_SETJMP_IMP(...) \
54 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_LIBC_SETJMP_VPLT, __VA_ARGS__)
55
56VSF_LINUX_APPLET_LIBC_SETJMP_IMP(setjmp, int, jmp_buf env) {
57 return VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(setjmp)(env);
58}
59VSF_LINUX_APPLET_LIBC_SETJMP_IMP(longjmp, void, jmp_buf env, int val) {
60 VSF_LINUX_APPLET_LIBC_SETJMP_ENTRY(longjmp)(env, val);
61}
62
63#else
64
65#if defined(VSF_ARCH_SETJMP) && !defined(__VSF_APPLET__)
66# undef setjmp
67# define setjmp VSF_ARCH_SETJMP
68#endif
69int setjmp(jmp_buf env);
70
71#if defined(VSF_ARCH_LONGJMP) && !defined(__VSF_APPLET__)
72# undef longjmp
73# define longjmp VSF_ARCH_LONGJMP
74#endif
75void longjmp(jmp_buf env, int val);
76
77#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_LIBC_SETJMP
78
79#undef __SIMPLE_LIBC_SETJMP_VPLT_ONLY__
80
81#endif
#define VSF_CAL_ALIGN(__N)
Definition __compiler.h:179
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:56
unsigned long long uint64_t
Definition stdint.h:11
Definition setjmp.h:27
vsf_vplt_info_t info
Definition setjmp.h:28
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93