From 389d2acd871a32bc01d89a1eea91db6ffb839f93 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 18 Oct 2022 12:51:31 +0200 Subject: [PATCH] Utils: Add arm64 support for qtcassert's dumpBacktrace Change-Id: I91918689b2d2cde89f7879c482c7826eb55f1c16 Reviewed-by: Marcus Tillmanns Reviewed-by: Reviewed-by: David Schulz --- src/libs/utils/qtcassert.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/qtcassert.cpp b/src/libs/utils/qtcassert.cpp index 0c24ea0fc7f..003311faa28 100644 --- a/src/libs/utils/qtcassert.cpp +++ b/src/libs/utils/qtcassert.cpp @@ -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;