commits
2025-08-26 | quebex: mark execFunc as INLINEABLE | Sören Tempel |
2025-08-26 | quebex-syntax: allow arbitrary alignment for data/type definitions | Sören Tempel |
2025-08-26 | quebex-symex: Rename Exec benchmark group | Sören Tempel |
2025-08-26 | quebex: rename benchmark suite | Sören Tempel |
2025-08-26 | quebex-symex: -fspecialise-aggressively | Sören Tempel |
Clone the repository to access all 229 commits.
README
A work-in-progress software analysis framework built around the QBE intermediate language.
Motivation
Existing analysis frameworks are predominantly built around LLVM. Unfortunately, LLVM is a fast moving target with constant changes and updates to its intermediate language. Therefore, tooling built around LLVM (e.g., KLEE) often requires dated LLVM versions. Obtaining these LLVM versions can be cumbersome and often hinders employment of these tools. To overcome these issues, maintainers of analysis tooling need to constantly invest time to catch-up with LLVM releases, instead of focusing on improving their analysis framework.
In order to reduce maintenance burden, this project attempts to investigate utilization of another intermediate language for software analysis: QBE. QBE is a much smaller scale project than LLVM and thereby offers a higher degree of stability. Further, QBE is much simpler than LLVM (e.g., providing fewer operations) and thereby also eases the implementation of certain analysis techniques. Nonetheless, there are sophisticated compiler frontends that can emit a representation in the QBE intermediate language (which can then be analyzed using quebex!). For example, SCC, cproc, or the Hare compiler.
Status
Proof of concept, not much to see here yet. Come back later!
Design Goals
This project is intentionally written in a simple subset of the Haskell programming language. It should be usable by anyone with a basic Haskell background (e.g., as obtained by reading Learn You a Haskell for Great Good!). Further, the project should require minimal long-term maintenance and should also support older GHC versions. Therefore, it uses the GHC2021 language standard and avoids usage of additional language extensions. Further, whenever possible, dependencies on external libraries that are not bundled by GHC must be avoided.
Development
Code should be formatted using ormolu. Git hooks performing several sanity checks, including ensuring the proper code formatting, are available. These hooks can be enabled using:
$ git config --local core.hooksPath .githooks
Further, a Guix environment for development purposes can be obtained using:
$ guix shell -L .guix/modules/ -m .guix/manifest.scm
License
This project uses the REUSE Specification to indicated used software license.