[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