-
Notifications
You must be signed in to change notification settings - Fork 2.6k
[x86/Linux] Use GCInfo for funclet unwinding #10782
[x86/Linux] Use GCInfo for funclet unwinding #10782
Conversation
|
@dotnet-bot test Ubuntu x64 Formatting please |
|
@dotnet-bot test Ubuntu arm Cross Release Build please |
|
@dotnet-bot Test OSX10.12 x64 Checked Build and Test (build break fix) |
src/vm/eetwain.cpp
Outdated
| _ASSERTE(*castto(table, unsigned short *)++ == 0xBABE); | ||
| #endif | ||
|
|
||
| bool isPartialArgInfo; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A nit, could you please name it hasPartialArgInfo instead (like in "the current frame has partial arg info")?
|
@jkotas, @BruceForstall can you please share your opinion on making the funclets fully interruptible and generating full arg info for them? I would like to make sure there are no downsides I don't see. |
|
The downsides are bigger GC info and lower JIT throughput. Each of these hacks make |
| genInterruptible = true; | ||
| #endif // UNIX_X86_ABI | ||
| } | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please don't insert the code here; I don't want to dilute or confuse the comment here. Instead, add code below the #endif // _TARGET_X86_ below, e.g.:
#ifdef UNIX_X86_ABI
if (info.compXcptnsCount > 0)
{
assert(!codeGen->isGCTypeFixed());
// Enforce fully interruptible codegen for funclet unwinding
genInterruptible = true;
}
#endif // UNIX_X86_ABI
|
As a data point, can you compute the increase in GC info size on System.Private.CoreLib.ni.dll? If you can use jit-diff (from jitutils), the |
|
@BruceForstall jit-diff is still unavailable on x86/Linux. It seems that jit-diff has a strict dependency on dotnet host which is unavailable, yet: |
|
@parjong Have you tried jit-diff on linux/x64? You could do Linux/x86 asm diffs there using the altjit. |
|
@BruceForstall I tried, but x86/Linux JIT cannot be loaded from x64/Linux crossgen due to dynamic library issue. x86/Linux JIT is linked to x86/Linux libunwind which does not exist in x64/Linux. |
|
@parjong ok. you could do it from x86 Windows. |
This assert was formerly enabled only for the "full arg info case", i.e. when there was not a frame on x86. WIth PR dotnet#10782 the sense of the first condition was inadvertently changed. With PR dotnet#17363 the tracking of `argCnt` vs. `argHigh` was fixed so that the assert is correct for the "partial arg info" case. The first condition should be removed to make it cover the "full argo info case" as well (as before dotnet#10782).
This commit revises x86/Linux unwinder to use GCInfo(GetPushedArgSize) for funclet unwinding.
This commit includes the following additional changes: