Support GetHFAType in SuperPMI for ARM32 hardFP
authorHyeongseok Oh <hseok82.oh@samasung.com>
Tue, 8 Nov 2016 02:31:29 +0000 (11:31 +0900)
committerHyeongseok Oh <hseok82.oh@samasung.com>
Tue, 8 Nov 2016 02:42:18 +0000 (11:42 +0900)
Commit migrated from https://github.com/dotnet/coreclr/commit/6311469038e83a3f24e70c9f99f92a5745a94970

src/coreclr/src/ToolBox/superpmi/superpmi-shared/lwmlist.h
src/coreclr/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
src/coreclr/src/ToolBox/superpmi/superpmi-shared/methodcontext.h
src/coreclr/src/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
src/coreclr/src/ToolBox/superpmi/superpmi/icorjitinfo.cpp
src/coreclr/src/ToolBox/superpmi/superpmi/superpmi.cpp
src/coreclr/src/ToolBox/superpmi/superpmi/superpmi.h

index 774e732..de0db3a 100644 (file)
@@ -85,6 +85,7 @@ LWM(GetFunctionFixedEntryPoint, DWORDLONG, Agnostic_CORINFO_CONST_LOOKUP)
 LWM(GetGSCookie, DWORD, DLDL)
 LWM(GetHelperFtn, DWORD, DLDL)
 LWM(GetHelperName, DWORD, DWORD)
+LWM(GetHFAType, DWORDLONG, DWORD)
 LWM(GetInlinedCallFrameVptr, DWORD, DLDL)
 LWM(GetIntConfigValue, Agnostic_ConfigIntInfo, DWORD)
 LWM(GetIntrinsicID, DWORDLONG, DD)
index acf163e..d523c86 100644 (file)
@@ -2842,6 +2842,34 @@ CORINFO_CLASS_HANDLE MethodContext::repGetArgClass(CORINFO_SIG_INFO* sig, CORINF
     return (CORINFO_CLASS_HANDLE)value.result;
 }
 
+void MethodContext::recGetHFAType(CORINFO_CLASS_HANDLE clsHnd, CorInfoType result)
+{
+    if (GetHFAType == nullptr)
+        GetHFAType = new LightWeightMap<DWORDLONG, DWORD>();
+
+    GetHFAType->Add((DWORDLONG)clsHnd, (DWORD)result);
+    DEBUG_REC(dmpGetHFAType((DWORDLONG)clsHnd, (DWORD)result));
+    return;
+}
+
+void MethodContext::dmpGetHFAType(DWORDLONG key, DWORD value)
+{
+    printf("GetHFATypet key %016llX, value %u ", key, value);
+    return;
+}
+
+CorInfoType MethodContext::repGetHFAType(CORINFO_CLASS_HANDLE clsHnd)
+{
+    DWORD value;
+
+    AssertCodeMsg(GetHFAType != nullptr, EXCEPTIONCODE_MC, "Didn't find anything for %016llX", (DWORDLONG)clsHnd);
+    AssertCodeMsg(GetHFAType->GetIndex((DWORDLONG)clsHnd) != -1, EXCEPTIONCODE_MC, "Didn't find %016llX", (DWORDLONG)clsHnd);
+
+    value = GetHFAType->Get((DWORDLONG)clsHnd);
+    DEBUG_REP(dmpGetHFAType((DWORDLONG)clsHnd, value));
+    return (CorInfoType)value;
+}
+
 void MethodContext::recGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO *info, bool result, DWORD exceptionCode)
 {
     if (GetMethodInfo == nullptr)
index 5885e2b..0d49666 100644 (file)
@@ -674,6 +674,10 @@ public:
     void dmpGetArgClass(const Agnostic_GetArgClass& key, const Agnostic_GetArgClass_Value& value);
     CORINFO_CLASS_HANDLE repGetArgClass(CORINFO_SIG_INFO* sig, CORINFO_ARG_LIST_HANDLE args, DWORD *exceptionCode);
 
+    void recGetHFAType(CORINFO_CLASS_HANDLE clsHnd, CorInfoType result);
+    void dmpGetHFAType(DWORDLONG key, DWORD value);
+    CorInfoType repGetHFAType(CORINFO_CLASS_HANDLE clsHnd);
+
     void recGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO *info, bool result, DWORD exceptionCode);
     void dmpGetMethodInfo(DWORDLONG key, const Agnostic_GetMethodInfo& value);
     bool repGetMethodInfo(CORINFO_METHOD_HANDLE ftn, CORINFO_METHOD_INFO *info, DWORD *exceptionCode);
@@ -1012,7 +1016,7 @@ private:
 
 
 // ********************* Please keep this up-to-date to ease adding more ***************
-// Highest packet number: 158
+// Highest packet number: 159
 // *************************************************************************************
 enum mcPackets
 {
@@ -1055,6 +1059,7 @@ enum mcPackets
     Packet_GetAddrOfCaptureThreadGlobal = 27,
     Retired1 = 28,
     Packet_GetArgClass = 139, //retired as 28 on 2013/07/03
+    Packet_GetHFAType = 159,
     Packet_GetArgNext = 29,
     Retired2 = 30,
     Packet_GetArgType = 140, //retired as 30 on 2013/07/03
index 5706b0a..1813ed2 100644 (file)
@@ -1388,7 +1388,9 @@ CorInfoType interceptor_ICJI::getHFAType (
         )
 {
     mc->cr->AddCall("getHFAType");
-    return original_ICorJitInfo->getHFAType(hClass);
+    CorInfoType temp = original_ICorJitInfo->getHFAType(hClass);
+    this->mc->recGetHFAType(hClass, temp);
+    return temp;
 }
 
 /*****************************************************************************
index b05a284..b746d3f 100644 (file)
@@ -1192,9 +1192,8 @@ CorInfoType MyICJI::getHFAType (
         )
 {
     jitInstance->mc->cr->AddCall("getHFAType");
-    LogError("Hit unimplemented getHFAType");
-    DebugBreakorAV(75);
-    return (CorInfoType)0;
+    CorInfoType value = jitInstance->mc->repGetHFAType(hClass);
+    return value;
 }
 
 /*****************************************************************************
index ce35207..980792d 100644 (file)
@@ -45,6 +45,8 @@ void SetSuperPmiTargetArchitecture(const char* targetArchitecture)
     }
 #elif defined(_TARGET_X86_)
     SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_X86;
+#elif defined(_TARGET_ARM_)
+    SpmiTargetArchitecture = SPMI_TARGET_ARCHITECTURE_ARM;
 #endif
 }
 
index d5b7bda..ce53599 100644 (file)
@@ -12,7 +12,8 @@ enum SPMI_TARGET_ARCHITECTURE
 {
     SPMI_TARGET_ARCHITECTURE_X86,
     SPMI_TARGET_ARCHITECTURE_AMD64,
-    SPMI_TARGET_ARCHITECTURE_ARM64
+    SPMI_TARGET_ARCHITECTURE_ARM64,
+    SPMI_TARGET_ARCHITECTURE_ARM
 };
 
 extern SPMI_TARGET_ARCHITECTURE SpmiTargetArchitecture;