Kernel/LibC: Add bareboness signals

You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
This commit is contained in:
Bananymous
2023-07-21 15:45:02 +03:00
parent faf4220b38
commit dcd4d0daeb
14 changed files with 126 additions and 3 deletions

View File

@@ -11,6 +11,9 @@ extern uint8_t g_kernel_end[];
extern uint8_t g_kernel_execute_start[];
extern uint8_t g_kernel_execute_end[];
extern uint8_t g_userspace_start[];
extern uint8_t g_userspace_end[];
namespace Kernel
{
@@ -120,6 +123,14 @@ namespace Kernel
g_kernel_execute_end - g_kernel_execute_start,
Flags::Execute | Flags::Present
);
// Map userspace memory
map_range_at(
V2P(g_userspace_start),
(vaddr_t)g_userspace_start,
g_userspace_end - g_userspace_start,
Flags::Execute | Flags::UserSupervisor | Flags::Present
);
}
BAN::ErrorOr<PageTable*> PageTable::create_userspace()

View File

@@ -0,0 +1,51 @@
.section .userspace, "aw"
.global signal_trampoline
signal_trampoline:
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rbp
pushq %rdi
pushq %rsi
pushq %r8
pushq %r9
pushq %r10
pushq %r11
pushq %r12
pushq %r13
pushq %r14
pushq %r15
xchgw %bx, %bx
movq 128(%rsp), %rdi
movq 120(%rsp), %rax
call *%rax
popq %r15
popq %r14
popq %r13
popq %r12
popq %r11
popq %r10
popq %r9
popq %r8
popq %rsi
popq %rdi
popq %rbp
popq %rdx
popq %rcx
popq %rbx
popq %rax
addq $16, %rsp
ret
.global test_signal
test_signal:
movq $99, %rax
int $0x80
ret

View File

@@ -11,7 +11,13 @@ SECTIONS
{
g_kernel_execute_start = .;
*(.multiboot)
*(.text)
*(.text.*)
}
.userspace ALIGN(4K) : AT(ADDR(.userspace) - KERNEL_OFFSET)
{
g_userspace_start = .;
*(.userspace)
g_userspace_end = .;
}
.rodata ALIGN(4K) : AT(ADDR(.rodata) - KERNEL_OFFSET)
{