Skip to content

Commit d789d5d

Browse files
release: Release 0.8.0 (#1456)
1 parent e1c79f2 commit d789d5d

File tree

70 files changed

+3243
-7915
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+3243
-7915
lines changed

CHANGELOG.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,156 @@
1+
## 0.8.0
2+
3+
### 🚀 Features
4+
5+
- Support `--hash-style={sysv, both}` (#1281)
6+
- Support negation ('^') in version script globs (#1284)
7+
- Support `PT_GNU_PROPERTY` (#1297)
8+
- Support `--defsym=symbol=expression` (#1300)
9+
- Support symbol definitions in linker script (#1307)
10+
- Support merging non-string sections (#1306)
11+
- Handle `-z x86-64-*` ISA needed (#1320)
12+
- Ignore `--discard-all/-x` option (#1377)
13+
- Support SFrame (#1287)
14+
- Support `--section-start=.section=address` (#1385)
15+
- Add --no-update-in-place flag (#1395)
16+
- Support `-z max-page-size` (#1400)
17+
- LoongArch64 support (#1409)
18+
- Support expressions in `--defsym` and linker script symbol assignment (#1418)
19+
- Sort .init_array and .fini_array by priority (#1408)
20+
- Support `--no-eh-frame-hdr` (#1440)
21+
- Support `-z stack-size=SIZE` (#1448)
22+
- Include metrics connected to '.eh_frame' (#1443)
23+
- Add `--pic-executable` as an alias for `--pie` (#1453)
24+
- Support `variant_pcs` (#1272)
25+
- Support `.variant_cc` (#1280)
26+
27+
### ⚡ Performance
28+
29+
- Make --update-in-place default and fallback to unlinking on ETXTBSY (#1238)
30+
- Parallelize copying data sections (#1277)
31+
- Avoid heap allocating each task during string merging (#1286)
32+
- Minor improvement to cache efficiency of resolution (#1294)
33+
- Merge some of the GC phases into a single phase (#1330)
34+
- Process merge-string sections in mostly equal chunks (#1345)
35+
- Run string merging and GC in parallel (#1339)
36+
- Preallocate a Vec to avoid resizes (#1349)
37+
- Optimize version script from rustc (#1355)
38+
- Tweak how we determine the target number of groups (#1432)
39+
40+
### 🪲 Bug Fixes
41+
42+
- Ensure we write every byte of file even when updating in-place (#1276)
43+
- Align output kind with LD in more cases (#1279)
44+
- Don't try to emit copy relocations for non-canonical symbol aliases (#1308)
45+
- Put common TLS symbols into correct section (#1310)
46+
- Handle non-absolute paths with `--no-allow-shlib-undefined` (#1321)
47+
- Do not add duplicated rpath entries (#1338)
48+
- `save_dir::make_relative_path()` now works as expected (#1337)
49+
- Reorder some sections so that objcopy doesn't complain (#1358)
50+
- *(save-dir)* Handle @filename when processing save-dir (#1362)
51+
- Use DT_SONAME to help determine if SO deps are met (#1390)
52+
- *(save-dir)* Don't make paths in linker scripts relative if in sysroot (#1393)
53+
- Relax debug info comparison against bfd (#1397)
54+
- Don't exclude all libs when not yet supported --exclude-libs <lib> is passed (#1394)
55+
- Properly resolve and retain defsym target symbols (#1402)
56+
- *(save-dir)* Normalize source paths before checking if it's in sysroot (#1406)
57+
- Resolve `__real_foo` in `--wrap` even without `__wrap_foo` (#1419)
58+
- *(CREL)* Reduce allocation for non-EH relocations (#1426)
59+
- Don't try to copy CREL sections to output file (#1438)
60+
- Ifunc address equality for data section references (#1441)
61+
- Ifunc address equality for GOT-relative relocations (#1446)
62+
63+
### 📚 Documentation
64+
65+
- Improve building and benching docs for rustc (#1283)
66+
- Add some info about our monthly dev team meetings (#1291)
67+
- Update rustc building instructions & format all the rustflags consistently (#1324)
68+
- Add alternative Clang invocation (#1334)
69+
- Add instructions for using wild with clang and gcc (#1354)
70+
- Add `PACKAGING.md` instructions (#1342)
71+
- Improve instructions on checking if wild was actually used (#1316)
72+
73+
### 🎨 Styling
74+
75+
- Wrap comments at 100 characters (#1268)
76+
77+
### 📦 Packaging
78+
79+
- Update for inclusion in Nixpkgs (#1318)
80+
81+
### 🛠️ Dev tooling
82+
83+
- Make absolute address checking work correctly (#1417)
84+
- Add support for writing perfetto traces (#1323)
85+
- Add a tool to aid with running benchmarks (#1454)
86+
- Add Dockerfile for Gentoo (#1373)
87+
88+
### ⚖️ Linker Diff
89+
90+
- Ignore VER_NDX_LOCAL vs GLOBAL for undefined symbols (#1424)
91+
- LoongArch64 support (#1428)
92+
93+
### 🧪 Testing
94+
95+
- Make a test failure message less confusing (#1275)
96+
- Set `timeout-minutes` for CI jobs (#1301)
97+
- Add a test for backtraces (#1353)
98+
- Use a separate subdirectory for each tests build (#1404)
99+
- Drop ubuntu 25.04 (#1433)
100+
- Improve robustness of integration-test usage of run-with (#1437)
101+
- Add cache for a couple of build jobs (#1434)
102+
- Use separate archive sources for a couple of tests (#1401)
103+
- Move contents of `exit.c` to `runtime.c` (#1447)
104+
- Add a test for `-Bsymbolic-non-weak` (#1427)
105+
- Use rust-cache actions (#1444)
106+
- Introduce `WILD_TEST_CROSS=all` (#1425)
107+
- Introduce `SkipArch` integration test directive (#1415)
108+
- Include next upcoming LTS Ubuntu release (#1416)
109+
- Run loongarch64 external tests (#1421)
110+
111+
### 🔨 Refactor
112+
113+
- A few simplifications to sysvs .hash computations (#1282)
114+
- Change resolution to use a work queue (#1290)
115+
- Make timing annotations use tracing indirectly (#1295)
116+
- Make secondary output sections more flexible (#1312)
117+
- Decouple OutputKind from Args (#1293)
118+
- Preparations to run string merging in parallel with GC (#1329)
119+
- Change GC to use a channel for work control (#1331)
120+
- Change GC phase to use rayon scopes (#1344)
121+
- Rewrite input opening work control (#1348)
122+
- Change symbol resolution to use rayon scopes (#1363)
123+
- Have linker script emit symbol defs directly (#1364)
124+
- Work towards being able to load additional batches of files (#1365)
125+
- Separate Epilogue into two separate entities (#1367)
126+
- Move dynamic symbol definitions onto layout (#1368)
127+
- Move gnu property notes to the layout (#1369)
128+
- Move riscv attributes to the layout (#1370)
129+
- Move eflags out of the prelude (#1371)
130+
- Get rid of SymbolDb::num_symbols_per_group (#1372)
131+
- Allow SymbolDb to be built in stages (#1374)
132+
- Allow symbol resolution to be done in stages (#1375)
133+
- Parse files as we open them (#1380)
134+
- Make InputRef implement Copy (#1382)
135+
- Get rid of InputFile::kind (#1383)
136+
- Split ResolvedObject into dynamic and non-dynamic variants (#1389)
137+
- Drop fd-lock dev dependency (#1319)
138+
- Port linked-diff table to tabled crate (#1361)
139+
140+
### 👥 Contributors
141+
142+
- davidlattimore
143+
- lapla-cogito
144+
- marxin
145+
- mati865
146+
- karolzwolak
147+
- RossSmyth
148+
- YamasouA
149+
- csfore
150+
- zyxhere
151+
- tshepang
152+
- TechnoPorg
153+
1154
## 0.7.0
2155

3156
### 🚀 Features

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ resolver = "2"
1313
[workspace.package]
1414
repository = "https://github.com/davidlattimore/wild"
1515
license = "MIT OR Apache-2.0"
16-
version = "0.7.0"
16+
version = "0.8.0"
1717
readme = "README.md"
1818
rust-version = "1.90"
1919
edition = "2024"

README.md

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -175,53 +175,42 @@ The goal of Wild is to eventually be very fast via incremental linking. However,
175175
as fast as we can be for non-incremental linking and for the initial link when incremental linking
176176
is enabled.
177177

178-
See [BENCHMARKING.md](BENCHMARKING.md) for more details on running benchmarks.
178+
All benchmarks are run with output to a tmpfs. See [BENCHMARKING.md](BENCHMARKING.md) for details on
179+
running benchmarks.
179180

180-
All benchmarks are run with output to a tmpfs.
181+
We run benchmarks on a few different systems:
181182

182-
Wild currently doesn't perform great beyond 8 threads. This is something we've been investigating
183-
and hope to improve soon.
183+
* [Ryzen 9 9955HX (16 core, 32 thread)](benchmarks/ryzen-9955hx.md)
184+
* [2020 era Intel-based laptop with 4 cores and 8 threads](benchmarks/lemp9.md)
185+
* [Raspberry Pi 5](benchmarks/raspberrypi.md)
184186

185-
### X86_64
187+
Here's a few highlights.
186188

187-
X86_64 benchmarks were run on David Lattimore's laptop (2020 model System76 Lemur pro), which has 4 cores
188-
(8 threads) and 42 GB of RAM.
189+
### Ryzen 9955HX (16 core, 32 thread)
189190

190-
Binaries used are official release builds from each project.
191+
First, we link the Chrome web browser (or technically, Chromium).
191192

192-
First a benchmark is linking a smallish binary, the wild linker itself.
193+
![Benchmark of linking chrome-crel](benchmarks/images/ryzen-9955hx/chrome-crel-time.svg)
193194

194-
![Benchmark of lld, mold and wild linking wild](images/benchmarks/wild.svg)
195+
Memory consumption when linking Chromium:
195196

196-
Next, we link librustc-driver, which is a shared object and is where most of the code in the rust
197-
compiler ends up.
197+
![Benchmark of linking chrome-crel](benchmarks/images/ryzen-9955hx/chrome-crel-memory.svg)
198198

199-
![Benchmark of lld, mold and wild linking librustc-driver](images/benchmarks/librustc-driver.svg)
199+
librustc-driver is the shared object where most of the code in the Rust compiler lives. This
200+
benchmark shows the time to link it.
200201

201-
Finally, for an especially large binary, we link the chromium web browser with debug info.
202+
![Benchmark of linking librustc-driver](benchmarks/images/ryzen-9955hx/librustc-driver-time.svg)
202203

203-
![Benchmark of lld, mold and wild linking chromium](images/benchmarks/chromium.svg)
204+
For something much smaller, this is the time to link Wild itself. This also shows a few different
205+
Wild versions, so you can see how the link time has been tracking over releases.
204206

205-
### Aarch64
207+
![Benchmark of linking wild](benchmarks/images/ryzen-9955hx/wild-time.svg)
206208

207-
Aarch64 benchmarks were run on RaspberryPi5 with 8 GiB of RAM. Binaries used are official release
208-
binaries from each project.
209+
### Raspberry Pi 5
209210

210-
![Benchmark of lld, mold and wild linking wild without debug info on a RaspberryPi5](images/benchmarks/rpi-wild-no-debug.svg)
211+
Here's linking rust-analyzer on a Raspberry Pi 5.
211212

212-
![Benchmark of lld, mold and wild linking wild with debug info on a RaspberryPi5](images/benchmarks/rpi-wild-debug.svg)
213-
214-
### RISC-V 64
215-
216-
RISC-V benchmarks were run on a VisionFive2 with 8 GiB of RAM running Ubuntu 24.04.
217-
218-
Neither wild nor lld have official release binaries for RISC-V. For wild, the binary was just a
219-
locally built release binary. For lld, the version that comes with Ubuntu was used. Mold does have
220-
an official release binary for RISC-V, so that was used.
221-
222-
![Benchmark of lld, mold and wild linking wild with debug info on a VF2](images/benchmarks/risc-v-64-wild-debug.svg)
223-
224-
![Benchmark of lld, mold and wild linking wild with --strip-debug info on a VF2](images/benchmarks/risc-v-64-wild-non-debug.svg)
213+
![Time to link rust-analyzer-no-debug](benchmarks/images/raspberrypi/rust-analyzer-no-debug-time.svg)
225214

226215
## Linking Rust code
227216

Lines changed: 60 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)