generated from erix/meta
[BUG] Direct runtime artifact bytes vary with checkout paths #22
Labels
No labels
bug
ci
docs
duplicate
enhancement
help wanted
invalid
performance
phase-6
question
refactor
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
erix/integration#22
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Directly compiled kernel and service artifacts do not apply the canonical source/build path remapping already used for shared objects. Identical service sources built in separate directories can therefore embed different build paths and produce different loaded bytes. This prevents treating the current pair as a controlled comparison of a kernel optimization.
Reproduction
Select Integration
e2b1cf5995bcf6334839cda9a013e90fa97787d5and identical original runtime sources, compiler, target, features and linker inputs. Compile the same local library and executable throughrustc_pic_objectin two separately located source and scratch directories of different lengths. Retain objects, Rust metadata and the linked ELF; compare their hashes and loaded sections.An independent real-compiler fixture using identical ASCII source/manifest bytes and a generated executable source produces differing library object, metadata, executable object and linked ELF files. The original failure is retained before modifying the builder.
Expected and actual behavior
Equivalent source/configuration inputs should produce the same artifact bytes regardless of their explicitly chosen checkout and scratch locations. Real source or feature changes must remain observable in artifact and cache identities.
Instead, all four direct-compiler fixture outputs differ and contain their build directory prefixes. In the original host image pair, all 27 shared objects and five unrelated services are identical, while 32 unrelated services differ in loaded sections. Some file sizes also differ. These observations prevent causal timing admission; they neither quantify a timing effect nor prove every changed instruction has only one cause.
Environment and identity
e2b1cf5995bcf6334839cda9a013e90fa97787d5.fec1113a259c3cfff7d2dd942409b7f3f9df5e64, candidatec94e9f6f50aa14e34d45bdda651678af22ee0c49; all other original selections match.254b59607d4417e9dffbc307138ae5c86280fe4c; x86_64 freestanding objects and existing development image configuration.Evidence and prior checks
The original shared-object compiler adds source and work-directory mappings. The common direct compiler and its kernel/service call sites omit them. Independent retained real-compiler fixtures corroborate the uncontrolled path input. Successful compilation and linking have no warning diagnostics; that does not establish reproducibility. Images, original source identities and failed comparisons remain unchanged for review.
Tracking
Profiler: Integration #3; audit: Integration #11; implementation: WIP PR #12. Share the canonical mapping policy across direct and shared compilation, include the helper in both cache ownership lists, preserve explicit source ownership and existing external-source support, and validate actual object/metadata/ELF and downstream identities. A future image comparison must select the corrected original builder for both sides and reverify all unrelated runtime bytes before timing.
The compiler-coordinate correction is published at Integration
27ca5c035c569b11cf44260ca7c2fb587082e17ein PR 12. Fifty-five focused unit tests, five changed host fixtures and a real original-input replay pass: library object/metadata, binary object and linked ELF bytes match across independent worker locations. Complete image-pair validation and guest timing remain open.A fresh first-attempt full host image pair built with original tooling
381bccd87c5632e9d1af8aa9d0aca295cbc00e1fnow produces identical bytes for all 37 non-kernel ELF executables and all 27 shared objects. The original source/kernel pair, compiler and fixed epoch are retained. Complete comparison still fails on a separate eight-byte EFI PDB identifier difference, tracked in Integration #28. No timing acceptance or self-hosted build is claimed.erikinkinen referenced this issue2026-09-12 14:15:15 +02:00