From b5b1e5a2a684a1ec96fae3408d322b92c38354e6 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 16 Oct 2026 16:00:03 +0000 Subject: fix(jit): resolve MinGW stack probe for embedded execution 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 --- tools/driver/EmbeddedRunner.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'tools') diff --git a/tools/driver/EmbeddedRunner.cc b/tools/driver/EmbeddedRunner.cc index 317e900..8ebffab 100644 --- a/tools/driver/EmbeddedRunner.cc +++ b/tools/driver/EmbeddedRunner.cc @@ -276,6 +276,11 @@ __gxx_personality_v0 extern "C" void __cps_jit_noop__main() {} #endif +// MinGW inserts ___chkstk_ms stack probes into large frames. dlsym cannot see +// this static runtime symbol, so reference it weakly: null on platforms +// without it, host address where present. Same code on all platforms. +extern "C" void ___chkstk_ms() __attribute__((weak)); + static llvm::Error defineRuntimeSymbols(llvm::orc::LLJIT &J) { llvm::orc::SymbolMap Symbols; auto Intern = [&](llvm::StringRef Name) { return J.mangleAndIntern(Name); }; @@ -317,6 +322,9 @@ static llvm::Error defineRuntimeSymbols(llvm::orc::LLJIT &J) { Symbols[Intern("__main")] = ExecutorSymbolDef::fromPtr(&__cps_jit_noop__main); #endif + if (___chkstk_ms) + Symbols[Intern("___chkstk_ms")] = + ExecutorSymbolDef::fromPtr(reinterpret_cast(&___chkstk_ms)); return J.getMainJITDylib().define( llvm::orc::absoluteSymbols(std::move(Symbols))); } -- cgit v1.3.1-4-g156e