[llvm-commits] [poolalloc] r40473 - /poolalloc/branches/SVA/lib/DSA/Local.cpp
Andrew Lenharth
alenhar2 at cs.uiuc.edu
Tue Jul 24 14:26:20 PDT 2007
Author: alenhar2
Date: Tue Jul 24 16:26:20 2007
New Revision: 40473
URL: http://llvm.org/viewvc/llvm-project?rev=40473&view=rev
Log:
last of llva functions, I hope
Modified:
poolalloc/branches/SVA/lib/DSA/Local.cpp
Modified: poolalloc/branches/SVA/lib/DSA/Local.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/branches/SVA/lib/DSA/Local.cpp?rev=40473&r1=40472&r2=40473&view=diff
==============================================================================
--- poolalloc/branches/SVA/lib/DSA/Local.cpp (original)
+++ poolalloc/branches/SVA/lib/DSA/Local.cpp Tue Jul 24 16:26:20 2007
@@ -50,6 +50,7 @@
static cl::opt<int>
CrashAt("dsa-crashat", cl::Hidden,
cl::desc("Crash on unknowns"));
+static bool DebugUnknown = false;
static int CrashCur = 0;
DSNode *DSNode::setUnknownNodeMarker() {
if (Crash && CrashCur == CrashAt) assert(0);
@@ -1124,14 +1125,81 @@
N->setReadMarker();
return true;
#ifdef LLVA_KERNEL
- //TODO:
- //state.c:
- //llva_ipush_function0,1,3 llva_push_function1 llva_push_syscall
- //llva_set_integer_stackp, llva_load_integer
- //llva_load_stackp
- //llva_load_invoke llva_save_invoke llva_icontext_save_retvalue
- //llva_get_icontext_stackp llva_set_icontext_stackp
- //llva_iset_privileged
+ } else if (F->getName() == "llva_print_icontext") {
+ DSNodeHandle RetNH = getValueDest(**(CS.arg_begin()));
+ RetNH.getNode()->setReadMarker();
+ return true;
+ } else if (F->getName() == "llva_ipush_function0" ||
+ F->getName() == "llva_ipush_function1" ||
+ F->getName() == "llva_ipush_function3" ||
+ F->getName() == "llva_push_function1") {
+ DSNodeHandle RetNH = getValueDest(**(CS.arg_begin()));
+ DSNodeHandle FP = getValueDest(**(CS.arg_begin() + 1));
+ RetNH.getNode()->setModifiedMarker()->setReadMarker()->foldNodeCompletely();
+ RetNH.addEdgeTo(FP);
+ return true;
+ } else if (F->getName() == "llva_push_syscall" ) {
+ DSNodeHandle RetNH = getValueDest(**(CS.arg_begin() + 1));
+ DSNodeHandle FP = getValueDest(**(CS.arg_begin() + 2));
+ RetNH.getNode()->setModifiedMarker()->setReadMarker()->foldNodeCompletely();
+ RetNH.addEdgeTo(FP);
+ return true;
+ } else if (F->getName() == "llva_config_ldt" ||
+ F->getName() == "llva_mm_flush_tlb" ||
+ F->getName() == "llva_register_syscall_cleaner") {
+ return true;
+ } else if (F->getName() == "llva_iset_privileged") {
+ DSNodeHandle RetNH = getValueDest(**(CS.arg_begin()));
+ RetNH.getNode()->setModifiedMarker();
+ return true;
+ } else if (F->getName() == "llva_load_invoke") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.invoke");
+ DSNodeHandle Dest = getValueDest(*GV);
+ Dest.getNode()->setModifiedMarker();
+ Dest.getNode()->mergeTypeInfo((*CS.arg_begin())->getType(), Dest.getOffset());
+ Dest.addEdgeTo(getValueDest(**CS.arg_begin()));
+ return true;
+ } else if (F->getName() == "llva_save_invoke") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.invoke");
+ DSNodeHandle Ptr = getValueDest(*GV);
+ if (Ptr.isNull())
+ Ptr = createNode();
+ Ptr.getNode()->setReadMarker();
+ Ptr.getNode()->mergeTypeInfo(CS.getInstruction()->getType(), Ptr.getOffset(), false);
+ setDestTo(*CS.getInstruction(), getLink(Ptr));
+ return true;
+ } else if (F->getName() == "llva_mm_load_pgtable") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.pgtable");
+ DSNodeHandle Dest = getValueDest(*GV);
+ Dest.getNode()->setModifiedMarker();
+ Dest.getNode()->mergeTypeInfo((*CS.arg_begin())->getType(), Dest.getOffset());
+ Dest.addEdgeTo(getValueDest(**CS.arg_begin()));
+ return true;
+ } else if (F->getName() == "llva_mm_save_pgtable") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.pgtable");
+ DSNodeHandle Ptr = getValueDest(*GV);
+ if (Ptr.isNull())
+ Ptr = createNode();
+ Ptr.getNode()->setReadMarker();
+ Ptr.getNode()->mergeTypeInfo(CS.getInstruction()->getType(), Ptr.getOffset(), false);
+ setDestTo(*CS.getInstruction(), getLink(Ptr));
+ return true;
+ } else if (F->getName() == "llva_load_kstackp") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.kstackp");
+ DSNodeHandle Dest = getValueDest(*GV);
+ Dest.getNode()->setModifiedMarker();
+ Dest.getNode()->mergeTypeInfo((*CS.arg_begin())->getType(), Dest.getOffset());
+ Dest.addEdgeTo(getValueDest(**CS.arg_begin()));
+ return true;
+ } else if (F->getName() == "llva_save_kstackp") {
+ Value* GV = F->getParent()->getNamedGlobal("llva.kstackp");
+ DSNodeHandle Ptr = getValueDest(*GV);
+ if (Ptr.isNull())
+ Ptr = createNode();
+ Ptr.getNode()->setReadMarker();
+ Ptr.getNode()->mergeTypeInfo(CS.getInstruction()->getType(), Ptr.getOffset(), false);
+ setDestTo(*CS.getInstruction(), getLink(Ptr));
+ return true;
} else if (F->getName() == "llva_icontext_save_retvalue") {
DSNodeHandle RetNH = getValueDest(**(CS.arg_begin()));
RetNH.getNode()->setModifiedMarker();
@@ -1197,7 +1265,9 @@
Ptr.getNode()->setReadMarker();
return true;
} else if (F->getName() == "llva_register_syscall" ||
- F->getName() == "llva_register_interrupt") {
+ F->getName() == "llva_register_interrupt" ||
+ F->getName() == "llva_register_general_exception" ||
+ F->getName() == "llva_register_memory_exception") {
//FIXME: track functions and clear Incomplete flags on them
// or set userspace flag on pointers
return true;
@@ -1498,7 +1568,7 @@
// to track the fact that the node points to SOMETHING, just something we
// don't know about. Make an "Unknown" node.
//
- CI.dump();
+ if (DebugUnknown) CI.dump();
setDestTo(CI, createNode()->setUnknownNodeMarker());
}
}
@@ -1516,7 +1586,7 @@
CurNode.mergeWith(getValueDest(**I));
if (DSNode *N = CurNode.getNode()) {
- Inst.dump();
+ if (DebugUnknown) Inst.dump();
N->setUnknownNodeMarker();
}
}
@@ -1688,6 +1758,12 @@
if (Function* F = dyn_cast<Function>(fun))
syscalls[num] = F;
}
+
+ //Add shadow globals for processor state
+ new GlobalVariable(PointerType::get(Type::SByteTy), false, GlobalValue::InternalLinkage, Constant::getNullValue(PointerType::get(Type::SByteTy)), "llva.pgtable", &M);
+ new GlobalVariable(PointerType::get(Type::SByteTy), false, GlobalValue::InternalLinkage, Constant::getNullValue(PointerType::get(Type::SByteTy)), "llva.invoke", &M);
+ new GlobalVariable(PointerType::get(Type::SByteTy), false, GlobalValue::InternalLinkage, Constant::getNullValue(PointerType::get(Type::SByteTy)), "llva.kstackp", &M);
+
#endif
const TargetData &TD = getAnalysis<TargetData>();
@@ -1758,7 +1834,7 @@
#endif
- return false;
+ return true;
}
// releaseMemory - If the pass pipeline is done with this pass, we can release
More information about the llvm-commits
mailing list