Step 1 of removing PanicAlert

This commit is contained in:
Henrik Rydgård 2020-07-19 17:52:41 +02:00
parent c5e0b799d9
commit 617bbcfb87
8 changed files with 16 additions and 37 deletions

View file

@ -905,14 +905,12 @@ void ARMXEmitter::WriteSignedMultiply(u32 Op, u32 Op2, u32 Op3, ARMReg dest, ARM
} }
void ARMXEmitter::UDIV(ARMReg dest, ARMReg dividend, ARMReg divisor) void ARMXEmitter::UDIV(ARMReg dest, ARMReg dividend, ARMReg divisor)
{ {
if (!cpu_info.bIDIVa) _assert_(cpu_info.bIDIVa, "Trying to use integer divide on hardware that doesn't support it. Bad programmer.");
PanicAlert("Trying to use integer divide on hardware that doesn't support it. Bad programmer.");
WriteSignedMultiply(3, 0xF, 0, dest, divisor, dividend); WriteSignedMultiply(3, 0xF, 0, dest, divisor, dividend);
} }
void ARMXEmitter::SDIV(ARMReg dest, ARMReg dividend, ARMReg divisor) void ARMXEmitter::SDIV(ARMReg dest, ARMReg dividend, ARMReg divisor)
{ {
if (!cpu_info.bIDIVa) _assert_(cpu_info.bIDIVa, "Trying to use integer divide on hardware that doesn't support it. Bad programmer.");
PanicAlert("Trying to use integer divide on hardware that doesn't support it. Bad programmer.");
WriteSignedMultiply(1, 0xF, 0, dest, divisor, dividend); WriteSignedMultiply(1, 0xF, 0, dest, divisor, dividend);
} }

View file

@ -168,7 +168,7 @@ void PointerWrap::DoMarker(const char *prevName, u32 arbitraryNumber) {
u32 cookie = arbitraryNumber; u32 cookie = arbitraryNumber;
Do(cookie); Do(cookie);
if (mode == PointerWrap::MODE_READ && cookie != arbitraryNumber) { if (mode == PointerWrap::MODE_READ && cookie != arbitraryNumber) {
PanicAlert("Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). Aborting savestate load...", prevName, cookie, cookie, arbitraryNumber, arbitraryNumber); _assert_msg_(false, "Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). Aborting savestate load...", prevName, cookie, cookie, arbitraryNumber, arbitraryNumber);
SetError(ERROR_FAILURE); SetError(ERROR_FAILURE);
} }
} }

View file

@ -85,11 +85,8 @@ public:
// If you don't specify a size and we later encounter an executable non-writable block, we're screwed. // If you don't specify a size and we later encounter an executable non-writable block, we're screwed.
// These CANNOT be nested. We rely on the memory protection starting at READ|WRITE after start and reset. // These CANNOT be nested. We rely on the memory protection starting at READ|WRITE after start and reset.
void BeginWrite(size_t sizeEstimate = 1) { void BeginWrite(size_t sizeEstimate = 1) {
#ifdef _DEBUG _dbg_assert_msg_(!writeStart_, "Can't nest BeginWrite calls");
if (writeStart_) {
PanicAlert("Can't nest BeginWrite calls");
}
#endif
// In case the last block made the current page exec/no-write, let's fix that. // In case the last block made the current page exec/no-write, let's fix that.
if (PlatformIsWXExclusive()) { if (PlatformIsWXExclusive()) {
writeStart_ = GetCodePtr(); writeStart_ = GetCodePtr();

View file

@ -64,7 +64,7 @@
#if defined(_DEBUG) #if defined(_DEBUG)
#include <crtdbg.h> #include <crtdbg.h>
#undef CHECK_HEAP_INTEGRITY #undef CHECK_HEAP_INTEGRITY
#define CHECK_HEAP_INTEGRITY() {if (!_CrtCheckMemory()) PanicAlert("memory corruption detected. see log.");} #define CHECK_HEAP_INTEGRITY() {if (!_CrtCheckMemory()) _assert_msg_(false, "Memory corruption detected. See log.");}
#endif #endif
#else #else

View file

@ -98,9 +98,7 @@ void UninstallExceptionHandler() {
#elif defined(__APPLE__) #elif defined(__APPLE__)
static void CheckKR(const char* name, kern_return_t kr) { static void CheckKR(const char* name, kern_return_t kr) {
if (kr) { _assert_msg_(kr == 0, "%s failed: kr=%x", name, kr);
PanicAlert("%s failed: kr=%x", name, kr);
}
} }
static void ExceptionThread(mach_port_t port) { static void ExceptionThread(mach_port_t port) {
@ -147,15 +145,8 @@ static void ExceptionThread(mach_port_t port) {
return; return;
} }
if (msg_in.Head.msgh_id != 2406) { _assert_msg_(msg_in.Head.msgh_id == 2406, "unknown message received");
PanicAlert("unknown message received"); _assert_msg_(msg_in.flavor == x86_THREAD_STATE64, "unknown flavor %d (expected %d)", msg_in.flavor, x86_THREAD_STATE64);
return;
}
if (msg_in.flavor != x86_THREAD_STATE64) {
PanicAlert("unknown flavor %d (expected %d)", msg_in.flavor, x86_THREAD_STATE64);
return;
}
x86_thread_state64_t* state = (x86_thread_state64_t*)msg_in.old_state; x86_thread_state64_t* state = (x86_thread_state64_t*)msg_in.old_state;
@ -299,8 +290,9 @@ void InstallExceptionHandler(BadAccessHandler badAccessHandler) {
#endif #endif
signal_stack.ss_size = SIGSTKSZ; signal_stack.ss_size = SIGSTKSZ;
signal_stack.ss_flags = 0; signal_stack.ss_flags = 0;
if (sigaltstack(&signal_stack, nullptr)) if (sigaltstack(&signal_stack, nullptr)) {
PanicAlert("sigaltstack failed"); _assert_msg_(false, "sigaltstack failed");
}
struct sigaction sa; struct sigaction sa;
sa.sa_handler = nullptr; sa.sa_handler = nullptr;
sa.sa_sigaction = &sigsegv_handler; sa.sa_sigaction = &sigsegv_handler;

View file

@ -156,10 +156,7 @@ u8* MemArena::Find4GBBase() {
#else #else
// Address masking is used in 32-bit mode, so we can get away with less memory. // Address masking is used in 32-bit mode, so we can get away with less memory.
void* base = mmap(0, 0x10000000, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0); void* base = mmap(0, 0x10000000, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
if (base == MAP_FAILED) { _assert_msg_(base != MAP_FAILED, "Failed to map 256 MB of memory space: %s", strerror(errno));
PanicAlert("Failed to map 256 MB of memory space: %s", strerror(errno));
return 0;
}
munmap(base, 0x10000000); munmap(base, 0x10000000);
return static_cast<u8*>(base); return static_cast<u8*>(base);
#endif #endif

View file

@ -124,12 +124,8 @@ u8* MemArena::Find4GBBase() {
} }
#else #else
size_t size = 0x10000000; size_t size = 0x10000000;
void* base = mmap(0, size, PROT_READ | PROT_WRITE, void* base = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0);
MAP_ANON | MAP_SHARED, -1, 0); _assert_msg_(base != MAP_FAILED, "Failed to map 256 MB of memory space: %s", strerror(errno));
if (base == MAP_FAILED) {
PanicAlert("Failed to map 256 MB of memory space: %s", strerror(errno));
return 0;
}
munmap(base, size); munmap(base, size);
return static_cast<u8*>(base); return static_cast<u8*>(base);
#endif #endif

View file

@ -292,8 +292,7 @@ bool ProtectMemoryPages(const void* ptr, size_t size, uint32_t memProtFlags) {
if (PlatformIsWXExclusive()) { if (PlatformIsWXExclusive()) {
if ((memProtFlags & (MEM_PROT_WRITE | MEM_PROT_EXEC)) == (MEM_PROT_WRITE | MEM_PROT_EXEC)) { if ((memProtFlags & (MEM_PROT_WRITE | MEM_PROT_EXEC)) == (MEM_PROT_WRITE | MEM_PROT_EXEC)) {
ERROR_LOG(MEMMAP, "Bad memory protection %d!", memProtFlags); _assert_msg_(false, "Bad memory protect flags %d: W^X is in effect, can't both write and exec", memProtFlags);
PanicAlert("Bad memory protect : W^X is in effect, can't both write and exec");
} }
} }
// Note - VirtualProtect will affect the full pages containing the requested range. // Note - VirtualProtect will affect the full pages containing the requested range.