summaryrefslogtreecommitdiff
path: root/src/jit/emit.h
diff options
context:
space:
mode:
authorPat Gavlin <pagavlin@microsoft.com>2017-02-22 11:05:25 -0800
committerPat Gavlin <pagavlin@microsoft.com>2017-02-22 17:35:37 -0800
commitce70f4c2acae22fd8eaee1588c3f54596e521c8a (patch)
tree53169d7067138217e632aaa8f655a67d668c2c5f /src/jit/emit.h
parent749180a3799da8a495981ba85734dfffd09115f3 (diff)
downloadcoreclr-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.h13
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();