How systems-nuts/unifico works
Unifico is a research toolkit for unified address spaces and stack-layout transformation, combining an LLVM/musl-based compilation environment with metadata tools, alignment utilities, runtime tracing experiments, and benchmark analysis. A typical workflow is to build binaries with the documented Unifico LLVM configuration, post-process ELF stack maps into transformation metadata, then run benchmarks or inspect stack behavior. The tree also contains call-site and stack-slot alignment tools and Pin/DynamoRIO tracing experiments. Several subsystems are represented by directory paths because their implementation was not sampled; their internal wiring is therefore left unspecified.
Main entry points: main.c Metadata generator · runs NPB runner · align Symbol alignment · pin_tools Pin tools
Components 23
Compiler integration
- Unifico LLVM
- Modified musl
- Symbol alignment
layout/callsites/align
Stack metadata
- Metadata generator
stack-metadata/src/main.c - ELF binary
- LLVM stack maps
stack-metadata/src/stackmap.c - Metadata sections
stack-metadata/src/write.c - Call-site alignment
layout/callsites/align - Stack-slot alignment
layout/slots/align
Tracing tools
- DynamoRIO clients
exploration/dynamorio_clients/register-loads-stores/register_loads_stores.cpp - Pin tools
exploration/pin_tools - Pin postprocessing
exploration/pin_postprocess/plot_accesses.py
Benchmarks
- NPB benchmarks
layout/npb - Olden benchmarks
layout/olden - BFS benchmarks
layout/prim/bfs - NPB runner
npb/runs - SPEC runner
spec2017/run_spec.py - PARSEC runner
parsec/run_parsec.py
Analysis utilities
- Benchmark analysis
npb/process_results.py - Stack-depth plots
plots/stack-depth-and-size/main.py - Stack assembly view
stack_ascii_printer/print_ascii_stack.py - Register pressure
register-pressure
Other components
- Researcher
Connections 27
- Researcher → Unifico LLVM: builds with
- Researcher → Modified musl: selects runtime
- Unifico LLVM → ELF binary: emits binary
- Unifico LLVM → LLVM stack maps: emits maps
- Researcher → Symbol alignment: aligns symbols
- Symbol alignment → Metadata generator: precedes processing
- Researcher → Metadata generator: runs postprocessor
- Metadata generator → ELF binary: opens and updates
- Metadata generator → LLVM stack maps: loads maps
- Metadata generator → Metadata sections: adds sections
- Researcher → Call-site alignment: uses alignment tools
- Researcher → Stack-slot alignment: uses alignment tools
- Researcher → DynamoRIO clients: runs tracing client
- Researcher → Pin tools: runs instrumentation
- Pin tools → Pin postprocessing: produces access data
- Researcher → NPB runner: runs benchmarks
- Researcher → SPEC runner: runs benchmarks
- Researcher → PARSEC runner: runs benchmarks
- NPB runner → NPB benchmarks: runs workloads
- SPEC runner → ELF binary: executes binaries
- PARSEC runner → ELF binary: executes binaries
- Researcher → Olden benchmarks: runs workloads
- Researcher → BFS benchmarks: runs workloads
- NPB runner → Benchmark analysis: provides results
- Researcher → Stack-depth plots: analyzes stack profiles
- Researcher → Stack assembly view: inspects assembly
- Researcher → Register pressure: analyzes register use