mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-20 22:05:12 +00:00
[rpcsx-os] Attempt to fix crash for gcc-12
This commit is contained in:
parent
3c3fcaaea4
commit
7c45d9bb90
3 changed files with 33 additions and 16 deletions
|
|
@ -84,6 +84,22 @@ handle_signal(int sig, siginfo_t *info, void *ucontext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setupSigHandlers() {
|
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 {};
|
struct sigaction act {};
|
||||||
act.sa_sigaction = handle_signal;
|
act.sa_sigaction = handle_signal;
|
||||||
act.sa_flags = SA_SIGINFO | SA_ONSTACK;
|
act.sa_flags = SA_SIGINFO | SA_ONSTACK;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
#include "vfs.hpp"
|
#include "vfs.hpp"
|
||||||
#include "vm.hpp"
|
#include "vm.hpp"
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <csignal>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <map>
|
#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::printf("Starting child thread %lu\n", (long)(proc->pid + baseId));
|
||||||
|
|
||||||
std::thread{[=, childThread = Ref<Thread>(childThread)] {
|
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>(
|
static_cast<void>(
|
||||||
uwrite(_param.child_tid, slong(childThread->tid))); // TODO: verify
|
uwrite(_param.child_tid, slong(childThread->tid))); // TODO: verify
|
||||||
auto context = new ucontext_t{};
|
auto context = new ucontext_t{};
|
||||||
|
|
|
||||||
|
|
@ -43,22 +43,6 @@ void rx::thread::deinitialize() {}
|
||||||
void rx::thread::invoke(orbis::Thread *thread) {
|
void rx::thread::invoke(orbis::Thread *thread) {
|
||||||
g_current = 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 unblockSigs{};
|
||||||
sigset_t oldSigmask{};
|
sigset_t oldSigmask{};
|
||||||
sigaddset(&unblockSigs, SIGSYS);
|
sigaddset(&unblockSigs, SIGSYS);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue