#include #include #include #include #include #include #include #include extern void main(void); void clearbss(void) { extern uint8_t _bss_start; extern uint8_t _bss_end; uint8_t *ps = &_bss_start; uint8_t *pe = &_bss_end; size_t sz = pe - ps; for (size_t i = 0; i < sz; i++) { ps[i] = 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(); }