summaryrefslogtreecommitdiff
path: root/boot/fake_syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'boot/fake_syscall.c')
-rw-r--r--boot/fake_syscall.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/boot/fake_syscall.c b/boot/fake_syscall.c
index e2aaeca..0e94515 100644
--- a/boot/fake_syscall.c
+++ b/boot/fake_syscall.c
@@ -215,11 +215,11 @@ static void install_syscall_handler(void)
msr_write(MSR_INDEX_EFER, efer);
}
-static void *create_fake_syscall_stack(void *entry_addr)
+static void *create_fake_syscall_stack(void *entry_addr, struct linear_buffer *stack_buffer)
{
- constexpr size_t fake_syscall_stack_size = 0x20000; // 128KiB stack
- char *stack_pointer_base = mmap(nullptr, fake_syscall_stack_size, 0, 0, -1, 0);
- void *stack_pointer_head = stack_pointer_base + fake_syscall_stack_size;
+ stack_buffer->length = KJARNA_BOOT_STACK_SIZE;
+ stack_buffer->base = mmap(nullptr, stack_buffer->length, 0, 0, -1, 0);
+ void *stack_pointer_head = stack_buffer->base + stack_buffer->length;
struct syscall_context *context = stack_alloc(&stack_pointer_head, sizeof(*context));
@@ -236,7 +236,7 @@ static void *create_fake_syscall_stack(void *entry_addr)
int64_t fake_syscall_start(struct kjarna_boot_image *image)
{
install_syscall_handler();
- void *fake_stack = create_fake_syscall_stack((void *)image->entry);
+ void *fake_stack = create_fake_syscall_stack((void *)image->entry, &image->stack_buffer);
save_system_context();
int64_t result = fake_syscall_begin(fake_stack, &exit_fake_syscall_stack);
return result;