summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/method_compiler.h
diff options
context:
space:
mode:
author Logan Chien <loganchien@google.com> 2012-02-17 18:50:32 +0800
committer Shih-wei Liao <sliao@google.com> 2012-02-20 23:14:10 -0800
commit8dfcbea64ef8c9279329119e42a626771669044d (patch)
tree06245a171b2983b5234b7bd60bef585ddd7e163e /src/compiler_llvm/method_compiler.h
parentdd110694e0edc27a588a68609c678751593f667f (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.h10
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);