|CFGGrind: Dynamic Control Flow Graph Reconstruction email@example.com (Fernando) (2019-11-25)|
|Date:||Mon, 25 Nov 2019 09:14:20 -0800 (PST)|
|Injection-Info:||gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="60771"; mail-complaints-to="firstname.lastname@example.org"|
|Posted-Date:||26 Nov 2019 13:22:56 EST|
We would like to present CFGGrind, a dynamic control flow graph
reconstructor that uses valgrind's infrastructure. The code is based on
callgrind and it is available at https://github.com/rimsa/CFGgrind. CFGGrind
reconstructs the CFG of the part of a program that has been executed. It's
like a dynamic disassembler. CFGs are reconstructed per function.
Our control flow graph representation uses phantom nodes to model branches
not taken during the execution. We also have a special halt node to model
flows that terminates program execution. We support successive refinements of
the control flow graphs by using the outputs produced in a previous run into
the next, and we can reconstruct the CFGs of programs that run in parallel.
We were able to run our reconstructor in the complete SPEC CPU2017 suite and
we compared with other valgrind tools, and with other CFG reconstructors. We
are, on average, 11% faster than callgrind and 4.5% slower than nulgrind.
Everything is free software. We hope this tool is of interest to the
community. Let us know what you think, and if further details are required.
Feedback is mostly appreciated, and if anyone wants to contribute to the
project, we will be happy to take in patches.
Return to the
Search the comp.compilers archives again.