blob: 6a1bb438bde1bebc7cd3747267680990bd02c6f4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include "limine.h"
#include "boot.h"
#include "string.h"
char s_kernel_stack_initial[8192];
char *jove_bootargs;
int jove_bootargs_len;
struct limine_kernel_file_request s_kernel_file_req = {
.id = LIMINE_KERNEL_FILE_REQUEST
};
void
_start(void)
{
__asm__ volatile("movq %0, %%rsp":: "r"((uintptr_t)&s_kernel_stack_initial + 8191));
struct limine_kernel_file_response *kernel_file_response = s_kernel_file_req.response;
jove_bootargs = kernel_file_response->kernel_file->cmdline;
jove_bootargs_len = strlen(jove_bootargs);
//Zero all spaces in bootargs not enclosed with quotes.
for(char *c = jove_bootargs; *c; c++) {
if(*c == '"') {
*c = 0;
for(++c; *c && *c != '"'; c++);
*(c++) = 0;
continue;
}
if(*c == ' ') *c = 0;
}
extern void _jove_main(void);
__asm__ volatile("movq $0, %%rbp"::);
_jove_main();
}
|