You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2d9890d
Browse filesBrowse the repository at this point in the historyBrowse files
0.8.1 — the backend existed and the one-line usage could not reach it
⚠️⚠️ 0.8.0 SHIPPED `openarch-cortex-m`, DECLARED ITS CAPABILITIES, AND EXERCISED
IT — FROM AN EXAMPLE THAT NAMES IT BY PATH.
The documented one-line usage is `openarch = "<version>"`, which goes through
the `backend-auto` feature: a table in the ROOT manifest that binds a target's
arch to a backend. That table was never extended. Measured from a fresh project
against the published 0.8.0:
error: no package provides capability 'openarch-backend' required by
'openarch'
The package was in the tarball and unreachable through the only usage a
consumer is told about.
⭐ The lesson is the one a new capability always carries: it has more readers
than the site that introduced it, and the file that BINDS it is not the file
that DECLARES it. `examples/preempt` could not have caught this — it names the
backend by path, which is precisely the door a consumer does not have.
## Five rows, because `cfg(arch = ...)` compares exactly
There is no glob, and "Cortex-M" is not an instruction set: mcpp spells each
M-profile row's arch differently (`thumbv6m`, `thumbv7m`, `thumbv7em`,
`thumbv8m.base`, `thumbv8m.main`) because objects built for them are not
interchangeable. `backend-cortex-m` is added beside the other three named
features for a consumer that wants the choice written down.
## The check is the usage, not the backend
CI builds five fresh projects — one per arch spelling — whose whole manifest is
`openarch = { path = … }`, and requires each to compile the backend. A/B on this
tree: 0 backend compile lines before, 14 after, on every one of the five.
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -161,6 +161,7 @@ answer as `MAIR_EL1`, arrived at for a different reason.
161
161
| The switch reaches, returns and preserves; traps classify; per-CPU round-trips; four barriers are accepted | One probe source, three emulators, in CI |
162
162
| A trap resumes a **different** context | The same probe, on all three; the assertion is a counter the *other* context advanced, not that both printed |
163
163
| The partial backend preempts |`examples/preempt` on `mps2-an385`, in its own job: two tasks that never yield, each proving it was interrupted |
164
+
| The one-line usage REACHES that backend | Five fresh projects, one per M-profile arch spelling: `openarch = "<version>"` and nothing else must pull the backend in |
164
165
| The entry encodings | A host unit test that holds **all three** encoders at once |
165
166
| The two faces declare one library | A host test of `static_assert`s, on a machine with no backend at all |
166
167
| The ABI's frozen layout |`tests/abi_shape.cpp`, in byte offsets rather than in `sizeof` of another member |
Copy file name to clipboardExpand all lines: mcpp.toml
+44-4Lines changed: 44 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -33,7 +33,7 @@
33
33
[package]
34
34
namespace = "mcpplibs"
35
35
name = "openarch"
36
-
version = "0.8.0"
36
+
version = "0.8.1"
37
37
description = "openarch: the architecture-mechanism layer — execution contexts, traps, per-CPU state and address spaces, as one interface over several instruction sets"
0 commit comments