signal: put a dummy siginfo on the stack

This commit is contained in:
Matheus
2024-12-25 22:01:33 -03:00
parent 0ed09edb63
commit 75a24d3026
+4 -2
View File
@@ -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.context, context, sizeof(context_t));
memcpy(&sigframe.extracontext, &thread->extracontext, sizeof(extracontext_t)); memcpy(&sigframe.extracontext, &thread->extracontext, sizeof(extracontext_t));
arch_sigframe_prepare_mcontext(&sigframe); arch_sigframe_prepare_mcontext(&sigframe);
// TODO siginfo
memset(&sigframe.siginfo, 0, sizeof(siginfo_t));
if (usercopy_touser(stack, &sigframe, sizeof(sigframe_t))) { if (usercopy_touser(stack, &sigframe, sizeof(sigframe_t))) {
printf("signal: bad user stack %p\n", stack); printf("signal: bad user stack %p\n", stack);
@@ -591,7 +593,7 @@ bool signal_check(struct thread_t *thread, context_t *context, bool syscall, uin
CTX_IP(context) = (uint64_t)action->address; CTX_IP(context) = (uint64_t)action->address;
CTX_SP(context) = (uint64_t)stack; CTX_SP(context) = (uint64_t)stack;
CTX_ARG0(context) = signal; CTX_ARG0(context) = signal;
CTX_ARG1(context) = 0; // TODO pass siginfo CTX_ARG1(context) = (uint64_t)&((sigframe_t *)stack)->siginfo;
CTX_ARG2(context) = (uint64_t)ARCH_SIGFRAME_GET_UCONTEXT_POINTER((sigframe_t *)stack); CTX_ARG2(context) = (uint64_t)ARCH_SIGFRAME_GET_UCONTEXT_POINTER((sigframe_t *)stack);
// reset handler if asked for // reset handler if asked for