0.7.0
Only 6 weeks since our last release, but the team still got a lot done! We've split changes into separate sections this time, so hopefully it's a bit easier to read.
π Features
- Add handling of the .symver asm directives (#994)
- Allow absolute-value symbol to be used as an entry point
- Allow setting entry point for shared objects
- Reintroduce handling of tail-merged strings (#1117)
- Implement --retain-symbols-file (#1262)
- Allow mixing of argument files and regular arguments (#1148)
- Support
VERSIONcommand in linker script - Ignore '-no-fatal-warnings' option (#1192)
- Increase maximal supported alignment to 2^16 (#1190)
- Include git commit in linker version (#1203)
- Add support for .note.stapsdt sections (#1202)
- Check for overflow on 32bit relocations (#1175)
- Support tokens enclosed in double quotes in linker scripts
- Support flag --no-mmap-output-file (#1215)
β‘ Performance
- Limit default parallelism in string merging
- Rewrite scheduling of string merging tasks (#1240)
πͺ² Bug Fixes
- Fill some bytes with zeros (affects --update-in-place) (#1237)
- Improve handling of non-absolute paths in save-dir (#1244)
- Pad copy relocations according to alignment (#1251)
- Don't allow hidden/protected symbols to reference shared objects (#1258)
- Use local symbol interposability when processing relocations (#1259)
- Make --strip-debug suppress earlier --strip-all (#1261)
- Fix compilation on riscv (#1100)
- Distinguish default version (@@) from non-default (@). (#1129)
- Only emit
PT_INTERPfor shared executables - Add RISCV_ATTRIBUTE program segment (#1166)
- Don't create GOT/PLT entries for ifuncs that aren't referenced (#1185)
- Improve handling of relocations in non-alloc sections (#1196)
- Fix lookup of the riscv-fix-hi-part (#1198)
- Make --warn-unresolved-symbols match GNU ld's behaviour (#1217)
- Handle missing GNU_PROPERTY .note.gnu.property values (#1222)
- Allow dynamic symbols to refer to merged strings (#1147)
ποΈ Builds
- Build for
(aarch|x86_|riscv)64(|gc)-unknown-linux-(musl|gnu)(#1151) - Link musl releases with Wild
π Documentation
- Move nix docs to a separate file and update supported features list (#1113)
- Remove
archive_splitter.rsreference from DESIGN.md (#1145) - Update benchmarks, this time with bar charts
- Add instructions for using Wild with Rust on Illumos. (#1171)
- Document crate dependency version policy (#1140)
- Customise git-cliff config and document commit message format (#1267)
πΉοΈ Porting
- Initial support for Illumos (#1197)
βοΈ Linker Diff
π§ͺ Testing
- Use wild for build in CI (#1091)
- Verify build on riscv (#1101)
- Verify minimal versions in CI (#1142)
- Ignore some diffs in risc-v tests (#1236)
- Use test-config-ci.toml in CI (#1234)
- Report sections where --update-in-place misses writes (#1239)
- Set the
TRIPLEenvironment variable if needed when running mold tests - Fix potential template-injection in CI
- Fix a couple of tests that were failing on recent opensuse (#1241)
- Don't skip running dynamically linked executables (#1248)
- Apt-get update before installing for riscv build workflow (#1255)
- Prevent race between test cases re-creating the same .so file (#1107)
- Use depfile in integrationtests (#1123)
- Use correct exit syscall number on Illumos (#1138)
- Look for dynamic linker in /bin/less in integ test (#1159)
- Unignore
symbol-versions3.shMold test - Make integration test diffing an opt-in feature (#1158)
- Integration tests: Make symbol assertions more extensible (#1169)
- Better error message when test unexpectedly pasess (#1176)
- Print clang version when clang-format fails (#1183)
- Clarify clang-format version mismatch instructions (#1193)
- Increase test binary execution timeout (#1188)
- Add a test for handling of note sections (#1211)
- Integration tests: Make skipping tests on unsupported flags more generic (#1225)
- Integration tests: Make compilation errors easier to find (#1224)
- Add basic testing for update-in-place flag (#1230)
- Limit the conditions for executing
update-nix-lockfile
π¨ Refactor
- Use u32_from_slice (#1128)
- Introduce BitExtraction trait for u64 (#1157)
- Restructure code in symbol_db.rs a bit (#1252)
- Build only C++ and Rust demanglers
- Simplify get_host_architecture (#1164)
- Merge ResolutionFlags and ValueFlags (#1180)
- Move per-symbol-flags out of SymbolDb (#1186)
- Delete ValueFlags::ADDRESS (#1189)
- Replace all uses of bytemuck with zerocopy (#1210)
- Add readable Debug implementations for internal data structures (#1227)
- Macro to generate ELF newtypes and new SymbolType (#1228)
π₯ Contributors
- davidlattimore
- marxin
- mati865
- daniel-levin
- lapla-cogito
- karolzwolak
- andrewdavidmackenzie
- el-yawd
- TechnoPorg
- jarjk
- jakobhellermann
- YamasouA
π² Sponsors
Thanks to everyone who has sponsored davidlattimore, in particular the following people who have sponsored at least $30 since the last release:
- repi
- rrbutani
- Rafferty97
- CodeursenLiberte
- mati865
- ArthurBrussee
- wasmerio
- +50 others