From 75a24d30269e810b6767982616d1fde89689eaca Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 25 Dec 2024 22:01:33 -0300 Subject: [PATCH] signal: put a dummy siginfo on the stack --- kernel-src/sys/signal.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel-src/sys/signal.c b/kernel-src/sys/signal.c index 13f08bd6..2b9c0ac4 100644 --- a/kernel-src/sys/signal.c +++ b/kernel-src/sys/signal.c @@ -563,8 +563,10 @@ bool signal_check(struct thread_t *thread, context_t *context, bool syscall, uin } memcpy(&sigframe.context, context, sizeof(context_t)); memcpy(&sigframe.extracontext, &thread->extracontext, sizeof(extracontext_t)); + arch_sigframe_prepare_mcontext(&sigframe); - // TODO siginfo + + memset(&sigframe.siginfo, 0, sizeof(siginfo_t)); if (usercopy_touser(stack, &sigframe, sizeof(sigframe_t))) { printf("signal: bad user stack %p\n", stack); @@ -591,8 +593,8 @@ bool signal_check(struct thread_t *thread, context_t *context, bool syscall, uin CTX_IP(context) = (uint64_t)action->address; CTX_SP(context) = (uint64_t)stack; CTX_ARG0(context) = signal; - CTX_ARG1(context) = 0; // TODO pass siginfo - CTX_ARG2(context) = (uint64_t)ARCH_SIGFRAME_GET_UCONTEXT_POINTER((sigframe_t*)stack); + CTX_ARG1(context) = (uint64_t)&((sigframe_t *)stack)->siginfo; + CTX_ARG2(context) = (uint64_t)ARCH_SIGFRAME_GET_UCONTEXT_POINTER((sigframe_t *)stack); // reset handler if asked for if (action->flags & SA_RESETHAND)