[rpcsx-os] Attempt to fix crash for gcc-12

This commit is contained in:
DH 2023-07-13 16:18:38 +03:00
parent 3c3fcaaea4
commit 7c45d9bb90
3 changed files with 33 additions and 16 deletions

View file

@ -84,6 +84,22 @@ handle_signal(int sig, siginfo_t *info, void *ucontext) {
}
static void setupSigHandlers() {
stack_t ss;
ss.ss_sp = malloc(SIGSTKSZ);
if (ss.ss_sp == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
ss.ss_size = SIGSTKSZ;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) == -1) {
perror("sigaltstack");
exit(EXIT_FAILURE);
}
struct sigaction act {};
act.sa_sigaction = handle_signal;
act.sa_flags = SA_SIGINFO | SA_ONSTACK;

View file

@ -10,6 +10,7 @@
#include "vfs.hpp"
#include "vm.hpp"
#include <chrono>
#include <csignal>
#include <cstdio>
#include <filesystem>
#include <map>
@ -470,6 +471,22 @@ SysResult thr_new(orbis::Thread *thread, orbis::ptr<thr_param> param,
std::printf("Starting child thread %lu\n", (long)(proc->pid + baseId));
std::thread{[=, childThread = Ref<Thread>(childThread)] {
stack_t ss;
ss.ss_sp = malloc(SIGSTKSZ);
if (ss.ss_sp == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
ss.ss_size = SIGSTKSZ;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) == -1) {
perror("sigaltstack");
exit(EXIT_FAILURE);
}
static_cast<void>(
uwrite(_param.child_tid, slong(childThread->tid))); // TODO: verify
auto context = new ucontext_t{};

View file

@ -43,22 +43,6 @@ void rx::thread::deinitialize() {}
void rx::thread::invoke(orbis::Thread *thread) {
g_current = thread;
stack_t ss;
ss.ss_sp = malloc(SIGSTKSZ);
if (ss.ss_sp == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
ss.ss_size = SIGSTKSZ;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) == -1) {
perror("sigaltstack");
exit(EXIT_FAILURE);
}
sigset_t unblockSigs{};
sigset_t oldSigmask{};
sigaddset(&unblockSigs, SIGSYS);