// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // ==++== // // // ==--== #ifndef _TARGET_ARM64_ #define _TARGET_ARM64_ #endif #ifdef _TARGET_AMD64_ #undef _TARGET_AMD64_ #endif #include "strike.h" #include "util.h" #include #include "disasm.h" #include "../../../inc/corhdr.h" #include "../../../inc/cor.h" #include "../../../inc/dacprivate.h" namespace ARM64GCDump { #undef _TARGET_X86_ #undef LIMITED_METHOD_CONTRACT #define LIMITED_METHOD_DAC_CONTRACT #define SUPPORTS_DAC #define LF_GCROOTS #define LL_INFO1000 #define LOG(x) #define LOG_PIPTR(pObjRef, gcFlags, hCallBack) #define DAC_ARG(x) #include "gcdumpnonx86.cpp" } #ifdef FEATURE_PAL void SwitchToFiber(void*) { // TODO: Fix for linux assert(false); } #endif #if !defined(_TARGET_WIN64_) #error This file only supports SOS targeting ARM64 from a 64-bit debugger #endif #if !defined(SOS_TARGET_ARM64) #error This file should be used to support SOS targeting ARM64 debuggees #endif void ARM64Machine::IsReturnAddress(TADDR retAddr, TADDR* whereCalled) const { *whereCalled = 0; DWORD previousInstr; move_xp(previousInstr, retAddr - sizeof(previousInstr)); // ARM64TODO: needs to be implemented for jump stubs for ngen case if ((previousInstr & 0xfffffc1f) == 0xd63f0000) { // BLR *whereCalled = 0xffffffff; } else if ((previousInstr & 0xfc000000) == 0x94000000) { // BL