diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-07-30 00:16:57 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-07-30 00:18:22 +0900 |
| commit | 6487b41d922f56d46167802780fcde62d1f27095 (patch) | |
| tree | a17e76fcb4cd790c3396a26960d45430672c0637 /cmd | |
| parent | 7908fb9583cb6af84345508390ec9ea9fc986763 (diff) | |
internal/rosa: remove legacy exec helper
This change also adds a fourth stage to the bootstrap machinery, offering more correct toolchain validation that works around LLVM dynamic linking flaws.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/mbf/main.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 6df5d741..d464fd54 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -616,7 +616,7 @@ func main() { { c.NewCommand( - "stage3", + "stage4", "Check for toolchain 3-stage non-determinism", func(args []string) (err error) { var ( @@ -636,21 +636,31 @@ func main() { if err = cm.Do(func(cache *pkg.Cache) (err error) { _, llvm := rosa.Native().New(rosa.Std - 1).Load(_llvm) - pathname, checksum[0], err = cache.Cure(llvm) + pathname, _, err = cache.Cure(llvm) return }); err != nil { return } log.Println("stage2:", pathname) + if err = cm.Do(func(cache *pkg.Cache) (err error) { _, llvm := rosa.Native().New(rosa.Std).Load(_llvm) - pathname, checksum[1], err = cache.Cure(llvm) + pathname, checksum[0], err = cache.Cure(llvm) return }); err != nil { return } log.Println("stage3:", pathname) + if err = cm.Do(func(cache *pkg.Cache) (err error) { + _, llvm := rosa.Native().New(rosa.Stage3).Load(_llvm) + pathname, checksum[1], err = cache.Cure(llvm) + return + }); err != nil { + return + } + log.Println("stage4:", pathname) + if checksum[0] != checksum[1] { err = &pkg.ChecksumMismatchError{ Got: checksum[0].Value(), @@ -658,7 +668,7 @@ func main() { } } else { log.Println( - "stage2 is identical to stage3", + "stage3 is identical to stage4", "("+pkg.Encode(checksum[0].Value())+")", ) } |
