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

Generate calls to interface methods through resolve helper #112406

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
cb9785d
Generate calls to interface methods through resolve helper
MichalStrehovsky Feb 11, 2025
6bdcdb1
Expand resolver during CFG expansion
jakobbotsch Feb 12, 2025
7f879d6
Revert register constraint changes
jakobbotsch Feb 12, 2025
6d45447
Nit
jakobbotsch Feb 12, 2025
9d0a3bd
Revert "Revert register constraint changes"
MichalStrehovsky Feb 13, 2025
2f0a285
Scary hack
MichalStrehovsky Feb 13, 2025
6cd6567
Universal transition
MichalStrehovsky Feb 14, 2025
36fa432
Arm64 and fixes
MichalStrehovsky Feb 17, 2025
312d75d
Testing
MichalStrehovsky Feb 17, 2025
5249b9a
Merge branch 'main' into resolvehelper
MichalStrehovsky Feb 18, 2025
b370b17
Update jiteeversionguid.h
MichalStrehovsky Feb 18, 2025
88eeeee
Add JIT_InterfaceLookupForSlot helper for Win x64
jkotas Feb 20, 2025
1d710c4
Clear out call cookie when changing VSD call to indirect
jakobbotsch Mar 1, 2025
c3d49bb
Nit
jakobbotsch Mar 1, 2025
66f6270
Probable fix for GC issues
jakobbotsch Mar 1, 2025
e6b1819
Undo accidental change
jakobbotsch Mar 1, 2025
1ea2b34
Merge branch 'main' of github.com:dotnet/runtime into pr-112406
jakobbotsch Mar 1, 2025
bb89b87
Update JIT-EE GUID after merge
jakobbotsch Mar 1, 2025
5ca6411
Run jit-format
jakobbotsch Mar 1, 2025
5d66c77
Fix Jan's bug, fix tailcall test
jakobbotsch Mar 3, 2025
f28053d
Fix build on targets without custom calling convention for helper
jakobbotsch Mar 3, 2025
d866b1e
Delete unnecessary TAILJMP_RAX
jkotas Mar 3, 2025
a70c650
Depend on the GCInfo produced by the JIT for reporting of arg registers
jkotas Mar 3, 2025
bb2d70f
JIT: Simplify internal GC tracking structures
jakobbotsch Mar 3, 2025
42343da
Remove check
jakobbotsch Mar 3, 2025
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
102 changes: 4 additions & 98 deletions src/coreclr/gcinfo/gcinfoencoder.cpp
Original file line number Diff line number Diff line change
@@ -909,97 +909,6 @@ void GcInfoEncoder::FinalizeSlotIds()
#endif
}

#ifdef PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED

// tells whether a slot cannot contain an object reference
// at call instruction or right after returning
bool GcInfoEncoder::DoNotTrackInPartiallyInterruptible(GcSlotDesc &slotDesc)
{
#if defined(TARGET_ARM)

_ASSERTE( m_SizeOfStackOutgoingAndScratchArea != (UINT32)-1 );
if(slotDesc.IsRegister())
{
int regNum = (int) slotDesc.Slot.RegisterNumber;
_ASSERTE(regNum >= 0 && regNum <= 14);
_ASSERTE(regNum != 13); // sp

return ((regNum <= 3) || (regNum >= 12)) // R12 is volatile and SP/LR can't contain objects around calls
&& regNum != 0 // R0 can contain return value
;
}
else if (!slotDesc.IsUntracked() && (slotDesc.Slot.Stack.Base == GC_SP_REL) &&
((UINT32)slotDesc.Slot.Stack.SpOffset < m_SizeOfStackOutgoingAndScratchArea))
{
return TRUE;
}
else
return FALSE;

#elif defined(TARGET_ARM64)

_ASSERTE(m_SizeOfStackOutgoingAndScratchArea != (UINT32)-1);
if (slotDesc.IsRegister())
{
int regNum = (int)slotDesc.Slot.RegisterNumber;
_ASSERTE(regNum >= 0 && regNum <= 30);
_ASSERTE(regNum != 18);

return (regNum <= 17 || regNum >= 29) // X0 through X17 are scratch, FP/LR can't be used for objects around calls
&& regNum != 0 // X0 can contain return value
&& regNum != 1 // X1 can contain return value
;
}
else if (!slotDesc.IsUntracked() && (slotDesc.Slot.Stack.Base == GC_SP_REL) &&
((UINT32)slotDesc.Slot.Stack.SpOffset < m_SizeOfStackOutgoingAndScratchArea))
{
return TRUE;
}
else
return FALSE;

#elif defined(TARGET_AMD64)

_ASSERTE( m_SizeOfStackOutgoingAndScratchArea != (UINT32)-1 );
if(slotDesc.IsRegister())
{
int regNum = (int) slotDesc.Slot.RegisterNumber;
_ASSERTE(regNum >= 0 && regNum <= 16);
_ASSERTE(regNum != 4); // rsp

UINT16 PreservedRegMask =
(1 << 3) // rbx
| (1 << 5) // rbp
#ifndef UNIX_AMD64_ABI
| (1 << 6) // rsi
| (1 << 7) // rdi
#endif // UNIX_AMD64_ABI
| (1 << 12) // r12
| (1 << 13) // r13
| (1 << 14) // r14
| (1 << 15) // r15
| (1 << 0) // rax - may contain return value
#ifdef UNIX_AMD64_ABI
| (1 << 2) // rdx - may contain return value
#endif
;

return !(PreservedRegMask & (1 << regNum));
}
else if (!slotDesc.IsUntracked() && (slotDesc.Slot.Stack.Base == GC_SP_REL) &&
((UINT32)slotDesc.Slot.Stack.SpOffset < m_SizeOfStackOutgoingAndScratchArea))
{
return TRUE;
}
else
return FALSE;

#else
return FALSE;
#endif
}
#endif // PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED

void GcInfoEncoder::Build()
{
#ifdef _DEBUG
@@ -1389,14 +1298,11 @@ void GcInfoEncoder::Build()
else
{
UINT32 slotIndex = pCurrent->SlotId;
if(!DoNotTrackInPartiallyInterruptible(m_SlotTable[slotIndex]))
{
BYTE becomesLive = pCurrent->BecomesLive;
_ASSERTE((liveState.ReadBit(slotIndex) && !becomesLive)
|| (!liveState.ReadBit(slotIndex) && becomesLive));
BYTE becomesLive = pCurrent->BecomesLive;
_ASSERTE((liveState.ReadBit(slotIndex) && !becomesLive)
|| (!liveState.ReadBit(slotIndex) && becomesLive));

liveState.WriteBit(slotIndex, becomesLive);
}
liveState.WriteBit(slotIndex, becomesLive);
pCurrent++;
}
}
1 change: 1 addition & 0 deletions src/coreclr/inc/corinfo.h
Original file line number Diff line number Diff line change
@@ -574,6 +574,7 @@ enum CorInfoHelpFunc
CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT_TRACK_TRANSITIONS, // Transition to preemptive mode and track transitions in reverse P/Invoke prolog.

CORINFO_HELP_GVMLOOKUP_FOR_SLOT, // Resolve a generic virtual method target from this pointer and runtime method handle
CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT, // Resolve a non-generic interface method from this pointer and dispatch cell

CORINFO_HELP_STACK_PROBE, // Probes each page of the allocated stack frame

4 changes: 0 additions & 4 deletions src/coreclr/inc/gcinfoencoder.h
Original file line number Diff line number Diff line change
@@ -542,10 +542,6 @@ class GcInfoEncoder
void SizeofSlotStateVarLengthVector(const BitArray& vector, UINT32 baseSkip, UINT32 baseRun, UINT32 * pSizeofSimple, UINT32 * pSizeofRLE, UINT32 * pSizeofRLENeg);
UINT32 WriteSlotStateVarLengthVector(BitStreamWriter &writer, const BitArray& vector, UINT32 baseSkip, UINT32 baseRun);

#ifdef PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED
bool DoNotTrackInPartiallyInterruptible(GcSlotDesc &slot);
#endif // PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED

// Assumes that "*ppTransitions" is has size "numTransitions", is sorted by CodeOffset then by SlotId,
// and that "*ppEndTransitions" points one beyond the end of the array. If "*ppTransitions" contains
// any dead/live transitions pairs for the same CodeOffset and SlotID, removes those, by allocating a
10 changes: 5 additions & 5 deletions src/coreclr/inc/jiteeversionguid.h
Original file line number Diff line number Diff line change
@@ -37,11 +37,11 @@

#include <minipal/guid.h>

constexpr GUID JITEEVersionIdentifier = { /* 4463d6ac-dfcb-4ab0-a941-c53b56089b7c */
0x4463d6ac,
0xdfcb,
0x4ab0,
{0xa9, 0x41, 0xc5, 0x3b, 0x56, 0x08, 0x9b, 0x7c}
constexpr GUID JITEEVersionIdentifier = { /* 254e838d-821b-4600-9c4e-b5ea6ef20d38 */
0x254e838d,
0x821b,
0x4600,
{0x9c, 0x4e, 0xb5, 0xea, 0x6e, 0xf2, 0x0d, 0x38}
};

#endif // JIT_EE_VERSIONING_GUID_H
5 changes: 5 additions & 0 deletions src/coreclr/inc/jithelpers.h
Original file line number Diff line number Diff line change
@@ -309,6 +309,11 @@
JITHELPER(CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT_TRACK_TRANSITIONS, JIT_ReversePInvokeExitTrackTransitions, METHOD__NIL)

JITHELPER(CORINFO_HELP_GVMLOOKUP_FOR_SLOT, NULL, METHOD__NIL)
#if defined(TARGET_AMD64)
JITHELPER(CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT, JIT_InterfaceLookupForSlot, METHOD__NIL)
#else
JITHELPER(CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT, NULL, METHOD__NIL)
Copy link
Member

@jakobbotsch jakobbotsch Feb 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How hard would it be to add an implementation for coreclr? Currently jit-cfg is likely to be broken by this change. It would be nice to make it work without having to make the JIT side codegen different from NAOT pattern.

Alternatively I guess it would be even more ideal if we switched the testing to a CFG-enabled outerloop NAOT run now that the support is more mature... But that's probably a bit more work.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought CoreCLR doesn't even do interface dispatch in this shape? I thought #111771 tries to bring it over, but for some very limited scenarios. Are the interface codepaths even exercised under CoreCLR?

We already have a CFG run on native AOT but only on x64. It should be easy enough to add arm64 one. But we don't have any stress modes for either GC or JIT.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not totally sure what the difference between CID and VSD is, but from the JIT codegen standpoint it looks identical to me.

In the worst case I would be ok with guarding the transformation in lowering under a NAOT check.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jkotas if I wanted to implement a CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT on CoreCLR, would I need to somehow call VirtualCallStubManager::ResolveWorker? It's not exactly clear to me where I would find the parameters to call it so wondering if there's a better way.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have pushed a commit into this PR that shows what it may look like on win x64. It calls the slow resolve helper every time. If it is too slow for the test, it is possible to improve the perf by adding a NAOT-like fast path once David's PR #111771 goes in.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have pushed a commit into this PR that shows what it may look like on win x64

Thank you ❤️! I'll kick off a JIT-cfg run to see if the perf is acceptable. I think we'd basically only care if this more than quadruples the time it takes for the CI to run. These legs run very infrequently.

#endif

#if !defined(TARGET_ARM64) && !defined(TARGET_LOONGARCH64) && !defined(TARGET_RISCV64)
JITHELPER(CORINFO_HELP_STACK_PROBE, JIT_StackProbe, METHOD__NIL)
6 changes: 6 additions & 0 deletions src/coreclr/jit/codegencommon.cpp
Original file line number Diff line number Diff line change
@@ -735,6 +735,11 @@ regMaskTP Compiler::compHelperCallKillSet(CorInfoHelpFunc helper)
case CORINFO_HELP_VALIDATE_INDIRECT_CALL:
return RBM_VALIDATE_INDIRECT_CALL_TRASH;

#ifdef RBM_INTERFACELOOKUP_FOR_SLOT_TRASH
case CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT:
return RBM_INTERFACELOOKUP_FOR_SLOT_TRASH;
#endif

default:
return RBM_CALLEE_TRASH;
}
@@ -6069,6 +6074,7 @@ void CodeGen::genDefinePendingCallLabel(GenTreeCall* call)
{
case CORINFO_HELP_VALIDATE_INDIRECT_CALL:
case CORINFO_HELP_VIRTUAL_FUNC_PTR:
case CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT:
case CORINFO_HELP_MEMSET:
case CORINFO_HELP_MEMCPY:
return;
41 changes: 20 additions & 21 deletions src/coreclr/jit/emit.cpp
Original file line number Diff line number Diff line change
@@ -9983,7 +9983,6 @@ void emitter::emitStackPopLargeStk(BYTE* addr, bool isCall, unsigned char callIn

unsigned argStkCnt;
S_UINT16 argRecCnt(0); // arg count for ESP, ptr-arg count for EBP
unsigned gcrefRegs, byrefRegs;

#ifdef JIT32_GCENCODER
// For the general encoder, we always need to record calls, so we make this call
@@ -10025,26 +10024,19 @@ void emitter::emitStackPopLargeStk(BYTE* addr, bool isCall, unsigned char callIn
return;
#endif

// Do we have any interesting (i.e., callee-saved) registers live here?
// Do we have any interesting registers live here?

gcrefRegs = byrefRegs = 0;
unsigned gcrefRegs = emitThisGCrefRegs.GetIntRegSet() >> REG_INT_FIRST;
unsigned byrefRegs = emitThisByrefRegs.GetIntRegSet() >> REG_INT_FIRST;

// We make a bitmask whose bits correspond to callee-saved register indices (in the sequence
// of callee-saved registers only).
for (unsigned calleeSavedRegIdx = 0; calleeSavedRegIdx < CNT_CALL_GC_REGS; calleeSavedRegIdx++)
{
regMaskTP calleeSavedRbm = raRbmCalleeSaveOrder[calleeSavedRegIdx];
if (emitThisGCrefRegs & calleeSavedRbm)
{
gcrefRegs |= (1 << calleeSavedRegIdx);
}
if (emitThisByrefRegs & calleeSavedRbm)
{
byrefRegs |= (1 << calleeSavedRegIdx);
}
}
assert(regMaskTP::FromIntRegSet(SingleTypeRegSet(gcrefRegs << REG_INT_FIRST)) == emitThisGCrefRegs);
assert(regMaskTP::FromIntRegSet(SingleTypeRegSet(byrefRegs << REG_INT_FIRST)) == emitThisByrefRegs);

#ifdef JIT32_GCENCODER
// x86 does not report GC refs/byrefs in return registers at call sites
gcrefRegs &= ~(1u << (REG_INTRET - REG_INT_FIRST));
byrefRegs &= ~(1u << (REG_INTRET - REG_INT_FIRST));

// For the general encoder, we always have to record calls, so we don't take this early return. /* Are there any
// args to pop at this call site?

@@ -10353,13 +10345,13 @@ const char* emitter::emitOffsetToLabel(unsigned offs)
regMaskTP emitter::emitGetGCRegsSavedOrModified(CORINFO_METHOD_HANDLE methHnd)
{
// Is it a helper with a special saved set?
bool isNoGCHelper = emitNoGChelper(methHnd);
bool isNoGCHelper = emitNoGChelper(methHnd);
CorInfoHelpFunc helper = Compiler::eeGetHelperNum(methHnd);

if (isNoGCHelper)
{
CorInfoHelpFunc helpFunc = Compiler::eeGetHelperNum(methHnd);

// Get the set of registers that this call kills and remove it from the saved set.
regMaskTP savedSet = RBM_ALLINT & ~emitGetGCRegsKilledByNoGCCall(helpFunc);
regMaskTP savedSet = RBM_ALLINT & ~emitGetGCRegsKilledByNoGCCall(helper);

#ifdef DEBUG
if (emitComp->verbose)
@@ -10372,6 +10364,13 @@ regMaskTP emitter::emitGetGCRegsSavedOrModified(CORINFO_METHOD_HANDLE methHnd)
#endif
return savedSet;
}
#ifdef RBM_INTERFACELOOKUP_FOR_SLOT_TRASH
else if (helper == CORINFO_HELP_INTERFACELOOKUP_FOR_SLOT)
{
// This one is not no-gc, but it preserves arg registers.
return RBM_ALLINT & ~RBM_INTERFACELOOKUP_FOR_SLOT_TRASH;
}
#endif
else
{
// This is the saved set of registers after a normal call.
30 changes: 21 additions & 9 deletions src/coreclr/jit/gcencode.cpp
Original file line number Diff line number Diff line change
@@ -3199,9 +3199,24 @@ size_t GCInfo::gcMakeRegPtrTable(BYTE* dest, int mask, const InfoHdr& header, un

callArgCnt = genRegPtrTemp->rpdPtrArg;

unsigned gcrefRegMask = genRegPtrTemp->rpdCallGCrefRegs;
unsigned gcrefRegMask = 0;

byrefRegMask = genRegPtrTemp->rpdCallByrefRegs;
byrefRegMask = 0;

// The order here is fixed: it must agree with the order assumed in eetwain.
// NB: x86 GC decoder does not report return registers at call sites.
static const regNumber calleeSaveOrder[] = {REG_EDI, REG_ESI, REG_EBX, REG_EBP};
for (unsigned i = 0; i < ArrLen(calleeSaveOrder); i++)
{
if ((genRegPtrTemp->rpdCallGCrefRegs & (1 << (calleeSaveOrder[i] - REG_INT_FIRST))) != 0)
{
gcrefRegMask |= 1u << i;
}
if ((genRegPtrTemp->rpdCallByrefRegs & (1 << (calleeSaveOrder[i] - REG_INT_FIRST))) != 0)
{
byrefRegMask |= 1u << i;
}
}

assert((gcrefRegMask & byrefRegMask) == 0);

@@ -4465,8 +4480,8 @@ void GCInfo::gcMakeRegPtrTable(
assert(call->u1.cdArgMask == 0 && call->cdArgCnt == 0);

// Other than that, we just have to deal with the regmasks.
regMaskSmall gcrefRegMask = call->cdGCrefRegs & RBM_CALL_GC_REGS.GetIntRegSet();
regMaskSmall byrefRegMask = call->cdByrefRegs & RBM_CALL_GC_REGS.GetIntRegSet();
regMaskSmall gcrefRegMask = call->cdGCrefRegs;
regMaskSmall byrefRegMask = call->cdByrefRegs;

assert((gcrefRegMask & byrefRegMask) == 0);

@@ -4552,11 +4567,8 @@ void GCInfo::gcMakeRegPtrTable(
{
// This is a true call site.

regMaskSmall gcrefRegMask =
genRegMaskFromCalleeSavedMask(genRegPtrTemp->rpdCallGCrefRegs).GetIntRegSet();

regMaskSmall byrefRegMask =
genRegMaskFromCalleeSavedMask(genRegPtrTemp->rpdCallByrefRegs).GetIntRegSet();
regMaskSmall gcrefRegMask = regMaskSmall(genRegPtrTemp->rpdCallGCrefRegs << REG_INT_FIRST);
regMaskSmall byrefRegMask = regMaskSmall(genRegPtrTemp->rpdCallByrefRegs << REG_INT_FIRST);

assert((gcrefRegMask & byrefRegMask) == 0);

41 changes: 41 additions & 0 deletions src/coreclr/jit/gentree.cpp
Original file line number Diff line number Diff line change
@@ -1870,6 +1870,47 @@ void CallArgs::Remove(CallArg* arg)
assert(!"Did not find arg to remove in CallArgs::Remove");
}

//---------------------------------------------------------------
// RemoveLate: Remove an argument from the argument list and late argument list.
//
// Parameters:
// arg - The arg to remove.
//
// Remarks:
// This can be used to remove arguments after ABI determination and after morph.
// It removes the argument from both the early and late list. However, no ABI
// information is updated. Caller needs to know what they are doing.
//
void CallArgs::RemoveLate(CallArg* arg)
{
CallArg** slot = &m_lateHead;
while (*slot != nullptr)
{
if (*slot == arg)
{
*slot = arg->GetLateNext();
break;
}

slot = &(*slot)->LateNextRef();
}

slot = &m_head;
while (*slot != nullptr)
{
if (*slot == arg)
{
*slot = arg->GetNext();
RemovedWellKnownArg(arg->GetWellKnownArg());
return;
}

slot = &(*slot)->NextRef();
}

assert(!"Did not find arg to remove in CallArgs::RemoveLate");
}

#ifdef TARGET_XARCH
//---------------------------------------------------------------
// NeedsVzeroupper: Determines if the call needs a vzeroupper emitted before it is invoked
1 change: 1 addition & 0 deletions src/coreclr/jit/gentree.h
Original file line number Diff line number Diff line change
@@ -4777,6 +4777,7 @@ class CallArgs
CallArg* InsertAfterThisOrFirst(Compiler* comp, const NewCallArg& arg);
void PushLateBack(CallArg* arg);
void Remove(CallArg* arg);
void RemoveLate(CallArg* arg);

template <typename CopyNodeFunc>
void InternalCopyFrom(Compiler* comp, CallArgs* other, CopyNodeFunc copyFunc);
15 changes: 9 additions & 6 deletions src/coreclr/jit/jitgcinfo.h
Original file line number Diff line number Diff line change
@@ -162,7 +162,13 @@ class GCInfo
regMaskSmall rpdDel; // regptr bitset being removed
} rpdCompiler;

unsigned short rpdPtrArg; // arg offset or popped arg count
struct
{
// Registers after call containing GC/byref (index 0 = REG_INT_FIRST)
unsigned int rpdCallGCrefRegs;
unsigned int rpdCallByrefRegs;
unsigned short rpdPtrArg; // arg offset or popped arg count
};
};

#ifndef JIT32_GCENCODER
@@ -182,11 +188,8 @@ class GCInfo
return (GCtype)rpdGCtype;
}

unsigned short rpdIsThis : 1; // is it the 'this' pointer
unsigned short rpdCall : 1; // is this a true call site?
unsigned short : 1; // Padding bit, so next two start on a byte boundary
unsigned short rpdCallGCrefRegs : CNT_CALL_GC_REGS; // Callee-saved and return registers containing GC pointers.
unsigned short rpdCallByrefRegs : CNT_CALL_GC_REGS; // Callee-saved and return registers containing byrefs.
unsigned short rpdIsThis : 1; // is it the 'this' pointer
unsigned short rpdCall : 1; // is this a true call site?

#ifndef JIT32_GCENCODER
bool rpdIsCallInstr()
Loading

Unchanged files with check annotations Beta

<!-- Use IgnoreStandardErrorWarningFormat because Arcade sets WarnAsError and there's an existing warning in the native build. -->
<Message Text="Executing &quot;$(MSBuildThisFileDirectory)$(_CoreClrBuildScript)&quot; @(_CoreClrBuildArg->'%(Identity)',' ')" Importance="High" />
<Exec Command="&quot;$(MSBuildThisFileDirectory)$(_CoreClrBuildScript)&quot; @(_CoreClrBuildArg->'%(Identity)',' ')"

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / jit-cfg (Build linux-x64 checked)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os linux -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build android-x64 Release AllSubsets_CoreCLR)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -os android -outputrid android-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/android.x64.Release/cdac-build-tool/cdac-build-tool.dll" -component runtime -component alljits -cmakeargs "-DANDROID_STL=c++_static" -cmakeargs -DANDROID_CPP_FEATURES="no-rtti exceptions"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime-dev-innerloop (Build linux_musl-x64 debug Musl_Validation)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -debug -ci -os linux -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Debug/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / dotnet-linker-tests (Build linux-x64 release Runtime_Release)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux_musl-x64 Debug AllSubsets_CoreCLR)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux_musl-x64 Debug CoreCLR_Libraries)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux-x64 Debug CoreCLR_Libraries)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux-x64 Debug Libraries_CheckedCoreCLR)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os linux -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux_musl-x64 Debug Libraries_CheckedCoreCLR)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os linux -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux-x64 checked CoreCLR_ReleaseLibraries)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os linux -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build freebsd-x64 Debug CoreCLR_TwoStage)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os freebsd -outputrid freebsd-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/freebsd.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / dotnet-linker-tests (Build osx-x64 release Runtime_Release)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/Users/runner/work/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -os osx -outputrid osx-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/Users/runner/work/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/Users/runner/work/1/s/artifacts/bin/coreclr/osx.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build osx-x64 Debug Libraries_CheckedCoreCLR)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/Users/runner/work/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -os osx -outputrid osx-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/Users/runner/work/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/Users/runner/work/1/s/artifacts/bin/coreclr/osx.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build linux-x64 checked Native_GCC)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked gcc -ci -os linux -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime (Build osx-x64 Debug CoreCLR_Libraries)

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/Users/runner/work/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -os osx -outputrid osx-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/Users/runner/work/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/Users/runner/work/1/s/artifacts/bin/coreclr/osx.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / dotnet-linker-tests

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / dotnet-linker-tests

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/Users/runner/work/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -os osx -outputrid osx-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/Users/runner/work/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/Users/runner/work/1/s/artifacts/bin/coreclr/osx.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime-dev-innerloop

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -debug -ci -os linux -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Debug/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / runtime

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -release -ci -cross -os linux -pgodatapath "/__w/1/s/.packages/optimization.linux-x64.pgo.coreclr/1.0.0-prerelease.25104.10" -outputrid linux-musl-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Release/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.

Check failure on line 105 in src/coreclr/runtime.proj

Azure Pipelines / jit-cfg

src/coreclr/runtime.proj#L105

src/coreclr/runtime.proj(105,5): error MSB3073: (NETCORE_ENGINEERING_TELEMETRY=Build) The command ""/__w/1/s/src/coreclr/build-runtime.sh" -x64 -checked -ci -cross -os linux -outputrid linux-x64 -cmakeargs "-DCLR_DOTNET_HOST_PATH=/__w/1/s/.dotnet/dotnet" -cmakeargs "-DCDAC_BUILD_TOOL_BINARY_PATH=/__w/1/s/artifacts/bin/coreclr/linux.x64.Checked/cdac-build-tool/cdac-build-tool.dll"" exited with code 2.
IgnoreStandardErrorWarningFormat="true" />
</Target>