Utils: Add arm64 support for qtcassert's dumpBacktrace

Change-Id: I91918689b2d2cde89f7879c482c7826eb55f1c16
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Cristian Adam
2022-10-18 12:51:31 +02:00
parent 4cab804e85
commit 389d2acd87

View File

@@ -37,8 +37,10 @@ void dumpBacktrace(int maxdepth)
free(lines);
#elif defined(_MSC_VER)
DWORD machineType;
#if defined(Q_OS_WIN64) && !defined(_ARM64_)
#if defined(_M_X64)
machineType = IMAGE_FILE_MACHINE_AMD64;
#elif defined(_M_ARM64)
machineType = IMAGE_FILE_MACHINE_ARM64;
#else
return;
#endif
@@ -50,13 +52,17 @@ void dumpBacktrace(int maxdepth)
RtlCaptureContext(&ctx);
STACKFRAME64 frame;
memset(&frame, 0, sizeof(STACKFRAME64));
#if defined(Q_OS_WIN64) && !defined(_ARM64_)
frame.AddrPC.Offset = ctx.Rip;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrStack.Offset = ctx.Rsp;
frame.AddrStack.Mode = AddrModeFlat;
frame.AddrFrame.Offset = ctx.Rbp;
frame.AddrFrame.Mode = AddrModeFlat;
#if defined(_M_X64)
frame.AddrPC.Offset = ctx.Rip;
frame.AddrStack.Offset = ctx.Rsp;
frame.AddrFrame.Offset = ctx.Rbp;
#elif define(_M_ARM64)
frame.AddrPC.Offset = ctx.Pc;
frame.AddrStack.Offset = ctx.Sp;
frame.AddrFrame.Offset = ctx.Fp;
#endif
int depth = 0;