ERR/E3.1: thread-local error return-trace ring buffer (runtime)
Add the trace buffer that raise/try push to and catch/or/destructure clear, following the JNI-TLS precedent exactly (a thread_local IR global doesn't work under the ORC JIT, which doesn't init TLS for AddObjectFile'd objects). - library/vendors/sx_trace_runtime/sx_trace.c: a `_Thread_local` fixed-cap ring (32 frames) of opaque u64s + C API (push / clear / len / truncated / frame_at). Overflow keeps the newest CAP frames and latches `truncated` (Zig-style); frame_at returns oldest-to-newest. The frame is opaque — the E3.3 formatter dispatches on context (PC at runtime, packed (func_id, offset) at comptime). - build.zig: link the .c into the compiler so the JIT resolves sx_trace_* via dlsym (and so the unit test links against it). - src/runtime_trace.test.zig: exercises push / overflow-survives-newest / clear / len / truncated / ordering against the linked C — grounds the buffer logic without shipping throwaway sx builtins. - lower.zig getTraceFids(): lazily declares the sx_trace_push/clear externs + sets needs_trace_runtime. Declared now; the raise/try push sites and the absorbing clear sites get wired at E3.2. - core.zig: auto-injects the .c as a #source for AOT when needs_trace_runtime, mirroring the JNI env runtime. Gates: zig build, zig build test (incl. the new buffer tests), bash tests/run_examples.sh (277 passed; no codegen change this step — lone failure is the user's uncommitted 213-canonical-map pack WIP).
This commit is contained in:
@@ -36,6 +36,14 @@ pub fn build(b: *std.Build) void {
|
||||
.file = b.path("library/vendors/sx_jni_runtime/sx_jni_env_tl.c"),
|
||||
.flags = &.{},
|
||||
});
|
||||
// ERR E3.1 runtime — `_Thread_local` error return-trace ring buffer.
|
||||
// Same linkage rationale as the JNIEnv* slot above: linked into the
|
||||
// compiler so the JIT resolves `sx_trace_*` via dlsym; AOT outputs pick it
|
||||
// up via a lower-side auto-injected c_import (gated on needs_trace_runtime).
|
||||
mod.addCSourceFile(.{
|
||||
.file = b.path("library/vendors/sx_trace_runtime/sx_trace.c"),
|
||||
.flags = &.{},
|
||||
});
|
||||
mod.addCSourceFile(.{
|
||||
.file = b.path("clang_shim.cpp"),
|
||||
.flags = &.{
|
||||
|
||||
Reference in New Issue
Block a user