53 lines
902 B
C
53 lines
902 B
C
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <system/system.h>
|
|
#include <sysdefs/processctl.h>
|
|
#include <errors.h>
|
|
#include <dlmalloc/malloc.h>
|
|
#include <uprintf.h>
|
|
#include <log.h>
|
|
|
|
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();
|
|
}
|
|
|