diff options
| author | 2012-02-17 18:50:32 +0800 | |
|---|---|---|
| committer | 2012-02-20 23:14:10 -0800 | |
| commit | 8dfcbea64ef8c9279329119e42a626771669044d (patch) | |
| tree | 06245a171b2983b5234b7bd60bef585ddd7e163e /src/compiler_llvm/method_compiler.h | |
| parent | dd110694e0edc27a588a68609c678751593f667f (diff) | |
Add shadow stack support to Dex compiler.
Change-Id: I8e188be3fb30c81e2a9e6e466264074ddf7b1624
Diffstat (limited to 'src/compiler_llvm/method_compiler.h')
| -rw-r--r-- | src/compiler_llvm/method_compiler.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compiler_llvm/method_compiler.h b/src/compiler_llvm/method_compiler.h index 0ec4858228..dd10bc8d42 100644 --- a/src/compiler_llvm/method_compiler.h +++ b/src/compiler_llvm/method_compiler.h @@ -86,6 +86,7 @@ class MethodCompiler { 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 @@ class MethodCompiler { llvm::BasicBlock* basic_block_unwind_; llvm::BasicBlock* basic_block_unreachable_; + llvm::AllocaInst* shadow_frame_; + public: MethodCompiler(InstructionSet insn_set, @@ -129,6 +132,7 @@ class MethodCompiler { 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 @@ class MethodCompiler { #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); |