I've been beginning to work with LLVM and I'm interested to know if there is a programmatic way to extract the control flow graph and/or basic blocks from LLVM/clang in order to do some analysis on them. Is there a way to hook into the tool chain and pull out this information instead of doing a straight compilation? If not, what are the alternatives?
Extracting Basic Blocks/CFG from LLVM/clang on the Backend
1.9k views Asked by thegravian At
2
There are 2 answers
0
Matthieu M.
On
The CFG (Control Flow Graph) is purely part of CLang.
The CFG supports Visitors (see CFG.h) but you might want to ask on CLang dev list if there is a code sample available.
Related Questions in LLVM
- Get search paths for headers in the standard library in Clang?
- Build LLVM, Clang and Libfuzzer
- build boost use libc++ on linux use wrong --target
- LLD: How to Use –dll and –add-stdcall-alias Swiches
- LLVM code generation causes problems with pointer arithmetic
- How to identify call void @llvm.dbg.declare instructions in LLVM IR?
- Get all references to a C variable using llvm
- New to llvm - trying to make the files but getting collect2: fatal error
- How to fix loop not unrolled: the optimizer was unable to perform the requested transformation in clang?
- Where I can find the detail definition and use of LLVM-backend related stuff?
- Can the binary optimized by Autofdo and bolt be iteratively optimized?
- How to convert LLVM IR file (*.ll) to riscv64 assembly code? llc -march=riscv64 failed
- how to fuzz program using libfuzzer?
- How to run a single case in llvm unittest
- Building llvm and runtime
Related Questions in CLANG
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Get search paths for headers in the standard library in Clang?
- Build LLVM, Clang and Libfuzzer
- build boost use libc++ on linux use wrong --target
- Clang possibly skipping line(s) of code while compiling
- ld: library 'nsl' not found, /usr/local/go/pkg/tool/darwin_arm64/link: running clang failed: exit status 1 in macOS
- duplicate symbol in clang for template specialization of static member
- Windows shared segment in clang
- How can I switch from clang11 to clang14 on freebsd?
- LLD: How to Use –dll and –add-stdcall-alias Swiches
- dyld error When Including Debug Symbols In native C Library
- How to build veins inet project in omnet
- R2 max value is outside of the allowed memory range after explicit bounds checking
- C++: initialization of auto&& with the ternary operator leads to the copy constructor call on MSVC
- How to identify call void @llvm.dbg.declare instructions in LLVM IR?
Related Questions in CODE-ANALYSIS
- Are there any way to export Sonarlint report from Intellij?
- generate incoming call graph
- Find line of text in MsgBox with a string literal with VBA regex
- Don't resolve typedefs in Visual Studio 2022 tooltips
- Disable "Code analysis" in Visual Studio Code with C++
- error CS1056: Unexpected character '$' during code analysis
- Generate a 'readonly record struct' using Roslyn
- How can I see debug info about the VS Code Cpptools extension's IntelliSense and Code Analysis?
- dotnet Code Analysis ignoring certain entries in .editorconfig file
- How can you distinguish between a standard library call, a third-party library call, and an API call from the repository?
- Clarification needed: core differences between two receipt selection code snippets
- Async method's return decorated with "NotNullIfNotNull" still returns variable that may be null
- Why is Visual Studio saying this cast from System.Int32 to System.Byte is redundant?
- Generic not-null validator for CA1062 in .NET 6
- How do code analysis, AST generation and SARIF report work in MSBuild?
Related Questions in CONTROL-FLOW-GRAPH
- How to get reasonable "topological order" of control flow graph (CFG) which may have loops when calculating MD index?
- Static analysis of unused assignments
- Drawing cfg using antlr4, graphiz and python and parser is empty
- Decompilation independent pattern structuring of cfg
- Decompilation creating basic blocks
- Is there a way to get Program Dependency Graph of a binary with angr?
- Control Flow Graph : properly identify loop "condition"
- Number of edges and nodes in this control flow graph (CFG)?
- Is there a way to get the filepaths of a given route's middleware in Express? Or create CFG that does?
- How exactly to construct "basic blocks" for a compiler (using JavaScript as an example)?
- Clarification on what exactly constitutes as a continue target in Vulkan SPIR-V
- It is possible to generate CFG + Callgraph in one file?
- How to determine if a BasicBlock is controled by a `if`
- Soot - Get JimpleBody from a CFG
- Time of Day affecting how Python Package is Loaded
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
LLVM supports plugin passes. It would be straight-forward to write a pass to emit whatever data you want in whatever format you want.
However, LLVM has a large suite of analysis and transform passes already. You may be able to use the existing LLVM framework to extract the data you want after running the analysis passes you want.
Take a look at the docs, the code, and then ask more specific questions on the LLVMdev list to get the best answers.