quebex

A software analysis framework built around the QBE intermediate language

git clone https://git.8pit.net/quebex.git

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.