diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2018-11-29 20:43:06 -0500 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2018-11-29 20:43:06 -0500 |
commit | 563c92e6d08c305cb9f7693818ecbe2a2dec527b (patch) | |
tree | 5b8a6dcdad1daa64dc3a73e3dc9385b85b2c9200 /src/crt/crt0.c | |
parent | 22615096dee294f63c6940c17f2a448da51d9197 (diff) |
hello world from initrd
Diffstat (limited to 'src/crt/crt0.c')
-rw-r--r-- | src/crt/crt0.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/crt/crt0.c b/src/crt/crt0.c new file mode 100644 index 0000000..ccdb2eb --- /dev/null +++ b/src/crt/crt0.c @@ -0,0 +1,60 @@ +/** + * @file crt0.c + * Userland executable startup code + * + * Copyright (C) 2018 Clyne Sullivan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include <stdio.h> +#include <stdlib.h> + +extern int main(int, char **); + +static void stdio_init(void); + +void _start(void) +{ + stdio_init(); + exit(main(0, 0)); +} + +void stdio_init(void) +{ + stderr = calloc(1, sizeof(FILE)); + stderr->handle = 2; + stderr->buffer = malloc(BUFSIZ); + stderr->bufsize = BUFSIZ; + stderr->ungetbuf = malloc(_PDCLIB_UNGETCBUFSIZE); + stderr->status = _IOLBF | _PDCLIB_FWRITE | _PDCLIB_STATIC; + stderr->next = NULL; + + stdout = calloc(1, sizeof(FILE)); + stdout->handle = 1; + stdout->buffer = malloc(BUFSIZ); + stdout->bufsize = BUFSIZ; + stdout->ungetbuf = malloc(_PDCLIB_UNGETCBUFSIZE); + stdout->status = _IOLBF | _PDCLIB_FWRITE | _PDCLIB_STATIC; + stdout->next = stderr; + + stdin = calloc(1, sizeof(FILE)); + stdin->handle = 0; + stdin->buffer = malloc(BUFSIZ); + stdin->bufsize = BUFSIZ; + stdin->ungetbuf = malloc(_PDCLIB_UNGETCBUFSIZE); + stdin->status = _IOLBF | _PDCLIB_FREAD | _PDCLIB_STATIC; + stdin->next = stdout; +} + |