Skip to content

Commit 579bfc2

Browse files
avrabeclaude
andauthored
chore(release): v0.11.43 — #345 on-target shippability (linmem .bss + link-survivable relocs) (#349)
Bundles both #345 fix steps: dissolved --relocatable --native-pointer-abi objects are now MCU-shippable (zero-init linmem -> NOBITS .bss, .data 65548->4 #347) and link-survivable (inline MOVW/MOVT-ABS -> literal-pool R_ARM_ABS32, 22->0 inline abs relocs #348). Unblocks the 51 struct-return decide drop-ins + jess PR #60. Frozen differentials byte-identical (change gated on --native-pointer-abi). Pin sweep 0.11.42 -> 0.11.43 (11 manifests + MODULE.bazel + Cargo.lock). Falsification statement in the changelog. Closes #345 (gale silicon link-test is the final gate). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 23a2184 commit 579bfc2

13 files changed

Lines changed: 78 additions & 42 deletions

File tree

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.11.43] - 2026-06-14
11+
12+
**ON-TARGET SHIPPABILITY — gale #345: dissolved `--relocatable` objects are now
13+
MCU-shippable and link-survivable (both fix steps bundled).**
14+
15+
- **#345 step 1 — zero-init wasm linmem → `.bss`** (#347): a dissolved
16+
`--relocatable --native-pointer-abi` object emitted the entire wasm
17+
linear-memory reservation as a SHT_PROGBITS `.data` section — ~64 KB of
18+
mostly-zero bytes, a non-starter on a 128 KB-RAM MCU. Now the zero-init
19+
reservation rides a SHT_NOBITS `.bss` (zero file bytes; the host loader zeroes
20+
it, preserving wasm zero-init semantics), with only the materialized
21+
`__synth_globals` slots in a tiny PROGBITS `.data`. Initialized `(data)`
22+
segments stay PROGBITS. Measured on the dissolved `k_mutex_unlock`: `.data`
23+
**65548 → 4 bytes**.
24+
- **#345 step 2 — link-survivable linmem addressing** (#348): the
25+
`__synth_wasm_data`/`__synth_globals` addresses were loaded with inline-immediate
26+
`MOVW`/`MOVT-ABS` (`R_ARM_MOVW_ABS_NC`/`MOVT_ABS`), whose instruction-immediate
27+
form gets mangled into an undefined instruction when linked into a large Zephyr
28+
image (G474RE USAGE FAULT). Replaced with a **literal-pool load** — `LDR rX,
29+
[pc, #off]` from a `.text` word carrying `R_ARM_ABS32` (which `ld`/bfd patches
30+
in a data word and survives a large multi-object link). Mutex object: **22
31+
inline `MOVW/MOVT-ABS` → 0; 11 link-survivable `R_ARM_ABS32`**. (A new
32+
`LdrSym` literal-pool op, wired through the encoder + reg_effect; a defensive
33+
`func_base % 4 == 0` assert makes the imm12 alignment coupling explicit.)
34+
Together these unblock the 51 struct-return decide drop-ins + jess PR #60.
35+
The four frozen differentials (control_step 0x00210A55, flight_seam
36+
0x07FDF307, div_const 338/338, mutex_pressure) stay **byte-identical** (the
37+
whole change is gated on `--native-pointer-abi`).
38+
39+
**Falsification:** wrong if a dissolved `--native-pointer-abi --relocatable`
40+
object still carries a 64 KB PROGBITS `.data` or any inline
41+
`R_ARM_MOVW_ABS_NC`/`MOVT_ABS` against `__synth_wasm_data`; or if gale's
42+
G474RE `mutex_api` (`CONFIG_GALE_WASM_LTO_MUTEX=y`) still links to a USAGE
43+
FAULT. (Reloc-shape + value-differential verified in-tree; gale's silicon
44+
link-test is the final gate.)
45+
1046
## [0.11.42] - 2026-06-14
1147

1248
**IF/ELSE-WITH-RESULT RECONCILIATION BUG-FIX — gale #313: asymmetric arms

Cargo.lock

Lines changed: 17 additions & 17 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
@@ -27,7 +27,7 @@ resolver = "2"
2727
# semver to publish, so the convention now catches up: workspace
2828
# version follows the release tag, bumped pre-tag in the release
2929
# checklist. See docs/release-process.md.
30-
version = "0.11.42"
30+
version = "0.11.43"
3131
edition = "2024"
3232
rust-version = "1.88"
3333
authors = ["PulseEngine Team"]

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module(
77
name = "synth",
88
# Kept in lockstep with [workspace.package] version in Cargo.toml.
99
# Both are bumped pre-tag — see docs/release-process.md.
10-
version = "0.11.42",
10+
version = "0.11.43",
1111
)
1212

1313
# Bazel dependencies

crates/synth-backend-awsm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ categories.workspace = true
1111
description = "aWsm backend integration for the Synth compiler"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.42" }
14+
synth-core = { path = "../synth-core", version = "0.11.43" }
1515
anyhow.workspace = true
1616
thiserror.workspace = true

crates/synth-backend-riscv/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ categories.workspace = true
1111
description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.42" }
15-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.42" }
14+
synth-core = { path = "../synth-core", version = "0.11.43" }
15+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.43" }
1616
anyhow.workspace = true
1717
thiserror.workspace = true
1818
tracing.workspace = true

crates/synth-backend-wasker/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ categories.workspace = true
1111
description = "Wasker backend integration for the Synth compiler"
1212

1313
[dependencies]
14-
synth-core = { path = "../synth-core", version = "0.11.42" }
14+
synth-core = { path = "../synth-core", version = "0.11.43" }
1515
anyhow.workspace = true
1616
thiserror.workspace = true

crates/synth-backend/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ default = ["arm-cortex-m"]
1515
arm-cortex-m = ["synth-synthesis"]
1616

1717
[dependencies]
18-
synth-core = { path = "../synth-core", version = "0.11.42" }
19-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.42", optional = true }
18+
synth-core = { path = "../synth-core", version = "0.11.43" }
19+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.43", optional = true }
2020
anyhow.workspace = true
2121
thiserror.workspace = true

crates/synth-cli/Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ verify = ["synth-verify"]
2727
# Path deps carry `version` so `cargo publish` rewrites them to the
2828
# crates.io coordinate. Bumping the workspace version requires
2929
# updating these in lockstep — see docs/release-process.md.
30-
synth-core = { path = "../synth-core", version = "0.11.42" }
31-
synth-frontend = { path = "../synth-frontend", version = "0.11.42" }
32-
synth-synthesis = { path = "../synth-synthesis", version = "0.11.42" }
33-
synth-backend = { path = "../synth-backend", version = "0.11.42" }
30+
synth-core = { path = "../synth-core", version = "0.11.43" }
31+
synth-frontend = { path = "../synth-frontend", version = "0.11.43" }
32+
synth-synthesis = { path = "../synth-synthesis", version = "0.11.43" }
33+
synth-backend = { path = "../synth-backend", version = "0.11.43" }
3434

3535
# Optional external backends
36-
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.42", optional = true }
37-
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.42", optional = true }
38-
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.42", optional = true }
36+
synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.43", optional = true }
37+
synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.43", optional = true }
38+
synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.43", optional = true }
3939

4040
# Optional verification (requires z3)
41-
synth-verify = { path = "../synth-verify", version = "0.11.42", optional = true, features = ["z3-solver", "arm"] }
41+
synth-verify = { path = "../synth-verify", version = "0.11.43", optional = true, features = ["z3-solver", "arm"] }
4242

4343
# Optional PulseEngine WASM optimizer
4444
# Uncomment when loom crate is available:

crates/synth-frontend/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile
1414
# Internal path deps carry an explicit version so `cargo publish`
1515
# can rewrite to the crates.io coordinate. `path` is used for
1616
# in-workspace builds; `version` is what crates.io sees.
17-
synth-core = { path = "../synth-core", version = "0.11.42" }
17+
synth-core = { path = "../synth-core", version = "0.11.43" }
1818

1919
wasmparser.workspace = true
2020
wasm-encoder.workspace = true

0 commit comments

Comments
 (0)