aboutsummaryrefslogtreecommitdiff
path: root/tools/driver/EmbeddedRunner.cc
AgeCommit message (Collapse)Author
2026-10-22refactor(driver): report embedded runner failures through one helper_ov4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21feat(driver): color diagnostics like gcc with -fdiagnostics-color_ov4
Add -fdiagnostics-color[=auto|always|never] and -fno-diagnostics-color. The default auto mode colors only a terminal stderr (TERM set and not dumb on Unix; a console that accepts VT sequences on Windows), so test harnesses, the desktop bundle and other pipes stay plain. Every diagnostic label now comes from cps::diagnosticPrefix, which emits gcc's default GCC_COLORS bytes: bold locus, bold red error/fatal error, bold magenta warning, bold cyan note. compilation terminated., runtime messages of the compiled program and lld output are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21feat(bundle): run the bundled compiler with input and streaming output_ov4
Save before running, close prefilled stdin at EOF, and stream output bytes through Tauri channels. Stop and reap the child before exit or another run. Disable embedded stdout buffering and exercise the runner with real programs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19refactor(driver): isolate MinGW JIT compatibility support_ov4
Move COFF normalization, jump stubs and SEH registration behind two internal entry points. Keep runtime bindings in the embedded runner, remove redundant conditions and document the upstream requirements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19refactor(driver): remove Windows JIT crash diagnostics_ov4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19fix(driver): bind MinGW JIT stdio locks to the host CRT_ov4
Resolve _lock_file and _unlock_file to the host compatibility functions so JIT stdio cannot pick incompatible locks from another CRT DLL. Cover fprintf inside a C++ catch with exact stderr expectations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19fix(driver): report Windows JIT crashes with symbolized frames_ov4
Record fixed-up JIT graph addresses and named symbols, and report fatal Windows x86_64 faults with access details and up to 32 stack frames. Show unwind-entry availability for each frame, ignore normal C++ exceptions, and preserve buffered stdout before walking the stack. Keep stack-overflow reports minimal and document the resident reporter. Leave linking and unwind registration unchanged until real Windows CI provides a fault location for i/exp-string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19fix(driver): register one sorted SEH table per JIT object_ov4
Separate .pdata and .pdata$ registrations share an image base and shadow other functions during unwind lookup. Combine their relocated entries in one sorted, allocation-owned table so C++ catches and stack restoration work across the entire object. Preserve allocation-action cleanup. Verified the exp-string JIT reproduction under Wine: exit 5 before the change, exit 0 with exact expected output afterward. All 164 Linux tests also pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19fix(driver): normalize MinGW JIT archive symbol definitions_ov4
Make absolute-zero pure virtual fallbacks local and compute runtime archive interfaces from normalized objects so ORC definitions match JITLink. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18fix(driver): bind MinGW JIT runtime dependencies to host symbols_ov4
Resolve the known weak __cxa_pure_virtual reference through the host ABI instead of JITLink's unsupported absolute-zero fallback. Share the host's initialized stack guard and failure handler, and map write to _write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18fix(driver): include LLVM COFF helpers before Windows macros_ov4
Parse MinGWCOFF.h before windows.h so IMAGE_* macros do not replace LLVM COFF enum declarations or their uses in the normalization helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18fix(driver): normalize MinGW unwind COMDATs before JIT linking_ov4
Associate symbol-less MinGW unwind sections with their code before graph construction, including objects loaded from runtime archives. Handle suffixed unwind sections in personality stubs and SEH table registration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18feat(driver): load the embedded C++ runtime into the JIT_ov4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18fix(driver): add COFF jump stubs for external object calls_ov4
Route external direct CALL/JMP PCRel32 references through nearby JITLink stubs so user objects can reach distant Windows CRT functions. Reuse the personality stub tables and preserve data references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17fix(driver): resolve JIT C symbols from msvcrt.dll first on Windows_ov4
Process-wide lookup can bind EXTERN functions such as puts to ucrtbase.dll, whose stdout buffer is separate from the host msvcrt used by OUTPUT, so redirected output can come out of order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17feat(driver): link INCLUDE_OBJ objects and check EXTERN symbols_ov4
Each EXTERN symbol must be defined by an INCLUDE_OBJ object file or by the embedded C library selected with INCLUDE_OBJ "__libc". Objects are linked natively, loaded by the embedded JIT and passed to lli. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17refactor(runtime): write runtime diagnostics with fprintf(stderr)_ov4
Replace snprintf+write(2) with a single fprintf call on the platform's stderr: the C library's stderr / __stderrp, or __acrt_iob_func(2) on Windows, which the embedded runner binds to the host shim. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16refactor(jit): consolidate embedded object layer setup_ov4
Move ObjectLinkingLayer creation, COFF flags, and SEH plugin install into one file-local factory used before LLJIT owns the layer. Drop the repeated dyn_cast checks from the main flow. Linux verified: build, normal and large-frame runs, exception cases. Windows layer/plugin behavior still needs CI verification. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16refactor(jit): use JITLink stubs for COFF personalities_ov4
Replace the IR personality forwarding layer with graph-local pointer jump stubs for the three GNU personality symbols in .xdata. Linux verified: build, nested THROW, cross-procedure unwind, CATCH with RETURN, uncaught exception. Windows execution still needs CI verification; the stub pass passed a local LLVM 23 syntax check only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): bind the MinGW runtime stack probe directly_ov4
Drop the hand-written chkstk assembly and bind the toolchain-provided ___chkstk_ms on MinGW x86-64 instead. Other targets register no probe. Linux verified: build, normal run, large-frame run, exception cases. Windows/MinGW execution still needs CI verification. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16refactor(jit): remove redundant SEH preservation and validation_ov4
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): scope the __ImageBase alias to its own graph_ov4
Module and platform graphs each need their own base for 32-bit image-relative unwind addresses. A graph-local alias keeps the shared name from colliding at materialization time. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): leave LLJIT platform graphs out of __ImageBase aliasing_ov4
Platform-support graphs carry __lljit.platform_support_instance and manage their own base; aliasing it there duplicates the symbol at materialization time and spoils the exit code. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): guard personality access with hasPersonalityFn_ov4
getPersonalityFn on a function without the personality operand reads out of bounds. The newly created stub hit this in the reroute scan. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): only alias __ImageBase when purely external_ov4
LLJIT platform-support graphs define their own __ImageBase; aliasing it again duplicates the symbol and corrupts materialization. Skip those. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): keep COFF unwind tables addressable from JIT memory_ov4
COFF unwind tables use 32-bit image-relative addresses. Alias the external __ImageBase to the lowest defined block once addresses are final, and route the personality through a JIT-local stub so both stay within range of the JIT tables. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): provide JIT-only stack probe without weak host reference_ov4
The weak ___chkstk_ms reference marked the host import weak on COFF and segfaulted the compiler itself. Provide a JIT-only probe under a unique name with the same page-touching behavior instead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): resolve MinGW stack probe for embedded execution_ov4
Windows runner failed with missing ___chkstk_ms. Reference it weakly so platforms without it see null while MinGW exposes its host address. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): use large code model for embedded execution_ov4
Windows runner failed with PCRel32 out of range to __main because the host executable sits far from the JIT heap under the small code model. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): set COFF auto-claim flags on custom ObjectLinkingLayer_ov4
Windows execution awaits CI verification. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): register MinGW unwind tables through JITLink_ov4
Windows execution awaits CI verification. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16refactor(jit): migrate embedded execution to LLJIT and JITLink_ov4
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): register Windows x64 SEH function tables_ov4
Keep JIT sections contiguous and use RuntimeDyld's image base for SEH registration. Unregister tables before freeing memory and stop execution when registration fails. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16fix(jit): always emit DWARF unwind frames on macOS_ov4
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-15fix(codegen): prevent NUM_TO_STR buffer overflow_ov4
Size REAL buffers for the full fixed-point double range and bound writes with snprintf. Register MinGW CRT aliases for embedded execution. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14build(toolchain)!: require LLVM and Clang 23_ov4
Reject other compiler and LLVM major versions and remove GCC compiler fallbacks. Adapt string globals, block termination checks and the embedded target triple to LLVM 23 without changing pseudocode behavior. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13feat(compiler)!: add try-catch with C++ stack unwinding_ov4
Add TRY/CATCH/ENDTRY and anonymous THROW statements. Use LLVM exception handling and the C++ ABI to propagate exceptions across function calls, clean up catch state, and handle uncaught exceptions at the program boundary. Register exception runtime symbols for the statically linked embedded runner. Verify runtime checks, nested catches, returns, loops, and invalid syntax with smoke programs; exercise unwinding with MCJIT, lli, and native binaries. BREAKING CHANGE: Runtime check failures now throw anonymous exceptions and print only a generic message when uncaught. Native binaries require linking the C++ runtime. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13fix: distinguish compiler errors and report compilation termination_ov4
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13feat: embed a statically linked LLVM execution engine_ov4
Add EMBEDDED mode to run generated modules in-process without lli or PATH lookup. Link LLVM and support archives plus the C++ runtime statically, while retaining the system C runtime on Linux. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>