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
ci: flip the libgc.a lane from signature-checked XFAIL to blocking
tinycc 384614a ("tccelf: provide complete ELF boundary symbols") gives
the plain BSD-style etext/edata/end names PROVIDE semantics on every ELF
target, fixing the root cause of this platform's GC link failure: tcc
previously defined only the glibc-style _etext/_edata/_end, never the
plain names BDWGC's FreeBSD data-segment scan references directly.
The lane asserted that gc_alloc.c/hello.c MUST still fail on unresolved
etext/end - correct while the bug was live, but it hard-fails the moment
a fixed tcc.exe is published here, via its own "unexpected full pass"
guard. That is imminent: update_tccbin.yml's BSD job publishes on the
monthly cron with PUBLISH=true and no lock, and its skip-check will not
skip (shipped 85ba3ae8 != current mob), so the next scheduled run
republishes this branch with a fixed tcc.exe and breaks CI for the
opposite reason.
This STRENGTHENS the gate rather than relaxing it: a full pass of all
three shared tests is now the required baseline, where before only one
very specific failure shape was accepted. Nothing is downgraded to a
warning and no failure shape is tolerated. Also adds a blocking
mechanism check that references etext/edata/end directly from C, so a
future tcc.exe that satisfies the suite while regressing or mis-ordering
the boundary symbols is still caught.
Validated on a real FreeBSD 15.1 VM before flipping, with this branch's
EXACT libgc.a held byte-identical: the shipped tcc.exe (85ba3ae8) fails
on unresolved etext/end and nothing else, while a tcc.exe rebuilt from
tinycc 2be0218b (which contains 384614a) reports "3 passed, 0 failed"
and links the boundary probe with a sanely ordered range. tcc.exe was
the only variable between the two phases.
Co-Authored-By: WOZCODE <contact@withwoz.com>
echo "expected the known etext/end unresolved-symbol failure, but this lane fully passed - the upstream tcc fix must have landed; remove this XFAIL special-casing and fold it back into a single blocking lane." >&2
202
-
exit 1
203
-
fi
207
+
-lpthread
204
208
205
-
# The pinned run.sh only ever prints "(compile error)" with no
206
-
# detail, so the summary-line match above can't tell "the known
207
-
# etext/end bug" apart from a DIFFERENT static-link regression
208
-
# that happens to fail the same two tests - e.g. a PR that
209
-
# replaces libgc.a with a valid-but-incomplete archive lacking
210
-
# the GC objects entirely: crash.c still compiles (it never
211
-
# references GC symbols) while gc_alloc/hello both report
212
-
# "compile error", matching this same summary shape for an
213
-
# unrelated reason (Codex pullrequestreview-4780219278 on
214
-
# vlang/tccbin#75). Compile BOTH failing tests directly to
215
-
# capture their real tcc stderr and assert each is specifically
216
-
# the known etext/end unresolved-symbol error - checking only
217
-
# one of the two (e.g. hello.c) would let an unrelated
218
-
# regression isolated to the OTHER test (gc_alloc.c) hide
219
-
# behind this same summary shape and pass unnoticed (Codex
220
-
# pullrequestreview-4780815399 on vlang/tccbin#75).
if is_known_etext_end "$direct_err_hello" "$direct_code_hello" && is_known_etext_end "$direct_err_gc_alloc" "$direct_code_gc_alloc"; then
298
-
echo "known XFAIL: etext/end still unresolved on FreeBSD tcc for both gc_alloc.c and hello.c, as expected - not blocking CI"
299
-
else
300
-
echo "libgc.a lane failed with the known summary shape, but at least one of gc_alloc.c/hello.c's direct compile errors does NOT mention an unresolved etext/end symbol (or exited abnormally) - this looks like a different, unexpected regression:" >&2
echo "libgc.a lane failed, but NOT with the known/expected summary (PASS crash, FAIL gc_alloc/hello with compile error) - this looks like a different, unexpected problem and should not be silently treated as the known XFAIL." >&2
0 commit comments