(from https://goo.gl/vhswUP, a.k.a., https://hackmd.io/EwQwRgJgZgnAxgdgLQBYYwAysgUyTANmBlQFYwYIJSEMRScg)
Build systems, compilers, linkers, oh my!
TODOs
- decouple thread0 allocation from jemalloc
- sanitizer integration
- malloc not coupled to csu (could have libjemalloc)
- ability to replace with debug malloc, secure malloc, etc.
- kernel IFUNC support - armv8.1 atomic instructions
- Investigate autofdo (pgo)
- Empirical questions out of pgo
- Collect profile data from (buildworld libraries? package build cluster?)
- Incrementally commit CHERIbuild changes
Topics to cover
- Cross Building from non-FreeBSD / CHERIBuild
- Make, meta-mode, etc.
- Build system replacement
- LLD integration
- External toolchain
- IRification
- Static analysis and sanitizers
LLD
- Ed gave an update on LLD status in FreeBSD
- default on arm64 now
- 20k/27k ports build on amd64
- building ports infrastructure to set
USES_BFDor the like - functional on armv7, arm64, amd64, does not support armv4/armv5/armv6 yet
- i386 has bugs
- MIPS in progress: possible to link & boot with some hacks/workarounds
- rtld currently doesn't support
.relrelocations - hacks to change
.relto.relacould be replaced with proper rtld support
Clang/LLVM tools
- Can we ship LLVM tools (opt, llvm-config etc.) by default?
- Concerns with ABI stability - not provided by LLVM
- Problem: we already have /usr/lib/clang/4.0.0/ with no explicit ABI disclaimers…
- Post-summit update: not a concern right now, all static libs except for libclang_rt.asan-x86_64.so but can consider it not part of the supported ABI.
CHERIBuild
- Build LLVM + Clang + cheribsd from MacOS or Linux
- Now also builds postgres etc.
- Wrote cmake build infrastructure for awk, sed, rmdir, etc. (build tools) then invoke bmake
- Managed to get a FreeBSD MIPS build w/ cheribsd
- Problem with generator tools (e.g. csh) that are not done in their own phase - they build in the same directory at the same time as the main binary
- Separate build tool to own Makefile?
- Incrementally migrate changes into FreeBSD upstream?
- hardcoded tool paths in tool-building shell scripts
External Toolchain
- CheriBSD increasingly building with external toolchain
- Plan to migrate platforms using GCC today to external toolchain
- For 12.0 - either use Clang or require xtoolchain
- Release engineering / reproducibility, need to store xtoolchain packages used for release
- Future: may treat local toolchain as special case of external toolchain?
Build system replacement
- No current, concrete plans
- If anyone wrote CMake files for FreeBSD they would find some willing testers :)
Static analysis and sanitizers
- 2/4 major sanitizers mostly work on FreeBSD (dsan, ubsan)
- Question: should certain sanitizers be a matter of tier support?
- C source-to-source transformation for dynamic validation
- supervisor: Stephen Kell (https://www.cl.cam.ac.uk/~srk31)
- student work (not) at: https://github.com/rptynan/
IRification
- CADETS project includes work to build some/all of the base system via LLVM IR
- use cases:
- instrumentation (for security, dynamic validation, coverage…)
- LTO (overlap with existing LTO efforts?)
make callgraph
Profile guided optimization
- pgo clang takes a very long time
- build llvm
- run through test inputs
- build llvm again
- Google's autofdo can generate profile data from perf data
- Q: how portable is profile data?
- A: pretty portable!
- could we build profile data on e.g., the package builders for distribution in the source tree?
Coverage analysis
- Current analysis is based on gcov.
- Coverage is statement based, would like condition decision based coverage.
- Lack of opensource tools means no ability to run under travis, etc
- Hard to know if we're writing correct/sufficient tests without coverage
- Support for “IR everywhere” may help in writing new/better tools