[llvm-commits] [poolalloc] r133146 - in /poolalloc/trunk: lib/AssistDS/TypeChecks.cpp runtime/DynamicTypeChecks/TypeRuntime.c
Arushi Aggarwal
aggarwa4 at illinois.edu
Wed Jun 15 21:54:41 PDT 2011
Author: aggarwa4
Date: Wed Jun 15 23:54:41 2011
New Revision: 133146
URL: http://llvm.org/viewvc/llvm-project?rev=133146&view=rev
Log:
Track types on strdup
Add support for 3rd parameter to main, envp
Modified:
poolalloc/trunk/lib/AssistDS/TypeChecks.cpp
poolalloc/trunk/runtime/DynamicTypeChecks/TypeRuntime.c
Modified: poolalloc/trunk/lib/AssistDS/TypeChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/AssistDS/TypeChecks.cpp?rev=133146&r1=133145&r2=133146&view=diff
==============================================================================
--- poolalloc/trunk/lib/AssistDS/TypeChecks.cpp (original)
+++ poolalloc/trunk/lib/AssistDS/TypeChecks.cpp Wed Jun 15 23:54:41 2011
@@ -61,6 +61,7 @@
static Constant *trackLoadInst;
static Constant *copyTypeInfo;
static Constant *RegisterArgv;
+static Constant *RegisterEnvp;
static Constant *compareTypeAndNumber;
unsigned int TypeChecks::getTypeMarker(const Type * Ty) {
@@ -118,6 +119,10 @@
Int32Ty, /*argc */
VoidPtrTy->getPointerTo(),/*argv*/
NULL);
+ RegisterEnvp = M.getOrInsertFunction("trackEnvpType",
+ VoidTy,
+ VoidPtrTy->getPointerTo(),/*envp*/
+ NULL);
trackGlobal = M.getOrInsertFunction("trackGlobal",
VoidTy,
VoidPtrTy,/*ptr*/
@@ -1285,7 +1290,7 @@
}
bool TypeChecks::visitMain(Module &M, Function &MainFunc) {
- if(MainFunc.arg_size() != 2)
+ if(MainFunc.arg_size() < 2)
// No need to register
return false;
@@ -1299,6 +1304,13 @@
fargs.push_back (Argv);
CallInst::Create (RegisterArgv, fargs.begin(), fargs.end(), "", InsertPt);
+ if(MainFunc.arg_size() < 3)
+ return true;
+
+ Value *Envp = ++AI;
+ std::vector<Value*> Args;
+ Args.push_back(Envp);
+ CallInst::Create(RegisterEnvp, Args.begin(), Args.end(), "", InsertPt);
return true;
}
@@ -1485,6 +1497,18 @@
CallInst::Create(trackInitInst, Args.begin(), Args.end(), "", I);
return true;
}
+ } else if (F->getNameStr() == std::string("__strdup")) {
+ CastInst *BCI_Dest = BitCastInst::CreatePointerCast(I, VoidPtrTy);
+ BCI_Dest->insertAfter(I);
+ CastInst *BCI_Src = BitCastInst::CreatePointerCast(I->getOperand(1), VoidPtrTy);
+ BCI_Src->insertAfter(BCI_Dest);
+ std::vector<Value *> Args;
+ Args.push_back(BCI_Dest);
+ Args.push_back(BCI_Src);
+ Args.push_back(getTagCounter());
+ Constant *F = M.getOrInsertFunction("trackStrcpyInst", VoidTy, VoidPtrTy, VoidPtrTy, Int32Ty, NULL);
+ CallInst *CI = CallInst::Create(F, Args.begin(), Args.end());
+ CI->insertAfter(BCI_Src);
} else if (F->getNameStr() == std::string("gettimeofday")) {
CastInst *BCI = BitCastInst::CreatePointerCast(I->getOperand(1), VoidPtrTy, "", I);
assert (isa<PointerType>(I->getOperand(1)->getType()));
Modified: poolalloc/trunk/runtime/DynamicTypeChecks/TypeRuntime.c
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/runtime/DynamicTypeChecks/TypeRuntime.c?rev=133146&r1=133145&r2=133146&view=diff
==============================================================================
--- poolalloc/trunk/runtime/DynamicTypeChecks/TypeRuntime.c (original)
+++ poolalloc/trunk/runtime/DynamicTypeChecks/TypeRuntime.c Wed Jun 15 23:54:41 2011
@@ -20,7 +20,7 @@
* choose address.
#define BASE ((void *)(0x2aaaab2a5000))
*/
-#define BASE ((void *)(0x2aaaab7b4000))
+#define BASE ((void *)(0x2aaaab88c000))
/*
* Do some macro magic to get mmap macros defined properly on all platforms.
*/
@@ -75,6 +75,13 @@
trackInitInst(argv, (argc + 1)*sizeof(char*), 0);
}
+void trackEnvpType(char **envp) {
+ int index = 0;
+ for(;envp[index] != NULL; ++index)
+ trackInitInst(envp[index], (strlen(envp[index]) + 1)*sizeof(char), 0);
+ trackInitInst(envp, (index )*sizeof(char*), 0);
+}
+
/**
* Record the global type and address in the shadow memory.
*/
More information about the llvm-commits
mailing list