@@ -78,20 +78,23 @@ namespace {
7878 );
7979 CONTEXT context = *(ex->ContextRecord );
8080 STACKFRAME64 stack= {0 };
81- #ifdef _M_IX86
81+ stack.AddrPC .Mode = AddrModeFlat;
82+ stack.AddrStack .Mode = AddrModeFlat;
83+ stack.AddrFrame .Mode = AddrModeFlat;
84+ #if defined(_M_IX86)
8285 stack.AddrPC .Offset = context.Eip ;
83- stack.AddrPC .Mode = AddrModeFlat;
8486 stack.AddrStack .Offset = context.Esp ;
85- stack.AddrStack .Mode = AddrModeFlat;
8687 stack.AddrFrame .Offset = context.Ebp ;
87- stack.AddrFrame .Mode = AddrModeFlat;
88- #else
88+ #elif defined(_M_AMD64)
8989 stack.AddrPC .Offset = context.Rip ;
90- stack.AddrPC .Mode = AddrModeFlat;
9190 stack.AddrStack .Offset = context.Rsp ;
92- stack.AddrStack .Mode = AddrModeFlat;
9391 stack.AddrFrame .Offset = context.Rsp ;
94- stack.AddrFrame .Mode = AddrModeFlat;
92+ #elif defined(_M_ARM64)
93+ stack.AddrPC .Offset = context.Pc ;
94+ stack.AddrStack .Offset = context.Sp ;
95+ stack.AddrFrame .Offset = context.Fp ;
96+ #else
97+ #error Platform not supported!
9598#endif
9699 IMAGEHLP_SYMBOL64_EXT symbol;
97100 symbol.SizeOfStruct = sizeof (IMAGEHLP_SYMBOL64);
@@ -101,10 +104,12 @@ namespace {
101104 for (ULONG frame = 0 ; ; frame++) {
102105 BOOL result = pStackWalk64
103106 (
104- #ifdef _M_IX86
107+ #if defined( _M_IX86)
105108 IMAGE_FILE_MACHINE_I386,
106- #else
109+ #elif defined(_M_AMD64)
107110 IMAGE_FILE_MACHINE_AMD64,
111+ #elif defined(_M_ARM64)
112+ IMAGE_FILE_MACHINE_ARM64,
108113#endif
109114 hProcess,
110115 hThread,
0 commit comments