Add shadow stack support to Dex compiler.
Change-Id: I8e188be3fb30c81e2a9e6e466264074ddf7b1624
diff --git a/src/compiler_llvm/method_compiler.h b/src/compiler_llvm/method_compiler.h
index 0ec4858..dd10bc8 100644
--- a/src/compiler_llvm/method_compiler.h
+++ b/src/compiler_llvm/method_compiler.h
@@ -86,6 +86,7 @@
UniquePtr<DalvikReg> retval_reg_;
llvm::BasicBlock* basic_block_reg_alloca_;
+ llvm::BasicBlock* basic_block_shadow_frame_alloca_;
llvm::BasicBlock* basic_block_reg_zero_init_;
llvm::BasicBlock* basic_block_reg_arg_init_;
std::vector<llvm::BasicBlock*> basic_blocks_;
@@ -94,6 +95,8 @@
llvm::BasicBlock* basic_block_unwind_;
llvm::BasicBlock* basic_block_unreachable_;
+ llvm::AllocaInst* shadow_frame_;
+
public:
MethodCompiler(InstructionSet insn_set,
@@ -129,6 +132,7 @@
void CreateFunction();
void EmitPrologue();
void EmitPrologueLastBranch();
+ void EmitPrologueAllocShadowFrame();
void EmitPrologueAssignArgRegister();
void EmitInstructions();
void EmitInstruction(uint32_t dex_pc, Instruction const* insn);
@@ -266,6 +270,12 @@
#undef GEN_INSN_ARGS
+ // Shadow frame helper function
+ void EmitPopShadowFrame();
+ void EmitUpdateLineNum(int32_t line_number);
+ void EmitUpdateLineNumFromDexPC(uint32_t dex_pc);
+
+
// Dex cache code generation helper function
llvm::Value* EmitLoadDexCacheAddr(MemberOffset dex_cache_offset);