From bd8f6a836ff758158184f793837ba407a54f6ca5 Mon Sep 17 00:00:00 2001 From: Jonghyun Park Date: Wed, 1 Feb 2017 14:29:29 +0900 Subject: [PATCH] [x86/Linux] Create a minimal frame for funclets --- src/jit/codegencommon.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/jit/codegencommon.cpp b/src/jit/codegencommon.cpp index 396ea77374b4..dcc723a5cbef 100644 --- a/src/jit/codegencommon.cpp +++ b/src/jit/codegencommon.cpp @@ -10281,7 +10281,12 @@ void CodeGen::genFuncletProlog(BasicBlock* block) compiler->unwindBegProlog(); - // TODO Save callee-saved registers + // Save frame pointer + inst_RV(INS_push, REG_FPBASE, TYP_REF); + compiler->unwindPush(REG_FPBASE); + + // Save callee-saved registers + genPushCalleeSavedRegisters(); // This is the end of the OS-reported prolog for purposes of unwinding compiler->unwindEndProlog(); @@ -10303,7 +10308,11 @@ void CodeGen::genFuncletEpilog() ScopedSetVariable _setGeneratingEpilog(&compiler->compGeneratingEpilog, true); - // TODO Restore callee-saved registers + // Restore callee-saved registers + genPopCalleeSavedRegisters(); + + // Restore frame pointer + inst_RV(INS_pop, REG_EBP, TYP_I_IMPL); instGen_Return(0); }