From aa0fed014807506ab00f75ffe3bb22a45e7b6bc1 Mon Sep 17 00:00:00 2001 From: John Criswell Date: Mon, 19 Dec 2005 17:38:39 +0000 Subject: Added a command line option that allows the user to specify a list of functions that allocate memory. llvm-svn: 24862 --- llvm/lib/Analysis/DataStructure/Local.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'llvm/lib/Analysis') diff --git a/llvm/lib/Analysis/DataStructure/Local.cpp b/llvm/lib/Analysis/DataStructure/Local.cpp index 75ad018c149..3e6d424fc09 100644 --- a/llvm/lib/Analysis/DataStructure/Local.cpp +++ b/llvm/lib/Analysis/DataStructure/Local.cpp @@ -39,6 +39,12 @@ static cl::opt TrackIntegersAsPointers("dsa-track-integers", cl::Hidden, cl::desc("If this is set, track integers as potential pointers")); +static cl::list +AllocList("alloc-list", + cl::value_desc("list"), + cl::desc("List of functions that allocate memory from the heap"), + cl::CommaSeparated); + namespace llvm { namespace DS { // isPointerType - Return true if this type is big enough to hold a pointer. @@ -548,6 +554,19 @@ void GraphBuilder::visitCallSite(CallSite CS) { N->setModifiedMarker(); return; default: + // Determine if the called function is one of the specified heap + // allocation functions + for (cl::list::iterator AllocFunc = AllocList.begin(), + LastAllocFunc = AllocList.end(); + AllocFunc != LastAllocFunc; + ++AllocFunc) { + if (F->getName() == *(AllocFunc)) { + setDestTo(*CS.getInstruction(), + createNode()->setHeapNodeMarker()->setModifiedMarker()); + return; + } + } + if (F->getName() == "calloc" || F->getName() == "posix_memalign" || F->getName() == "memalign" || F->getName() == "valloc") { setDestTo(*CS.getInstruction(), -- cgit v1.2.3