[LLVMdev] Problem of use CallGraph

85 views
Skip to first unread message

Jianfei Hu

unread,
Aug 17, 2012, 4:23:04 AM8/17/12
to LLV...@cs.uiuc.edu
Hello,
I want to traverse CallGraph

code segment:


virtual void getAnalysisUsage(AnalysisUsage &AU) const
{
AU.addRequired<CallGraph>();
}

virtual bool runOnModule(Module &F)
{
CallGraph &g = getAnalysis<CallGraph>();
for ( CallGraph::iterator i = g.begin(); i != g.end(); i++)
{
errs()<<"-----------------\n";
errs()<<i->second->getFunction()->getName()<<"\n";
}
return false;
}

Compile:
g++ -fPIC -shared `llvm-config --cxxflags` -o MPIAnalysis.so MPIAnalysis.cpp,

when I use following command to run:
opt -load ./MPIAnalysis.so -hello < main
it shows the error:

-----------------
0 opt 0x085cddc8
Stack dump:
0. Program arguments: opt -load ./MPIAnalysis.so -hello
1. Running pass 'Hello World Pass' on module '<stdin>'.
Segmentation Error

I found similar Problem in
http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-July/033133.html
But all function are defined in single binary IR file 'main', none of
them are external.

Why could not print the name of CallGraphNode's function name?
_______________________________________________
LLVM Developers mailing list
LLV...@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Hongbin Zheng

unread,
Aug 17, 2012, 4:36:03 AM8/17/12
to Jianfei Hu, LLV...@cs.uiuc.edu
On Fri, Aug 17, 2012 at 4:23 PM, Jianfei Hu <hujian...@gmail.com> wrote:
> Hello,
> I want to traverse CallGraph
>
> code segment:
>
>
> virtual void getAnalysisUsage(AnalysisUsage &AU) const
> {
> AU.addRequired<CallGraph>();
> }
>
> virtual bool runOnModule(Module &F)
> {
> CallGraph &g = getAnalysis<CallGraph>();
> for ( CallGraph::iterator i = g.begin(); i != g.end(); i++)
> {
> errs()<<"-----------------\n";
You may try something like this:
if (CallGraphNode *CGN = i->second)
... CGN->getFunction()->getName() ...

Welson Sun

unread,
Aug 17, 2012, 1:14:55 PM8/17/12
to Hongbin Zheng, LLV...@cs.uiuc.edu
This is what you need:

#include "llvm/InitializePasses.h"

  PassRegistry &Registry = *PassRegistry::getPassRegistry();
  initializeBasicCallGraphPass(Registry);


-Welson
--
Welson



Jianfei Hu

unread,
Aug 19, 2012, 1:31:33 AM8/19/12
to LLV...@cs.uiuc.edu
Well, I read http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-July/033133.html
again and consult the information about "external node" in CallGraph.
http://llvm.org/docs/doxygen/html/CallGraph_8h_source.html
CallGraph would build an external nodes, and it linked to all funtions
in module. But the node itself does not stand for any function.
i->second->getFunction() would return NULL.
I should read previous message more carefully.
Sorry for the my spam. :-(

2012/8/17 Hongbin Zheng <ethe...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages