VSF Documented
vsf_linux.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_LINUX_INTERNAL_H__
19#define __VSF_LINUX_INTERNAL_H__
20
21/*============================ INCLUDES ======================================*/
22
23// avoid to include vsf.h, include necessary headers only
24//#include "vsf.h"
25
26#include "kernel/vsf_kernel.h"
27
28#include "./vsf_linux_cfg.h"
29
30#if VSF_USE_LINUX == ENABLED
31
32#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED
33# include "./include/signal.h"
34# include "./include/dirent.h"
35# include "./include/termios.h"
36# include "./include/sys/time.h"
37# include "./include/sys/reent.h"
38#else
39# include <signal.h>
40# include <dirent.h>
41# include <termios.h>
42# include <sys/time.h>
43# include <sys/reent.h>
44#endif
45
47
48#if defined(__VSF_LINUX_CLASS_IMPLEMENT)
49# define __VSF_CLASS_IMPLEMENT__
50#elif defined(__VSF_LINUX_CLASS_INHERIT__)
51# define __VSF_CLASS_INHERIT__
52#endif
53
54#include "utilities/ooc_class.h"
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60/*============================ MACROS ========================================*/
61
62#if VSF_KERNEL_CFG_EDA_SUPPORT_ON_TERMINATE != ENABLED
63# error VSF_KERNEL_CFG_EDA_SUPPORT_ON_TERMINATE MUST be enabled to use vsf_linux
64#endif
65
66#if VSF_USE_SIMPLE_STREAM != ENABLED
67# error VSF_USE_SIMPLE_STREAM MUST be enabled to use vsf_linux
68#endif
69
70#if VSF_USE_HEAP != ENABLED
71# error VSF_USE_HEAP MUST be enabled to use vsf_linux
72#endif
73
74#ifndef VSF_LINUX_CFG_STACKSIZE
75# if defined(VSF_KERNEL_CFG_THREAD_STACK_PAGE_SIZE) && defined(VSF_KERNEL_CFG_THREAD_STACK_GUARDIAN_SIZE)
76# if (VSF_KERNEL_CFG_THREAD_STACK_PAGE_SIZE + VSF_KERNEL_CFG_THREAD_STACK_GUARDIAN_SIZE) < 1024
77# define VSF_LINUX_CFG_STACKSIZE 1024
78# else
79# define VSF_LINUX_CFG_STACKSIZE (VSF_KERNEL_CFG_THREAD_STACK_PAGE_SIZE + VSF_KERNEL_CFG_THREAD_STACK_GUARDIAN_SIZE)
80# endif
81# else
82# define VSF_LINUX_CFG_STACKSIZE 1024
83# endif
84#endif
85#if VSF_LINUX_CFG_STACKSIZE > 0xFFFF
86# if VSF_KERNEL_CFG_THREAD_STACK_LARGE != ENABLED
87# error stacks should be 16-bit if VSF_KERNEL_CFG_THREAD_STACK_LARGE is not enabled
88# endif
89#endif
90#if (VSF_LINUX_CFG_STACKSIZE < (VSF_KERNEL_CFG_THREAD_STACK_PAGE_SIZE + VSF_KERNEL_CFG_THREAD_STACK_GUARDIAN_SIZE))\
91 || (VSF_LINUX_CFG_STACKSIZE & (VSF_KERNEL_CFG_THREAD_STACK_PAGE_SIZE - 1))
92# error invalid VSF_LINUX_CFG_STACKSIZE
93#endif
94
95/*============================ MACROFIED FUNCTIONS ===========================*/
96
97#define vsf_linux_thread_get_priv(__thread) (void *)(&(((vsf_linux_thread_t *)(__thread))[1]))
98
99/*============================ TYPES =========================================*/
100
101// linux kernel events
102
103enum {
106};
107
110
112 int argc;
113 char const **argv;
115
116typedef int (*vsf_linux_main_entry_t)(int, char **);
118
119typedef struct vsf_linux_thread_op_t {
121 void (*on_run)(vsf_thread_cb_t *cb);
124
129
130typedef struct vsf_linux_key_t {
134
135#if VSF_LINUX_CFG_PLS_NUM > 0 || VSF_LINUX_CFG_TLS_NUM > 0
136typedef struct vsf_linux_localstorage_t {
137 void *data;
138 void (*destructor)(void *data);
139} vsf_linux_localstorage_t;
140
141typedef struct vsf_linux_dynlib_mod_t {
142 int *lib_idx;
143 uint16_t mod_idx;
144 uint16_t module_num;
145 uint32_t bss_size;
146 uint32_t mod_size;
147 void (*init)(void *ctx);
148} vsf_linux_dynlib_mod_t;
149
150typedef struct vsf_linux_dynlib_t {
151 uint16_t module_num;
152 uint32_t bss_size;
153 uint32_t bss_brk;
154 int * lib_idx;
155 // just make iar happy, which does not support zla
156 void * modules[1];
157} vsf_linux_dynlib_t;
158#endif
159
161 public_member(
162 implement(vsf_trig_t)
163 )
164#if VSF_LINUX_CFG_SUPPORT_SIG == ENABLED
165 private_member(
166 vsf_dlist_node_t node;
167 vsf_linux_process_t *pending_process;
168 int sig;
169 )
170#endif
171};
172
173#if VSF_LINUX_CFG_PLS_NUM > 0
174dcl_vsf_bitmap(vsf_linux_pls_bitmap, VSF_LINUX_CFG_PLS_NUM);
175#endif
176
177#if VSF_LINUX_CFG_TLS_NUM > 0
178dcl_vsf_bitmap(vsf_linux_tls_bitmap, VSF_LINUX_CFG_TLS_NUM);
179#endif
180
182 public_member(
183 implement(vsf_thread_t)
184 implement(vsf_thread_cb_t)
185 const vsf_linux_thread_op_t *op;
186
187 struct _reent __reent;
188 // for gethostbyname, etc
189 int __h_errno;
191
192 protected_member(
193 vsf_dlist_node_t thread_node;
194 pid_t pid_exited; // used in wait
195 int retval;
196 pid_t tid;
197 vsf_linux_thread_t *thread_pending;
198#if VSF_LINUX_CFG_SUPPORT_SIG == ENABLED
199 vsf_linux_trigger_t *trigger_pending;
200#endif
201#if VSF_LINUX_CFG_TLS_NUM > 0
202 vsf_linux_localstorage_t tls[VSF_LINUX_CFG_TLS_NUM];
203#endif
204#if VSF_ARCH_USE_THREAD_REG == ENABLED \
205 && VSF_LINUX_USE_SIMPLE_LIBC == ENABLED && VSF_LINUX_USE_SIMPLE_STDLIB == ENABLED\
206 && VSF_LINUX_APPLET_USE_LIBC_STDLIB == ENABLED && !defined(__VSF_APPLET__)
207 union {
208 // used to save compar parameter for bsearch and qsort
209 void *tmp_ptr;
210 } process_reg_backup;
211#endif
212 char name[16];
214
215 private_member(
216 vsf_linux_process_t *process;
217 union {
218 struct {
219 unsigned short wantval;
220 } sem;
221 } func_priv;
223};
224
230 union {
232 void (*sigaction_handler)(int, siginfo_t *, void *);
233 };
235
241
242#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
243typedef struct vsf_linux_timer_t {
245 struct sigevent evt;
250#endif
251
253
254#if VSF_LINUX_USE_SIMPLE_LIBC == ENABLED && VSF_LINUX_USE_SIMPLE_STDLIB == ENABLED\
255 && VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
256
257typedef struct vsf_liunx_heap_node_t {
259
260 void *ptr;
261 size_t size;
262
263#ifdef VSF_ARCH_ALLOC_BEFORE_ENTRY
264 int before_entry;
265#endif
266#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED
267 int line;
268 const char *file;
269 const char *func;
270#endif
272
274 size_t usage;
275# if VSF_LINUX_SIMPLE_STDLIB_HEAP_MONITOR_MAX == ENABLED
276 size_t max_usage;
277# endif
281#endif
282
284 public_member(
286
287#if VSF_LINUX_LIBC_USE_ENVIRON == ENABLED
288 char **__environ;
289#endif
290#if VSF_LINUX_USE_VFORK == ENABLED
291 jmp_buf __vfork_jmpbuf;
292#endif
294
295 protected_member(
296#if VSF_ARCH_USE_THREAD_REG == ENABLED
298#endif
299 int status;
300 int exit_status;
301 vsf_linux_process_t *shell_process;
302 // thread pending child process
303 vsf_linux_thread_t *thread_pending_child;
304 struct {
305 pid_t pid;
306 pid_t ppid;
307 pid_t gid;
308 } id;
309#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER == ENABLED
311#endif
312
313#if VSF_LINUX_USE_SIMPLE_LIBC == ENABLED && VSF_LINUX_USE_SIMPLE_STDLIB == ENABLED\
314 && VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
315 vsf_linux_heap_monitor_t heap_monitor;
316#endif
317 int fn_atexit_num;
318 void (*fn_atexit[VSF_LINUX_CFG_ATEXIT_NUM])(void);
319
320 char *working_dir;
321#define __VSF_LINUX_PROCESS_HAS_PATH (VSF_LINUX_USE_PROCFS == ENABLED || VSF_LINUX_USE_APPLET == ENABLED || VSF_LINUX_USE_SCRIPT == ENABLED)
322#if __VSF_LINUX_PROCESS_HAS_PATH
323 char path[PATH_MAX];
324#endif
325
326#if VSF_USE_LOADER == ENABLED
327 void *loader;
328#endif
329 vsf_dlist_t thread_list;
330 )
331
332 private_member(
333 vsf_dlist_node_t process_node;
334 vsf_dlist_t fd_list;
335 // thread pending this process
336 vsf_linux_thread_t *thread_pending;
337 vsf_bitmap(vsf_linux_fd_bitmap) fd_bitmap;
338
339 struct {
340 sigset_t pending;
341 sigset_t mask;
342#if VSF_LINUX_CFG_SUPPORT_SIG == ENABLED
343 vsf_dlist_t handler_list;
344 vsf_dlist_t trigger_list;
345#endif
346 } sig;
347
348 vsf_prio_t prio;
349
350 vsf_linux_thread_t *thread_pending_exit;
351 vsf_linux_process_t *parent_process;
352 vsf_dlist_t child_list;
353 vsf_dlist_node_t child_node;
354
355 vsf_heap_t *heap;
356#if VSF_LINUX_USE_VFORK == ENABLED
357 vsf_linux_process_t *vfork_child;
358 bool is_vforking;
359#endif
360#if VSF_LINUX_CFG_PLS_NUM > 0
361 struct {
362 vsf_bitmap(vsf_linux_pls_bitmap) dynlib_bitmap;
363 vsf_linux_localstorage_t storage[VSF_LINUX_CFG_PLS_NUM];
364 } pls;
365#endif
366
367#if VSF_LINUX_CFG_TLS_NUM > 0
368 struct {
369 vsf_bitmap(vsf_linux_tls_bitmap) bitmap;
370 } tls;
371#endif
373};
374
375/*============================ GLOBAL VARIABLES ==============================*/
376/*============================ LOCAL VARIABLES ===============================*/
377/*============================ PROTOTYPES ====================================*/
378
379#if VSF_LINUX_USE_APPLET == ENABLED
382
383#if VSF_LINUX_CFG_PLS_NUM > 0
384 VSF_APPLET_VPLT_ENTRY_FUNC_DEF(vsf_linux_dynlib_ctx_get);
385 VSF_APPLET_VPLT_ENTRY_FUNC_DEF(vsf_linux_dynlib_ctx_set);
386#endif
387
391# ifndef __VSF_APPLET__
393# endif
394#endif
395
396#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_FUNDMENTAL_LIB__))\
397 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_USE_APPLET == ENABLED
398
399#ifndef VSF_LINUX_APPLET_FUNDMENTAL_VPLT
400# if VSF_LINUX_USE_APPLET == ENABLED
401# define VSF_LINUX_APPLET_FUNDMENTAL_VPLT \
402 ((vsf_linux_fundmental_vplt_t *)(VSF_LINUX_APPLET_VPLT->fundmental_vplt))
403# else
404# define VSF_LINUX_APPLET_FUNDMENTAL_VPLT \
405 ((vsf_linux_fundmental_vplt_t *)vsf_vplt((void *)0))
406# endif
407#endif
408
409#define VSF_LINUX_APPLET_FUNDMENTAL_ENTRY(__NAME) \
410 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_FUNDMENTAL_VPLT, __NAME)
411#define VSF_LINUX_APPLET_FUNDMENTAL_IMP(...) \
412 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_FUNDMENTAL_VPLT, __VA_ARGS__)
413
414#if VSF_LINUX_CFG_PLS_NUM > 0
415VSF_LINUX_APPLET_FUNDMENTAL_IMP(vsf_linux_dynlib_ctx_get, void *, const vsf_linux_dynlib_mod_t *mod) {
417 return VSF_LINUX_APPLET_FUNDMENTAL_ENTRY(vsf_linux_dynlib_ctx_get)(mod);
418}
419VSF_LINUX_APPLET_FUNDMENTAL_IMP(vsf_linux_dynlib_ctx_set, int, const vsf_linux_dynlib_mod_t *mod, void *ctx) {
421 return VSF_LINUX_APPLET_FUNDMENTAL_ENTRY(vsf_linux_dynlib_ctx_set)(mod, ctx);
422}
423#endif
424
425VSF_LINUX_APPLET_FUNDMENTAL_IMP(vsf_linux_get_cur_process, vsf_linux_process_t *, void) {
427 return VSF_LINUX_APPLET_FUNDMENTAL_ENTRY(vsf_linux_get_cur_process)();
428}
429# if VSF_USE_LOADER == ENABLED
430VSF_LINUX_APPLET_FUNDMENTAL_IMP(vsf_linux_loader_keep_ram, void, void) {
432 VSF_LINUX_APPLET_FUNDMENTAL_ENTRY(vsf_linux_loader_keep_ram)();
433}
434# endif
435
436#else
437
438#if VSF_LINUX_CFG_PLS_NUM > 0
439extern void * vsf_linux_dynlib_ctx_get(const vsf_linux_dynlib_mod_t *mod);
440extern int vsf_linux_dynlib_ctx_set(const vsf_linux_dynlib_mod_t *mod, void *ctx);
441
442// for backward compatibility
443#define vsf_linux_dynlib_ctx vsf_linux_dynlib_ctx_get
444#endif
445
446// open vsf_linux_get_cur_process for process-related variables like optarg, etc
448# if VSF_USE_LOADER == ENABLED
449extern void vsf_linux_loader_keep_ram(void);
450# endif
451
452#endif
453
454// IMPORTANT: priority of stdio_stream MUST be within scheduler priorities
456
458
459// used for dynamic libraries, allocate/free memory from resources_process
461
462extern size_t vsf_linux_process_heap_size(vsf_linux_process_t *process, void *buffer);
463extern void * vsf_linux_process_heap_realloc(vsf_linux_process_t *process, void *buffer, uint_fast32_t size);
465extern void * vsf_linux_process_heap_malloc(vsf_linux_process_t *process, size_t size);
466extern void * vsf_linux_process_heap_calloc(vsf_linux_process_t *process, size_t n, size_t size);
467extern void vsf_linux_process_heap_free(vsf_linux_process_t *process, void *buffer);
468extern char * vsf_linux_process_heap_strdup(vsf_linux_process_t *process, char *str);
469
470#if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR == ENABLED
471extern void __free_ex(vsf_linux_process_t *process, void *ptr);
472# if VSF_LINUX_SIMPLE_STDLIB_CFG_HEAP_MONITOR_TRACE_CALLER == ENABLED
473# define __malloc_ex(__process, __size) ____malloc_ex((__process), (__size), __FILE__, __FUNCTION__, __LINE__)
474# define __calloc_ex(__process, __n, __size) ____calloc_ex((__process), (__n), (__size), __FILE__, __FUNCTION__, __LINE__)
475# define __realloc_ex(__process, __ptr, __size) ____realloc_ex((__process), (__ptr), (__size), __FILE__, __FUNCTION__, __LINE__)
476# define __strdup_ex(__process, __str) ____strdup_ex((__process), (char *)(__str), __FILE__, __FUNCTION__, __LINE__)
477# else
478# define __malloc_ex(__process, __size) ____malloc_ex((__process), (__size), NULL, NULL, 0)
479# define __calloc_ex(__process, __n, __size) ____calloc_ex((__process), (__n), (__size), NULL, NULL, 0)
480# define __realloc_ex(__process, __ptr, __size) ____realloc_ex((__process), (__ptr), (__size), NULL, NULL, 0)
481# define __strdup_ex(__process, __str) ____strdup_ex((__process), (char *)(__str), NULL, NULL, 0)
482# endif
483#else
484# define __malloc_ex(__process, __size) vsf_linux_process_heap_malloc((__process), (__size))
485# define __calloc_ex(__process, __n, __size) vsf_linux_process_heap_calloc((__process), (__n), (__size))
486# define __free_ex(__process, __ptr) vsf_linux_process_heap_free((__process), (__ptr))
487# define __realloc_ex(__process, __ptr, __size) vsf_linux_process_heap_realloc((__process), (__ptr), (__size))
488# define __strdup_ex(__process, __str) vsf_linux_process_heap_strdup((__process), (char *)(__str))
489#endif
490
492extern void * vsf_linux_malloc_res(size_t size);
493extern void vsf_linux_free_res(void *ptr);
494
495extern int vsf_linux_generate_path(char *path_out, int path_out_lenlen, char *dir, char *path_in);
496extern int vsf_linux_chdir(vsf_linux_process_t *process, char *working_dir);
497
499extern int vsf_linux_fs_bind_executable(char *path, vsf_linux_main_entry_t entry);
500
501extern int vsf_linux_expandenv(const char *str, char *output, size_t bufflen);
502
503#if VSF_LINUX_CFG_PLS_NUM > 0
504extern vsf_err_t vsf_linux_library_init(int *lib_idx, void *lib_ctx, void (*destructor)(void *));
505extern void * vsf_linux_library_ctx(int lib_idx);
506
507extern vsf_err_t vsf_linux_dynlib_init(int *lib_idx, int module_num, int bss_size);
508#endif
509
510// pls(process local storage) is open to user
511#if VSF_LINUX_CFG_PLS_NUM > 0
512extern int vsf_linux_pls_alloc(void);
513extern void vsf_linux_pls_free(int idx);
514extern vsf_linux_localstorage_t * vsf_linux_pls_get(int idx);
515#endif
516
517#if defined(__VSF_LINUX_CLASS_IMPLEMENT) || defined(__VSF_LINUX_CLASS_INHERIT__)
518# if VSF_LINUX_CFG_TLS_NUM > 0
519extern int vsf_linux_tls_alloc(void (*destructor)(void *));
520extern void vsf_linux_tls_free(int idx);
521extern vsf_linux_localstorage_t * vsf_linux_tls_get(int idx);
522# endif
523
524extern bool vsf_linux_is_inited(void);
525// will get vfork_child is current process is vforking
527
528#define __vsf_linux_start_process_internal3(__entry, __argv, __stack_size, __prio)\
529 __vsf_linux_start_process_internal((__entry), (__argv), (__stack_size), (__prio))
530#define __vsf_linux_start_process_internal2(__entry, __argv, __stack_size) \
531 __vsf_linux_start_process_internal3((__entry), (__argv), (__stack_size), VSF_LINUX_CFG_PRIO_LOWEST)
532#define __vsf_linux_start_process_internal1(__entry, __argv) \
533 __vsf_linux_start_process_internal2((__entry), (__argv), 0)
534#define __vsf_linux_start_process_internal0(__entry) \
535 __vsf_linux_start_process_internal1(__entry, NULL)
536// prototype: vsf_linux_process_t * vsf_linux_start_process_internal(vsf_linux_main_entry_t *entry,
537// char * const * argv = NULL, int stack_size = 0, vsf_prio_t prio = VSF_LINUX_CFG_PRIO_LOWEST);
538#define vsf_linux_start_process_internal(__entry, ...) \
539 __PLOOC_EVAL(__vsf_linux_start_process_internal, __VA_ARGS__)((__entry), ##__VA_ARGS__)
541 vsf_linux_main_entry_t entry, char * const * argv, int stack_size, vsf_prio_t prio);
542
543extern vsf_linux_main_entry_t * vsf_linux_fd_get_executable(int fd);
544extern int vsf_linux_fs_get_executable(const char *pathname, vsf_linux_main_entry_t *entry);
545
546// delete unstarted/existed process
547extern vsf_linux_process_t * vsf_linux_create_process(int stack_size, int heap_size, int priv_size);
550extern VSF_CAL_NO_RETURN void vsf_linux_exit_process(int status, bool _exit);
551#if VSF_ARCH_USE_THREAD_REG == ENABLED
553#endif
554
558extern int vsf_linux_wait_thread(int tid, int *retval);
559
561 const vsf_linux_thread_op_t *op,
562 int stack_size, void *stack);
563extern int vsf_linux_start_thread(vsf_linux_thread_t *thread, vsf_prio_t priority);
564
566extern vsf_linux_thread_t * vsf_linux_get_thread(pid_t pid, int tid);
568
570extern int __vsf_linux_process_parse_arg(vsf_linux_process_t *process, vsf_linux_process_arg_t *arg, char * const * argv);
571
572extern int vsf_linux_merge_env(vsf_linux_process_t *process, char **env);
573extern void vsf_linux_free_env(vsf_linux_process_t *process);
574
576// return value:
577// < 0 : triggered by signals, returns the minus signal
578// 0 : triggered normally
579// > 0 : triggered because of timeout
582#endif
583
584// open vsf_linux_get_cur_thread for thread-related variables like errno, etc
586
587#ifdef __cplusplus
588}
589#endif
590
591#undef __VSF_LINUX_CLASS_IMPLEMENT
592#undef __VSF_LINUX_CLASS_INHERIT__
593
594#endif // VSF_USE_LINUX
595#endif // __VSF_LINUX_INTERNAL_H__
596/* EOF */
#define ENABLED
Definition __type.h:28
vsf_err_t
Definition __type.h:42
Definition vsf_eda.h:851
Definition vsf_eda.h:769
Definition vsf_heap.h:139
Definition vsf_linux.h:283
Definition vsf_linux.h:181
Definition vsf_linux.h:160
Definition vsf_simple_stream.h:254
Definition vsf_eda.h:867
uint64_t vsf_systimer_tick_t
Definition cortex_a_generic.h:70
struct ieee80211_ext_chansw_ie data
Definition ieee80211.h:80
__le16 timeout
Definition ieee80211.h:94
int pid_t
Definition types.h:113
int key_t
Definition types.h:112
#define PATH_MAX
Definition limits.h:11
#define vsf_dcl_class
Definition ooc_class.h:50
#define vsf_class(__name)
Definition ooc_class.h:52
void(* sighandler_t)(int)
Definition signal.h:40
uint32_t uintptr_t
Definition stdint.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned char uint8_t
Definition stdint.h:5
Definition reent.h:10
Definition time.h:72
Definition signal.h:57
Definition signal.h:67
Definition signal.h:131
Definition vsf_list.h:888
Definition vsf_list.h:883
Definition vsf_linux.h:380
vsf_vplt_info_t info
Definition vsf_linux.h:381
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(vsf_linux_get_cur_process)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(vsf_linux_loader_keep_ram)
Definition vsf_linux.h:273
vsf_dlist_t list
Definition vsf_linux.h:279
size_t usage
Definition vsf_linux.h:274
size_t max_usage
Definition vsf_linux.h:276
int balance
Definition vsf_linux.h:278
Definition vsf_linux.h:130
vsf_dlist_node_t node
Definition vsf_linux.h:131
key_t key
Definition vsf_linux.h:132
Definition vsf_linux.h:111
int argc
Definition vsf_linux.h:112
char const ** argv
Definition vsf_linux.h:113
Definition vsf_linux.h:125
vsf_linux_process_arg_t arg
Definition vsf_linux.h:126
vsf_linux_main_entry_t entry
Definition vsf_linux.h:127
Definition vsf_linux.h:225
void(* sigaction_handler)(int, siginfo_t *, void *)
Definition vsf_linux.h:232
vsf_dlist_node_t node
Definition vsf_linux.h:226
uint8_t sig
Definition vsf_linux.h:227
sighandler_t sighandler
Definition vsf_linux.h:231
sigset_t mask
Definition vsf_linux.h:229
uint32_t flags
Definition vsf_linux.h:228
Definition vsf_linux.h:236
vsf_stream_t * err
Definition vsf_linux.h:239
vsf_stream_t * out
Definition vsf_linux.h:238
vsf_stream_t * in
Definition vsf_linux.h:237
Definition vsf_linux.h:119
void(* on_run)(vsf_thread_cb_t *cb)
Definition vsf_linux.h:121
int priv_size
Definition vsf_linux.h:120
void(* on_terminate)(vsf_linux_thread_t *thread)
Definition vsf_linux.h:122
Definition vsf_linux.h:243
int overrun
Definition vsf_linux.h:246
struct itimerspec value
Definition vsf_linux.h:244
vsf_systimer_tick_t start
Definition vsf_linux.h:248
vsf_callback_timer_t timer
Definition vsf_linux.h:247
struct sigevent evt
Definition vsf_linux.h:245
Definition vsf_linux.h:257
const char * file
Definition vsf_linux.h:268
int line
Definition vsf_linux.h:267
size_t size
Definition vsf_linux.h:261
vsf_dlist_node_t node
Definition vsf_linux.h:258
const char * func
Definition vsf_linux.h:269
void * ptr
Definition vsf_linux.h:260
@ ITIMER_NUM
Definition time.h:39
class vsf_$ * reg
Definition vsf_cfg.h:95
#define _exit
Definition unistd.h:93
#define dcl_vsf_bitmap(__name, __bit_size)
Definition vsf_bitmap.h:98
#define vsf_bitmap(__name)
Definition vsf_bitmap.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_DEF(__NAME)
Definition vsf_cfg.h:156
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_ENTRY_FUNC_TRACE()
Definition vsf_cfg.h:165
VSF_KERNEL_TIMEOUT_TICK_T vsf_timeout_tick_t
Definition vsf_eda.h:592
@ VSF_EVT_USER
Definition vsf_eda.h:621
uint_fast32_t alignment
Definition vsf_heap.h:172
vsf_prio_t
Definition vsf_kernel_common.h:37
uintptr_t vsf_linux_set_process_reg(uintptr_t reg)
Definition vsf_linux.c:1604
int vsf_linux_trigger_signal(vsf_linux_trigger_t *trig, int sig)
Definition vsf_linux.c:696
int vsf_linux_start_process(vsf_linux_process_t *process)
Definition vsf_linux.c:1377
VSF_CAL_NO_RETURN void vsf_linux_exit_process(int status, bool _exit)
Definition vsf_linux.c:1472
vsf_linux_process_t * vsf_linux_create_process(int stack_size, int heap_size, int priv_size)
Definition vsf_linux.c:1347
int vsf_linux_trigger_pend(vsf_linux_trigger_t *trig, vsf_timeout_tick_t timeout)
Definition vsf_linux.c:716
void vsf_linux_cleanup_process(vsf_linux_process_t *process)
Definition vsf_linux.c:1386
void vsf_linux_thread_on_terminate(vsf_linux_thread_t *thread)
Definition vsf_linux.c:1839
vsf_linux_process_t * __vsf_linux_start_process_internal(vsf_linux_main_entry_t entry, char *const *argv, int stack_size, vsf_prio_t prio)
Definition vsf_linux.c:1610
void vsf_linux_trigger_init(vsf_linux_trigger_t *trig)
Definition vsf_linux.c:687
vsf_linux_process_t * vsf_linux_get_process(pid_t pid)
Definition vsf_linux.c:1631
int vsf_linux_wait_thread(int tid, int *retval)
Definition vsf_linux.c:1904
int vsf_linux_merge_env(vsf_linux_process_t *process, char **env)
Definition vsf_linux.c:655
bool vsf_linux_is_inited(void)
Definition vsf_linux.c:998
int __vsf_linux_process_parse_arg(vsf_linux_process_t *process, vsf_linux_process_arg_t *arg, char *const *argv)
Definition vsf_linux.c:868
void __vsf_linux_process_free_arg(vsf_linux_process_t *process)
Definition vsf_linux.c:855
void vsf_linux_free_env(vsf_linux_process_t *process)
Definition vsf_linux.c:674
vsf_linux_process_t * vsf_linux_get_real_process(vsf_linux_process_t *process)
Definition vsf_linux.c:353
vsf_linux_thread_t * vsf_linux_get_thread(pid_t pid, int tid)
Definition vsf_linux.c:1644
void vsf_linux_detach_process(vsf_linux_process_t *process)
Definition vsf_linux.c:1881
void vsf_linux_detach_thread(vsf_linux_thread_t *thread)
Definition vsf_linux.c:1892
void vsf_linux_delete_process(vsf_linux_process_t *process)
Definition vsf_linux.c:1453
int vsf_linux_fs_get_executable(const char *pathname, vsf_linux_main_entry_t *entry)
Definition vsf_linux.c:3002
int vsf_linux_start_thread(vsf_linux_thread_t *thread, vsf_prio_t priority)
Definition vsf_linux.c:1188
vsf_linux_thread_t * vsf_linux_create_thread(vsf_linux_process_t *process, const vsf_linux_thread_op_t *op, int stack_size, void *stack)
Definition vsf_linux.c:1169
int(* vsf_linux_main_entry_t)(int, char **)
Definition vsf_linux.h:116
void * vsf_linux_process_heap_malloc_aligned(vsf_linux_process_t *process, uint_fast32_t size, uint_fast32_t alignment)
Definition vsf_linux.c:1229
int(* vsf_linux_process_arg_parser_t)(vsf_linux_process_arg_t *arg)
Definition vsf_linux.h:117
void * vsf_linux_malloc_res(size_t size)
Definition vsf_linux.c:973
int vsf_linux_chdir(vsf_linux_process_t *process, char *working_dir)
Definition vsf_linux_fs.c:1683
void * vsf_linux_process_heap_malloc(vsf_linux_process_t *process, size_t size)
Definition vsf_linux.c:1240
@ __VSF_EVT_LINUX_EVENTFD_INC
Definition vsf_linux.h:104
@ __VSF_EVT_LINUX_TERM_RX
Definition vsf_linux.h:105
vsf_systimer_tick_t vsf_linux_sleep(vsf_timeout_tick_t ticks)
Definition vsf_linux.c:3067
char * vsf_linux_process_heap_strdup(vsf_linux_process_t *process, char *str)
Definition vsf_linux.c:1276
vsf_eda_t * vsf_linux_get_kernel_task(void)
Definition vsf_linux.c:925
void * vsf_linux_process_heap_realloc(vsf_linux_process_t *process, void *buffer, uint_fast32_t size)
Definition vsf_linux.c:1208
int vsf_linux_fs_bind_executable(char *path, vsf_linux_main_entry_t entry)
Definition vsf_linux.c:3031
int vsf_linux_fd_bind_executable(int fd, vsf_linux_main_entry_t entry)
Definition vsf_linux.c:3022
void vsf_linux_free_res(void *ptr)
Definition vsf_linux.c:978
int vsf_linux_expandenv(const char *str, char *output, size_t bufflen)
Definition vsf_linux.c:4478
void vsf_linux_loader_keep_ram(void)
Definition vsf_linux.c:4589
size_t vsf_linux_process_heap_size(vsf_linux_process_t *process, void *buffer)
Definition vsf_linux.c:1197
int vsf_linux_generate_path(char *path_out, int path_out_lenlen, char *dir, char *path_in)
Definition vsf_linux.c:788
__VSF_VPLT_DECORATOR__ vsf_linux_fundmental_vplt_t vsf_linux_fundmental_vplt
Definition vsf_linux.c:4840
vsf_linux_process_t * vsf_linux_get_cur_process(void)
Definition vsf_linux.c:1682
void __free_ex(vsf_linux_process_t *process, void *ptr)
Definition vsf_linux_glibc_stdlib.c:122
void vsf_linux_process_heap_free(vsf_linux_process_t *process, void *buffer)
Definition vsf_linux.c:1263
vsf_linux_thread_t * vsf_linux_get_cur_thread(void)
Definition vsf_linux.c:1673
vsf_err_t vsf_linux_init(vsf_linux_stdio_stream_t *stdio_stream)
Definition vsf_linux.c:1011
vsf_linux_process_t * vsf_linux_resources_process(void)
Definition vsf_linux.c:967
void * vsf_linux_process_heap_calloc(vsf_linux_process_t *process, size_t n, size_t size)
Definition vsf_linux.c:1251
#define VSF_LINUX_CFG_FD_BITMAP_SIZE
Definition vsf_linux_cfg.h:38
#define VSF_LINUX_CFG_TLS_NUM
Definition vsf_linux_cfg.h:60
#define VSF_LINUX_CFG_ATEXIT_NUM
Definition vsf_linux_cfg.h:80
#define VSF_LINUX_CFG_PLS_NUM
Definition vsf_linux_cfg.h:56
uint32_t size
Definition vsf_memfs.h:50
uint8_t status
Definition vsf_tgui.h:144
int sig
Definition vsf_thread.h:421
Generated from commit: vsfteam/vsf@c3767bf