mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-02 21:11:25 +12:00
aarch64: Fix compilation for windows-on-arm
This commit is contained in:
parent
23f9eb57e5
commit
a60eab6e36
8 changed files with 64 additions and 9 deletions
|
@ -1840,10 +1840,18 @@ static LONG exception_filter(PEXCEPTION_POINTERS pExp) noexcept
|
|||
}
|
||||
}
|
||||
|
||||
fmt::append(msg, "Instruction address: %p.\n", pExp->ContextRecord->Rip);
|
||||
#if defined(ARCH_X64)
|
||||
#define RIP(ctx) ctx->Rip
|
||||
#elif defined(ARCH_ARM64)
|
||||
#define RIP(ctx) ctx->Pc
|
||||
#else
|
||||
#error "Unimplemented exception handling for this architecture"
|
||||
#endif
|
||||
|
||||
fmt::append(msg, "Instruction address: %p.\n", RIP(pExp->ContextRecord));
|
||||
|
||||
DWORD64 unwind_base;
|
||||
if (const auto rtf = RtlLookupFunctionEntry(pExp->ContextRecord->Rip, &unwind_base, nullptr))
|
||||
if (const auto rtf = RtlLookupFunctionEntry(RIP(pExp->ContextRecord), &unwind_base, nullptr))
|
||||
{
|
||||
// Get function address
|
||||
const DWORD64 func_addr = rtf->BeginAddress + unwind_base;
|
||||
|
@ -1860,7 +1868,7 @@ static LONG exception_filter(PEXCEPTION_POINTERS pExp) noexcept
|
|||
{
|
||||
const DWORD64 base = reinterpret_cast<DWORD64>(info.lpBaseOfDll);
|
||||
|
||||
if (pExp->ContextRecord->Rip >= base && pExp->ContextRecord->Rip < base + info.SizeOfImage)
|
||||
if (RIP(pExp->ContextRecord) >= base && RIP(pExp->ContextRecord) < base + info.SizeOfImage)
|
||||
{
|
||||
std::string module_name;
|
||||
for (DWORD size = 15; module_name.size() != size;)
|
||||
|
|
|
@ -510,15 +510,19 @@ class named_thread final : public Context, result_storage<Context>, thread_base
|
|||
|
||||
#if defined(ARCH_X64)
|
||||
static inline thread::native_entry trampoline = thread::make_trampoline(entry_point);
|
||||
#else
|
||||
#ifdef _WIN32
|
||||
static uint trampoline(void* arg)
|
||||
#else
|
||||
static void* trampoline(void* arg)
|
||||
#endif
|
||||
{
|
||||
if (const auto next = thread_base::finalize(entry_point(static_cast<thread_base*>(arg))))
|
||||
{
|
||||
return next(thread_ctrl::get_current());
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -41,12 +41,18 @@ namespace utils
|
|||
RtlCaptureContext(&context);
|
||||
|
||||
STACKFRAME64 stack = {};
|
||||
stack.AddrPC.Offset = context.Rip;
|
||||
stack.AddrPC.Mode = AddrModeFlat;
|
||||
stack.AddrStack.Offset = context.Rsp;
|
||||
stack.AddrStack.Mode = AddrModeFlat;
|
||||
stack.AddrFrame.Offset = context.Rbp;
|
||||
stack.AddrFrame.Mode = AddrModeFlat;
|
||||
#if defined(ARCH_X64)
|
||||
stack.AddrPC.Offset = context.Rip;
|
||||
stack.AddrStack.Offset = context.Rsp;
|
||||
stack.AddrFrame.Offset = context.Rbp;
|
||||
#elif defined(ARCH_ARM64)
|
||||
stack.AddrPC.Offset = context.Pc;
|
||||
stack.AddrStack.Offset = context.Sp;
|
||||
stack.AddrFrame.Offset = context.Fp;
|
||||
#endif
|
||||
|
||||
while (max_depth--)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue