forked from qt-creator/qt-creator
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:
@@ -37,8 +37,10 @@ void dumpBacktrace(int maxdepth)
|
|||||||
free(lines);
|
free(lines);
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
DWORD machineType;
|
DWORD machineType;
|
||||||
#if defined(Q_OS_WIN64) && !defined(_ARM64_)
|
#if defined(_M_X64)
|
||||||
machineType = IMAGE_FILE_MACHINE_AMD64;
|
machineType = IMAGE_FILE_MACHINE_AMD64;
|
||||||
|
#elif defined(_M_ARM64)
|
||||||
|
machineType = IMAGE_FILE_MACHINE_ARM64;
|
||||||
#else
|
#else
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
@@ -50,13 +52,17 @@ void dumpBacktrace(int maxdepth)
|
|||||||
RtlCaptureContext(&ctx);
|
RtlCaptureContext(&ctx);
|
||||||
STACKFRAME64 frame;
|
STACKFRAME64 frame;
|
||||||
memset(&frame, 0, sizeof(STACKFRAME64));
|
memset(&frame, 0, sizeof(STACKFRAME64));
|
||||||
#if defined(Q_OS_WIN64) && !defined(_ARM64_)
|
|
||||||
frame.AddrPC.Offset = ctx.Rip;
|
|
||||||
frame.AddrPC.Mode = AddrModeFlat;
|
frame.AddrPC.Mode = AddrModeFlat;
|
||||||
frame.AddrStack.Offset = ctx.Rsp;
|
|
||||||
frame.AddrStack.Mode = AddrModeFlat;
|
frame.AddrStack.Mode = AddrModeFlat;
|
||||||
frame.AddrFrame.Offset = ctx.Rbp;
|
|
||||||
frame.AddrFrame.Mode = AddrModeFlat;
|
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
|
#endif
|
||||||
int depth = 0;
|
int depth = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user