From 978277097e412930a26dc966cd63bd14453566ef Mon Sep 17 00:00:00 2001 From: bdr7fv <bdr7fv@git.zephyr-software.com> Date: Wed, 23 Nov 2011 15:42:34 +0000 Subject: [PATCH] The t&e version of PN will now ignore functions that do not deallocate the stack. Former-commit-id: b81c323334b442dbbc8f1a64115bf6066ff48a39 --- tools/transforms/OffsetInference.cpp | 20 ++++++++++++++++++++ tools/transforms/PNTransformDriver.cpp | 1 + 2 files changed, 21 insertions(+) diff --git a/tools/transforms/OffsetInference.cpp b/tools/transforms/OffsetInference.cpp index 92dabbaa7..20a7437d0 100644 --- a/tools/transforms/OffsetInference.cpp +++ b/tools/transforms/OffsetInference.cpp @@ -171,6 +171,8 @@ PNStackLayout* OffsetInference::SetupLayout(BasicBlock_t *entry, Function_t *fun //TODO: what about moving esp into a register? //TODO: Try catches for exceptions thrown by PNStackLayout, for now asserts will fail in PNStackLayout + +//TODO: For t&e this function will void OffsetInference::FindAllOffsets(Function_t *func) { PNStackLayout *pn_all_offsets = NULL; @@ -198,6 +200,10 @@ void OffsetInference::FindAllOffsets(Function_t *func) pn_all_offsets = SetupLayout(block,func); + //TODO: this is just for t&e, remove for other versions, + //for t&e don't produce an inference if not dealloc is found + bool dealloc_flag=false; + if(pn_all_offsets != NULL) { unsigned int stack_frame_size = pn_all_offsets->GetOriginalAllocSize(); @@ -460,12 +466,26 @@ void OffsetInference::FindAllOffsets(Function_t *func) } } } + else if(regexec(&(pn_regex.regex_stack_dealloc), disasm_str.c_str(), max, pmatch, 0)==0) + { + //if we find a dealloc, set a flag indicating as such + dealloc_flag = true; + } else { cerr<<"OffsetInference: FindAllOffsets: No Pattern Match"<<endl; } } + //if no dealloc is found, set all inferences to null + if(!dealloc_flag) + { + pn_direct_offsets = NULL; + pn_scaled_offsets = NULL; + pn_all_offsets = NULL; + pn_p1_offsets = NULL; + } + direct[func->GetName()] = pn_direct_offsets; scaled[func->GetName()] = pn_scaled_offsets; all_offsets[func->GetName()] = pn_all_offsets; diff --git a/tools/transforms/PNTransformDriver.cpp b/tools/transforms/PNTransformDriver.cpp index 5839362f2..754af3c22 100644 --- a/tools/transforms/PNTransformDriver.cpp +++ b/tools/transforms/PNTransformDriver.cpp @@ -504,6 +504,7 @@ void PNTransformDriver::GenerateTransforms(VariantIR_t *virp, string BED_script, } +//TODO: rewrite, this was a hackish solution to clean up the code for the hierarchy, which isn't even used for T&E vector<PNStackLayout*> PNTransformDriver::GenerateInferences(Function_t *func,int level) { vector<PNStackLayout*> layouts; -- GitLab