Call graphs with bsd.obj.mk

Jonathan Anderson jonathan at FreeBSD.org
Wed Sep 5 15:28:14 UTC 2012


Hi all,

While doing some hacking recently, I really wanted a call graph. Clang
and LLVM make this pretty easy, assuming you have the right CFLAGS, so
a little build system integration seemed to be in order. I did this,
it's pretty small and modular, and I find it useful, so I'm sharing
this work with the list in the hope of putting it into -CURRENT.

I've attached two BSD makefiles that let me produce call graphs from
any directory that includes bsd.obj.mk (which notably includes
binaries and libraries in src):

 - bsd.analysis.mk contains a 'callgraph' target that produces
${.OBJDIR}/_callgraph_.dot
 - bsd.llvm.mk contains a few LLVM helpers (e.g. to generate LLVM IR)

If you have clang, llvm-link and opt installed, this allows you to
generate a complete call graph for C code; assembler files are ignored
because we don't currently have assembly -> IR transformations. The
resulting graph can be pretty large and ugly (e.g. LLVM shows an
"external node" pseudo-function that calls everything), but it can be
filtered with scripts like those found at
https://github.com/trombonehero/dot-tools to produce really useful
graphs.

llvm-link and opt aren't included in the bootstrap tools, so I'm
currently doing this by installing the llvm-devel package. Perhaps we
might copy llvm-link and opt over to /usr/obj/usr/src/tmp, possibly
governed by a WITH_LLVM_TOOLS flag in src.conf or something?


Jon
-- 
Jonathan Anderson

jonathan at FreeBSD.org
http://freebsd.org/~jonathan/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bsd.analysis.mk
Type: application/octet-stream
Size: 938 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20120905/2e3fddcb/bsd.analysis.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bsd.llvm.mk
Type: application/octet-stream
Size: 1370 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20120905/2e3fddcb/bsd.llvm.obj


More information about the freebsd-arch mailing list