Files
my-os-project2/ulib/_premain.c
2025-09-15 22:35:15 +02:00

55 lines
962 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 *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();
}