#include "Support/StringExtras.h"
#include <algorithm>
#include <sstream>
-using std::vector;
-using std::string;
static cl::opt<bool>
DisablePtrHashing("tracedisablehashdisable", cl::Hidden,
cl::desc("Disable pointer hashing in the -trace or -tracem "
"passes"));
-static cl::list<string>
+static cl::list<std::string>
TraceFuncNames("tracefunc", cl::desc("Only trace specific functions in the "
"-trace or -tracem passes"),
cl::value_desc("function"), cl::Hidden);
static void TraceValuesAtBBExit(BasicBlock *BB,
Function *Printf, Function* HashPtrToSeqNum,
- vector<Instruction*> *valuesStoredInFunction);
+ std::vector<Instruction*> *valuesStoredInFunction);
// We trace a particular function if no functions to trace were specified
// or if the function is in the specified list.
//
bool doit(Function *M);
- virtual void handleBasicBlock(BasicBlock *BB, vector<Instruction*> &VI) = 0;
+ virtual void handleBasicBlock(BasicBlock *BB,
+ std::vector<Instruction*> &VI) = 0;
// runOnFunction - This method does the work.
//
struct FunctionTracer : public InsertTraceCode {
// Ignore basic blocks here...
- virtual void handleBasicBlock(BasicBlock *BB, vector<Instruction*> &VI) {}
+ virtual void handleBasicBlock(BasicBlock *BB,
+ std::vector<Instruction*> &VI) {}
};
struct BasicBlockTracer : public InsertTraceCode {
// Trace basic blocks here...
- virtual void handleBasicBlock(BasicBlock *BB, vector<Instruction*> &VI) {
+ virtual void handleBasicBlock(BasicBlock *BB,
+ std::vector<Instruction*> &VI) {
TraceValuesAtBBExit(BB, externalFuncs.PrintfFunc,
externalFuncs.HashPtrFunc, &VI);
}
void ExternalFuncs::doInitialization(Module &M) {
const Type *SBP = PointerType::get(Type::SByteTy);
const FunctionType *MTy =
- FunctionType::get(Type::IntTy, vector<const Type*>(1, SBP), true);
+ FunctionType::get(Type::IntTy, std::vector<const Type*>(1, SBP), true);
PrintfFunc = M.getOrInsertFunction("printf", MTy);
// uint (sbyte*)
}
-static inline GlobalVariable *getStringRef(Module *M, const string &str) {
+static inline GlobalVariable *getStringRef(Module *M, const std::string &str) {
// Create a constant internal string reference...
Constant *Init = ConstantArray::get(str);
(isa<LoadInst>(I) || LiveAtBBExit(I));
}
-static string getPrintfCodeFor(const Value *V) {
+static std::string getPrintfCodeFor(const Value *V) {
if (V == 0) return "";
if (V->getType()->isFloatingPoint())
return "%g";
static void InsertPrintInst(Value *V, BasicBlock *BB, Instruction *InsertBefore,
- string Message,
+ std::string Message,
Function *Printf, Function* HashPtrToSeqNum) {
// Escape Message by replacing all % characters with %% chars.
- string Tmp;
+ std::string Tmp;
std::swap(Tmp, Message);
- string::iterator I = std::find(Tmp.begin(), Tmp.end(), '%');
+ std::string::iterator I = std::find(Tmp.begin(), Tmp.end(), '%');
while (I != Tmp.end()) {
Message.append(Tmp.begin(), I);
Message += "%%";
// Turn the format string into an sbyte *
Constant *GEP =ConstantExpr::getGetElementPtr(ConstantPointerRef::get(fmtVal),
- vector<Constant*>(2,Constant::getNullValue(Type::LongTy)));
+ std::vector<Constant*>(2,Constant::getNullValue(Type::LongTy)));
// Insert a call to the hash function if this is a pointer value
if (V && isa<PointerType>(V->getType()) && !DisablePtrHashing) {
if (V->getType() != SBP) // Cast pointer to be sbyte*
V = new CastInst(V, SBP, "Hash_cast", InsertBefore);
- vector<Value*> HashArgs(1, V);
+ std::vector<Value*> HashArgs(1, V);
V = new CallInst(HashPtrToSeqNum, HashArgs, "ptrSeqNum", InsertBefore);
}
// Insert the first print instruction to print the string flag:
- vector<Value*> PrintArgs;
+ std::vector<Value*> PrintArgs;
PrintArgs.push_back(GEP);
if (V) PrintArgs.push_back(V);
new CallInst(Printf, PrintArgs, "trace", InsertBefore);
static void InsertVerbosePrintInst(Value *V, BasicBlock *BB,
Instruction *InsertBefore,
- const string &Message, Function *Printf,
+ const std::string &Message, Function *Printf,
Function* HashPtrToSeqNum) {
std::ostringstream OutStr;
if (V) WriteAsOperand(OutStr, V);
if (V->getType() != SBP) // Cast pointer to be sbyte*
V = new CastInst(V, SBP, "RPSN_cast", InsertBefore);
- vector<Value*> releaseArgs(1, V);
+ std::vector<Value*> releaseArgs(1, V);
new CallInst(ReleasePtrFunc, releaseArgs, "", InsertBefore);
}
if (V->getType() != SBP) // Cast pointer to be sbyte*
V = new CastInst(V, SBP, "RP_cast", InsertBefore);
- vector<Value*> releaseArgs(1, V);
+ std::vector<Value*> releaseArgs(1, V);
new CallInst(RecordPtrFunc, releaseArgs, "", InsertBefore);
}
//
static void TraceValuesAtBBExit(BasicBlock *BB,
Function *Printf, Function* HashPtrToSeqNum,
- vector<Instruction*> *valuesStoredInFunction) {
+ std::vector<Instruction*> *valuesStoredInFunction) {
// Get an iterator to point to the insertion location, which is
// just before the terminator instruction.
//
if (!TraceThisFunction(F))
return false;
- vector<Instruction*> valuesStoredInFunction;
- vector<BasicBlock*> exitBlocks;
+ std::vector<Instruction*> valuesStoredInFunction;
+ std::vector<BasicBlock*> exitBlocks;
// Insert code to trace values at function entry
InsertCodeToShowFunctionEntry(F, externalFuncs.PrintfFunc,
// Push a pointer set for recording alloca'd pointers at entry.
if (!DisablePtrHashing)
- new CallInst(externalFuncs.PushOnEntryFunc, vector<Value*>(), "",
+ new CallInst(externalFuncs.PushOnEntryFunc, std::vector<Value*>(), "",
F.getEntryBlock().begin());
for (Function::iterator BB = F.begin(); BB != F.end(); ++BB) {
// Release all recorded pointers before RETURN. Do this LAST!
if (!DisablePtrHashing)
- new CallInst(externalFuncs.ReleaseOnReturnFunc, vector<Value*>(), "",
- exitBlocks[i]->getTerminator());
+ new CallInst(externalFuncs.ReleaseOnReturnFunc, std::vector<Value*>(),
+ "", exitBlocks[i]->getTerminator());
}
return true;