Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LoongArch64] coreclr-vm directory #62885

Merged
merged 49 commits into from
Apr 21, 2022
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
47d106f
Merge pull request #1 from dotnet/main
shushanhf Apr 27, 2021
411b59e
Merge branch 'dotnet:main' into master
shushanhf Oct 25, 2021
7eed4eb
Merge branch 'dotnet:main' into master
shushanhf Dec 6, 2021
0d7c9e4
Merge branch 'dotnet:main' into master
shushanhf Dec 10, 2021
2c534c5
Merge branch 'dotnet:main' into master
shushanhf Dec 14, 2021
6e14d76
Merge branch 'dotnet:main' into master
shushanhf Dec 15, 2021
359875d
Merge branch 'dotnet:main' into master
shushanhf Dec 15, 2021
192b095
Merge branch 'dotnet:main' into main
shushanhf Dec 16, 2021
8a9d654
Part6-2: -add the coreclr-vm directory for LoongArch64. (#59561)
shushanhf Dec 15, 2021
4606899
[LoongArch64] revert the syncblk.cpp.
Dec 17, 2021
e62a6cd
[LoongArch64] delete some unused codes.
Dec 18, 2021
cdb7606
[LoongArch64] add vm/CMakeLists.txt from #62889.
Dec 18, 2021
ad3b666
[LoongArch64] add related files from #62886 and #62893.
Dec 20, 2021
7d03307
[LoongArch64] moved vm/jitinterface.cpp from #62893.
Dec 20, 2021
f6ec562
[LoongArch64] run the file `src/coreclr/tools/Common/JitInterface/Thu…
shushanhf Dec 20, 2021
277de6f
[LoongArch64] revert vm/ceeload.h.
shushanhf Dec 20, 2021
d6dabd7
[LoongArch64] add empty interfaces within `CorInfoImpl.cs`.
Dec 21, 2021
63073dc
[LoongArch64] Fix the compiling error on Windows.
Dec 21, 2021
6aa5e1a
[LoongArch64] Fix the compiling error for memory unaligned m_currentB…
Dec 21, 2021
3e3c3b3
[LoongArch64] Delete the !TARGET_LOONGARCH64 for m_currentByteStackIn…
Dec 22, 2021
55eeb95
[LoongArch64] move ToolBox from #62886.
Dec 22, 2021
21040b8
[LoongArch64] amend the args when needs unsigned extending within Cal…
Dec 23, 2021
19e4357
[LoongArch64] add bool type for args' unsigned extention.
Dec 24, 2021
743c518
[LoongArch64] adding char type for args' unsigned extention.
Dec 24, 2021
cb91556
[LoongArch64] amend renaming `TARGET_LOONGARCH64` to `UNIX_LOONGARCH6…
Dec 24, 2021
1f790f4
[LoongArch64] remove the JIT/EE interface to #62893.
Dec 24, 2021
42fd640
[LoongArch64] revert the rename `TARGET_LOONGARCH64` to `UNIX_LOONGAR…
shushanhf Dec 25, 2021
7757e09
[LoongArch64] refactor the `ArgDestination and ArgLocDesc`.
Jan 7, 2022
ba9fba0
Merge branch 'main' into main_loongarch64_2
shushanhf Jan 12, 2022
86d4546
[LoongArch64] rename the `m_flag` and `getFieldTypeByHnd`.
shushanhf Jan 13, 2022
56b0a79
[LoongArch64] add `NATIVE_SYMBOL_READER_DLL` for compiling error.
shushanhf Jan 14, 2022
5798329
[LoongArch64] update the version of the `LICENSE description`.
Jan 19, 2022
c747f93
Merge branch 'main' into main_loongarch64_2
Feb 15, 2022
48b4734
[LoongArch64] keep same with the comment in `jit/targetloongarch64.h`
Feb 16, 2022
a96f159
Merge branch 'main' into main_loongarch64_2
Feb 18, 2022
aa96fba
[LoongArch64] amend the code for reviewing.
shushanhf Feb 21, 2022
cc96589
[LoongArch64] refactor LoongArch64-ABI within `vm`,
Feb 22, 2022
d3e6ca7
Merge branch 'main' into main_loongarch64_2
shushanhf Feb 23, 2022
4b32677
[LoongArch64] delete unused codes.
shushanhf Feb 23, 2022
9bb6899
Merge branch 'main' into main_loongarch64_2
Feb 25, 2022
c01407f
[LoongArch64] merge main for #65869.
Feb 25, 2022
14669dc
Merge branch 'main' into main_loongarch64_2
shushanhf Mar 1, 2022
7b8b887
[LoongArch64] amend the format for reviewing.
shushanhf Mar 1, 2022
ceee54a
[LoongArch64] delete some unused code for reviewing.
shushanhf Mar 1, 2022
00fdee0
[LoongArch64] amend code for CR feedback @jkotas @janvorli
shushanhf Mar 2, 2022
a623961
[LoongArch64] add class type for LoongArch64-ABI.
Mar 3, 2022
6566991
[LoongArch64] Amend the LoongArch64's ABI
shushanhf Mar 4, 2022
9f39e13
Merge branch 'main' into main_loongarch64_2
shushanhf Mar 22, 2022
d6c7080
[LoongArch64] Fix the assert error
shushanhf Apr 2, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/design/coreclr/botr/clr-abi.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ Arm corporation ABI documentation (for ARM32 and ARM64) is [here](https://develo

The Linux System V x86_64 ABI is documented in [System V Application Binary Interface / AMD64 Architecture Processor Supplement](https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf), with document source material [here](https://gitlab.com/x86-psABIs/x86-64-ABI).

The LoongArch64 ABI documentation is [here](https://github.com/loongson/LoongArch-Documentation/blob/main/docs/LoongArch-ELF-ABI-EN.adoc)

# General Unwind/Frame Layout

For all non-x86 platforms, all methods must have unwind information so the garbage collector (GC) can unwind them (unlike native code in which a leaf method may be omitted).
Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/ToolBox/superpmi/mcs/verbildump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,12 @@ void DumpSigToConsoleBare(MethodContext* mc, CORINFO_SIG_INFO* pSig)
for (int i = 0; i < (int)pSig->numArgs; i++)
{
DWORDLONG dl;
#if defined(TARGET_LOONGARCH64)
jkotas marked this conversation as resolved.
Show resolved Hide resolved
int flags;
CorInfoTypeWithMod type = mc->repGetArgType(pSig, currentItem, (CORINFO_CLASS_HANDLE*)&dl, &flags, &exceptionCode);
#else
CorInfoTypeWithMod type = mc->repGetArgType(pSig, currentItem, (CORINFO_CLASS_HANDLE*)&dl, &exceptionCode);
#endif
CorInfoType cit = strip(type);
if (cit == CORINFO_TYPE_CLASS)
dl = CastHandle(mc->repGetArgClass(pSig, currentItem, &exceptionCode));
Expand Down
1 change: 1 addition & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shared/agnostic.h
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,7 @@ struct Agnostic_GetArgType_Value
DWORDLONG vcTypeRet;
DWORD result;
DWORD exceptionCode;
int flags;//Now only LoongArch64 used.
};

// Agnostic_ConfigIntInfo combines as a single key the name
Expand Down
10 changes: 10 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shared/callutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,12 @@ const char* CallUtils::GetMethodFullName(MethodContext* mc, CORINFO_METHOD_HANDL
// Tweaked to use EE types instead of JIT-specific types
CORINFO_CLASS_HANDLE typeHandle;
DWORD exception;
#if defined(TARGET_LOONGARCH64)
int flags;
CorInfoType type = strip(mc->repGetArgType(&sig, argList, &typeHandle, &flags, &exception));
#else
CorInfoType type = strip(mc->repGetArgType(&sig, argList, &typeHandle, &exception));
#endif

length += strlen(TypeUtils::GetCorInfoTypeName(type));
argList = mc->repGetArgNext(argList);
Expand Down Expand Up @@ -339,7 +344,12 @@ const char* CallUtils::GetMethodFullName(MethodContext* mc, CORINFO_METHOD_HANDL
// Tweaked to use EE types instead of JIT-specific types
CORINFO_CLASS_HANDLE typeHandle;
DWORD exception;
#if defined(TARGET_LOONGARCH64)
int flags;
CorInfoType type = strip(mc->repGetArgType(&sig, argList, &typeHandle, &flags, &exception));
#else
CorInfoType type = strip(mc->repGetArgType(&sig, argList, &typeHandle, &exception));
#endif
strcat_s(retName, length, TypeUtils::GetCorInfoTypeName(type));

argList = mc->repGetArgNext(argList);
Expand Down
1 change: 1 addition & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shared/lwmlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ LWM(GetAddrOfCaptureThreadGlobal, DWORD, DLDL)
LWM(GetArgClass, Agnostic_GetArgClass_Key, Agnostic_GetArgClass_Value)
LWM(GetArgNext, DWORDLONG, DWORDLONG)
LWM(GetArgType, Agnostic_GetArgType_Key, Agnostic_GetArgType_Value)
LWM(GetFieldTypeByHnd, DWORDLONG, DWORD)
LWM(GetArrayInitializationData, DLD, DWORDLONG)
LWM(GetArrayRank, DWORDLONG, DWORD)
LWM(GetArrayIntrinsicID, DWORDLONG, DWORD)
Expand Down
95 changes: 95 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2669,6 +2669,45 @@ void MethodContext::recGetArgType(CORINFO_SIG_INFO* sig,
GetArgType->Add(key, value);
DEBUG_REC(dmpGetArgType(key, value));
}

void MethodContext::recGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
CorInfoTypeWithMod result,
int flags,
DWORD exceptionCode)
{
if (GetArgType == nullptr)
GetArgType = new LightWeightMap<Agnostic_GetArgType_Key, Agnostic_GetArgType_Value>();

Agnostic_GetArgType_Key key;
ZeroMemory(&key, sizeof(key)); // Zero key including any struct padding

// Only setting values for CORINFO_SIG_INFO things the EE seems to pay attention to... this is necessary since some of the values
// are unset and fail our precise comparisons ...
// TODO: verify that the above comment is still true (that some of the fields of incoming argument `sig` contain garbage), or
// can we store the whole thing and use StoreAgnostic_CORINFO_SIG_INFO()?

key.flags = (DWORD)sig->flags;
key.numArgs = (DWORD)sig->numArgs;

SpmiRecordsHelper::StoreAgnostic_CORINFO_SIG_INST_HandleArray(sig->sigInst.classInstCount, sig->sigInst.classInst, SigInstHandleMap, &key.sigInst_classInstCount, &key.sigInst_classInst_Index);
SpmiRecordsHelper::StoreAgnostic_CORINFO_SIG_INST_HandleArray(sig->sigInst.methInstCount, sig->sigInst.methInst, SigInstHandleMap, &key.sigInst_methInstCount, &key.sigInst_methInst_Index);

key.methodSignature = CastPointer(sig->methodSignature);
key.scope = CastHandle(sig->scope);
key.args = CastHandle(args);

Agnostic_GetArgType_Value value;
value.vcTypeRet = CastHandle(*vcTypeRet);
value.result = (DWORD)result;
value.flags = flags;
value.exceptionCode = (DWORD)exceptionCode;

GetArgType->Add(key, value);
DEBUG_REC(dmpGetArgType(key, value));
}

void MethodContext::dmpGetArgType(const Agnostic_GetArgType_Key& key, const Agnostic_GetArgType_Value& value)
{
printf("GetArgType key flg-%08X na-%u %s %s msig-%016llX scp-%016llX arg-%016llX",
Expand All @@ -2678,9 +2717,42 @@ void MethodContext::dmpGetArgType(const Agnostic_GetArgType_Key& key, const Agno
key.methodSignature, key.scope, key.args);
printf(", value result(cit)-%u(%s) vcType-%016llX excp-%08X", value.result, toString((CorInfoTypeWithMod)value.result), value.vcTypeRet, value.exceptionCode);
}

CorInfoTypeWithMod MethodContext::repGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
DWORD* exceptionCode)
{
AssertMapExists(GetArgType, ": key %016llX %016llX", CastHandle(sig->scope), CastHandle(args));

Agnostic_GetArgType_Key key;
ZeroMemory(&key, sizeof(key)); // Zero key including any struct padding
key.flags = (DWORD)sig->flags;
key.numArgs = (DWORD)sig->numArgs;
key.sigInst_classInstCount = (DWORD)sig->sigInst.classInstCount;
key.sigInst_methInstCount = (DWORD)sig->sigInst.methInstCount;
key.methodSignature = CastPointer(sig->methodSignature);
key.scope = CastHandle(sig->scope);
key.args = CastHandle(args);

key.sigInst_classInst_Index = SpmiRecordsHelper::ContainsHandleMap(sig->sigInst.classInstCount, sig->sigInst.classInst, SigInstHandleMap);
key.sigInst_methInst_Index = SpmiRecordsHelper::ContainsHandleMap(sig->sigInst.methInstCount, sig->sigInst.methInst, SigInstHandleMap);

AssertKeyExists(GetArgType, key, ": key %016llX %016llX", key.scope, key.args);

Agnostic_GetArgType_Value value = GetArgType->Get(key);
DEBUG_REP(dmpGetArgType(key, value));

*vcTypeRet = (CORINFO_CLASS_HANDLE)value.vcTypeRet;
CorInfoTypeWithMod temp = (CorInfoTypeWithMod)value.result;
*exceptionCode = (DWORD)value.exceptionCode;
return temp;
}

CorInfoTypeWithMod MethodContext::repGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
int* flags,
DWORD* exceptionCode)
{
AssertMapExists(GetArgType, ": key %016llX %016llX", CastHandle(sig->scope), CastHandle(args));
Expand All @@ -2701,6 +2773,8 @@ CorInfoTypeWithMod MethodContext::repGetArgType(CORINFO_SIG_INFO* sig,
AssertKeyExists(GetArgType, key, ": key %016llX %016llX", key.scope, key.args);

Agnostic_GetArgType_Value value = GetArgType->Get(key);
if (flags)
*flags = value.flags;
DEBUG_REP(dmpGetArgType(key, value));

*vcTypeRet = (CORINFO_CLASS_HANDLE)value.vcTypeRet;
Expand All @@ -2709,6 +2783,27 @@ CorInfoTypeWithMod MethodContext::repGetArgType(CORINFO_SIG_INFO* sig,
return temp;
}

void MethodContext::recGetFieldTypeByHnd(CORINFO_CLASS_HANDLE cls, DWORD value)
{
if (GetFieldTypeByHnd == nullptr)
GetFieldTypeByHnd = new LightWeightMap<DWORDLONG, DWORD>();

DWORDLONG key = (DWORDLONG)cls;

GetFieldTypeByHnd->Add((DWORDLONG)cls, value);
//DEBUG_REC(dmpGetArgType(key, value));
}

void MethodContext::dmpGetFieldTypeByHnd(DWORDLONG key, DWORD value)
{
printf("GetFieldTypeByHnd key %016llX value-%08X", key, value);
}

DWORD MethodContext::repGetFieldTypeByHnd(CORINFO_CLASS_HANDLE cls)
{
return GetFieldTypeByHnd->Get((DWORDLONG)cls);
}

void MethodContext::recGetArgNext(CORINFO_ARG_LIST_HANDLE args, CORINFO_ARG_LIST_HANDLE result)
{
if (GetArgNext == nullptr)
Expand Down
16 changes: 16 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
Original file line number Diff line number Diff line change
Expand Up @@ -363,11 +363,26 @@ class MethodContext
CORINFO_CLASS_HANDLE* vcTypeRet,
CorInfoTypeWithMod result,
DWORD exception);
void recGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
CorInfoTypeWithMod result,
int flags,
DWORD exception);
void dmpGetArgType(const Agnostic_GetArgType_Key& key, const Agnostic_GetArgType_Value& value);
CorInfoTypeWithMod repGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
DWORD* exception);
CorInfoTypeWithMod repGetArgType(CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
int *flags,
DWORD* exception);

void recGetFieldTypeByHnd(CORINFO_CLASS_HANDLE cls, DWORD value);
void dmpGetFieldTypeByHnd(DWORDLONG key, DWORD value);
DWORD repGetFieldTypeByHnd(CORINFO_CLASS_HANDLE cls);

void recGetArgNext(CORINFO_ARG_LIST_HANDLE args, CORINFO_ARG_LIST_HANDLE result);
void dmpGetArgNext(DWORDLONG key, DWORDLONG value);
Expand Down Expand Up @@ -1097,6 +1112,7 @@ enum mcPackets
Packet_GetAssemblyName = 191,
Packet_IsIntrinsic = 192,
Packet_UpdateEntryPointForTailCall = 193,
Packet_GetFieldTypeByHnd = 194,
};

void SetDebugDumpVariables();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1203,12 +1203,59 @@ CorInfoTypeWithMod interceptor_ICJI::getArgType(CORINFO_SIG_INFO* sig,
},
[&](DWORD exceptionCode)
{

this->mc->recGetArgType(sig, args, vcTypeRet, temp, exceptionCode);
});

return temp;
}

CorInfoTypeWithMod interceptor_ICJI::getArgType2(CORINFO_SIG_INFO* sig, /* IN */
CORINFO_ARG_LIST_HANDLE args, /* IN */
CORINFO_CLASS_HANDLE* vcTypeRet, /* OUT */
int* flags /* OUT */
)
{
CorInfoTypeWithMod temp = (CorInfoTypeWithMod)CORINFO_TYPE_UNDEF;

RunWithErrorExceptionCodeCaptureAndContinue(
[&]()
{
mc->cr->AddCall("getArgType2");
temp =
original_ICorJitInfo->getArgType2(sig, args, vcTypeRet, flags);

#ifdef fatMC
CORINFO_CLASS_HANDLE temp3 = getArgClass(sig, args);
#endif
},
[&](DWORD exceptionCode)
{

this->mc->recGetArgType(sig, args, vcTypeRet, temp, flags ? *flags : 0, exceptionCode);
});

return temp;
}

uint32_t interceptor_ICJI::getFieldTypeByHnd(CORINFO_CLASS_HANDLE cls)
{

uint32_t temp = 0;
RunWithErrorExceptionCodeCaptureAndContinue(
[&]()
{
mc->cr->AddCall("getFieldTypeByHnd");
temp = original_ICorJitInfo->getFieldTypeByHnd(cls);
},
[&](DWORD exceptionCode)
{
this->mc->recGetFieldTypeByHnd(cls, temp);
});

return temp;
}

// If the Arg is a CORINFO_TYPE_CLASS fetch the class handle associated with it
CORINFO_CLASS_HANDLE interceptor_ICJI::getArgClass(CORINFO_SIG_INFO* sig, /* IN */
CORINFO_ARG_LIST_HANDLE args /* IN */
Expand Down
17 changes: 17 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,23 @@ CorInfoTypeWithMod interceptor_ICJI::getArgType(
return original_ICorJitInfo->getArgType(sig, args, vcTypeRet);
}

CorInfoTypeWithMod interceptor_ICJI::getArgType2(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
int* flags)
{
mcs->AddCall("getArgType2");
return original_ICorJitInfo->getArgType2(sig, args, vcTypeRet, flags);
}

uint32_t interceptor_ICJI::getFieldTypeByHnd(
CORINFO_CLASS_HANDLE cls)
{
mcs->AddCall("getFieldTypeByHnd");
return original_ICorJitInfo->getFieldTypeByHnd(cls);
}

CORINFO_CLASS_HANDLE interceptor_ICJI::getArgClass(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args)
Expand Down
15 changes: 15 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,21 @@ CorInfoTypeWithMod interceptor_ICJI::getArgType(
return original_ICorJitInfo->getArgType(sig, args, vcTypeRet);
}

CorInfoTypeWithMod interceptor_ICJI::getArgType2(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
int* flags)
{
return original_ICorJitInfo->getArgType2(sig, args, vcTypeRet, flags);
}

uint32_t interceptor_ICJI::getFieldTypeByHnd(
CORINFO_CLASS_HANDLE cls)
{
return original_ICorJitInfo->getFieldTypeByHnd(cls);
}

CORINFO_CLASS_HANDLE interceptor_ICJI::getArgClass(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args)
Expand Down
20 changes: 20 additions & 0 deletions src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1060,6 +1060,26 @@ CorInfoTypeWithMod MyICJI::getArgType(CORINFO_SIG_INFO* sig, /* IN */
return value;
}

CorInfoTypeWithMod MyICJI::getArgType2(CORINFO_SIG_INFO* sig, /* IN */
CORINFO_ARG_LIST_HANDLE args, /* IN */
CORINFO_CLASS_HANDLE* vcTypeRet,/* OUT */
int* flags /* OUT */
)
{
DWORD exceptionCode = 0;
jitInstance->mc->cr->AddCall("getArgType2");
CorInfoTypeWithMod value = jitInstance->mc->repGetArgType(sig, args, vcTypeRet, flags, &exceptionCode);
if (exceptionCode != 0)
ThrowException(exceptionCode);
return value;
}

uint32_t MyICJI::getFieldTypeByHnd(CORINFO_CLASS_HANDLE cls)
{
jitInstance->mc->cr->AddCall("getFieldTypeByHnd");
return jitInstance->mc->repGetFieldTypeByHnd(cls);
}

// If the Arg is a CORINFO_TYPE_CLASS fetch the class handle associated with it
CORINFO_CLASS_HANDLE MyICJI::getArgClass(CORINFO_SIG_INFO* sig, /* IN */
CORINFO_ARG_LIST_HANDLE args /* IN */
Expand Down
8 changes: 8 additions & 0 deletions src/coreclr/inc/corinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -2714,6 +2714,13 @@ class ICorStaticInfo
CORINFO_CLASS_HANDLE *vcTypeRet /* OUT */
) = 0;

virtual CorInfoTypeWithMod getArgType2 (
CORINFO_SIG_INFO* sig, /* IN */
CORINFO_ARG_LIST_HANDLE args, /* IN */
CORINFO_CLASS_HANDLE *vcTypeRet, /* OUT */
int *flags = NULL
) = 0;

// If the Arg is a CORINFO_TYPE_CLASS fetch the class handle associated with it
virtual CORINFO_CLASS_HANDLE getArgClass (
CORINFO_SIG_INFO* sig, /* IN */
Expand Down Expand Up @@ -2848,6 +2855,7 @@ class ICorStaticInfo
/* OUT */ SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR* structPassInRegDescPtr
) = 0;

virtual uint32_t getFieldTypeByHnd(CORINFO_CLASS_HANDLE cls) = 0;
};

/*****************************************************************************
Expand Down
9 changes: 9 additions & 0 deletions src/coreclr/inc/icorjitinfoimpl_generated.h
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,15 @@ CorInfoTypeWithMod getArgType(
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet) override;

CorInfoTypeWithMod getArgType2(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args,
CORINFO_CLASS_HANDLE* vcTypeRet,
int* flags) override;

uint32_t getFieldTypeByHnd(
CORINFO_CLASS_HANDLE cls) override;

CORINFO_CLASS_HANDLE getArgClass(
CORINFO_SIG_INFO* sig,
CORINFO_ARG_LIST_HANDLE args) override;
Expand Down
Loading