LLVMdev Digest, Vol 53, Issue 72

Hello All,

I am currently working on a project which requires me to generate a .bc file for given .c file and open the .bc file to identify various functions and the caller callee relationship amongst them. The end goal is to generate a type of callgraph for all the functions present in the original C code. I am quite new to llvm and will really appreciate if I can be provided some pointers. I am looking at various llvm passes, but I am not quite sure if thats the way to go.

Your help will be greatly appreciated.

Thanks
SHWETA

Hi Shweta,

I am currently working on a project which requires me to generate a .bc file
for given .c file and open the .bc file to identify various functions and
the caller callee relationship amongst them. The end goal is to generate a
type of callgraph for all the functions present in the original C code. I am
quite new to llvm and will really appreciate if I can be provided some
pointers. I am looking at various llvm passes, but I am not quite sure if
thats the way to go.

suppose cg.c contains
  void f(void);
  void g(void) { f(); }
  void h(void) { g(); }

Then you can print the callgraph like this:

$ llvm-gcc -c -emit-llvm cg.c -o - | opt -print-callgraph -disable-output
CallGraph Root is: <<null function: 0x0x2029510>>
Call graph node <<null function: 0x0x2029510>>:
  Calls function 'g'
  Calls function 'f'
  Calls function 'h'

Call graph node for function: 'g'
  Calls function 'f'

Call graph node for function: 'f'
  Calls external node

Call graph node for function: 'h'
  Calls function 'g'