#include #include #include #include #include #include #include #include extern void main(void); extern uint8_t _bss_start[]; extern uint8_t _bss_end[]; void clearbss(void) { uint8_t *p = _bss_start; while (p < _bss_end) { *p++ = 0; } } char **_args; size_t _argslen; char **args(void) { return (char **)_args; } size_t argslen(void) { return _argslen; } // ulib initialization goes here void _premain(void) { clearbss(); _argslen = processctl(-1, PCTL_ARGLEN, 0, 0, 0); _args = dlmalloc(_argslen * sizeof(*_args)); if (_args == NULL) { return; } for (size_t i = 0; i < _argslen; i++) { _args[i] = dlmalloc(PROC_ARG_MAX); if (_args[i] == NULL) { return; } } processctl(-1, PCTL_ARGV, (uint64_t)_args, _argslen, 0); main(); }