diff options
author | Pat Gavlin <pagavlin@microsoft.com> | 2017-02-22 11:05:25 -0800 |
---|---|---|
committer | Pat Gavlin <pagavlin@microsoft.com> | 2017-02-22 17:35:37 -0800 |
commit | ce70f4c2acae22fd8eaee1588c3f54596e521c8a (patch) | |
tree | 53169d7067138217e632aaa8f655a67d668c2c5f /src/jit/emit.h | |
parent | 749180a3799da8a495981ba85734dfffd09115f3 (diff) | |
download | coreclr-ce70f4c2acae22fd8eaee1588c3f54596e521c8a.tar.gz coreclr-ce70f4c2acae22fd8eaee1588c3f54596e521c8a.tar.bz2 coreclr-ce70f4c2acae22fd8eaee1588c3f54596e521c8a.zip |
Do not report FP restores in x86 epilogs.
The x86 unwinder neither needs nor expects to see these restores (which
right now consist solely of a `vzeroupper` instruction that is emitted
to eliminate AVX <-> SSE transition penalties), which was causing unwind
failures under GC stress. This change stops reporting these restores as
part of a function epilog.
Fixes #9452.
Diffstat (limited to 'src/jit/emit.h')
-rw-r--r-- | src/jit/emit.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/jit/emit.h b/src/jit/emit.h index f57cc0a0f7..186c60f4a8 100644 --- a/src/jit/emit.h +++ b/src/jit/emit.h @@ -1518,14 +1518,21 @@ protected: // IG of the epilog, and use it to find the epilog offset at the end of code generation. struct EpilogList { - EpilogList* elNext; - insGroup* elIG; + EpilogList* elNext; + emitLocation elLoc; + + EpilogList() + : elNext(nullptr), elLoc() + { + } }; EpilogList* emitEpilogList; // per method epilog list - head EpilogList* emitEpilogLast; // per method epilog list - tail public: + void emitStartEpilog(); + bool emitHasEpilogEnd(); size_t emitGenEpilogLst(size_t (*fp)(void*, unsigned), void* cp); @@ -1535,8 +1542,6 @@ public: void emitBegPrologEpilog(insGroup* igPh); void emitEndPrologEpilog(); - emitLocation emitEpilogBegLoc; - void emitBegFnEpilog(insGroup* igPh); void emitEndFnEpilog(); |