Open stevemk14ebr opened 3 years ago
I traced this down. The issues is that even though i'm no_std libcore is compiled/requires unwind info. This makes __CxxFrameHandler3 be required to link properly. This symbol isn't needed however so i had defined it to make the compiler happy, but that is the issue of where the linker is faulting, undefining this symbols fix the ICE's.
To make the build happy without this I needed to add the lto flag, which works for whatever reason. I think that cargo should not use a libcore with unwind info if no_std is specified:
[profile.dev]
panic = "abort"
lto = true
[profile.release]
panic = "abort"
lto = true
I'm on nightly (cargo 1.54.0-nightly (070e459c2 2021-05-11). I attempted to use lld-link.exe from https://prereleases.llvm.org/win-snapshots/LLVM-12.0.0-6923b0a7-win64.exe to build the project in release mode. I originally switched to lld-link because the same project caused msvc's link.exe to throw an access_violation also only in the release build. Debug works fine with both linkers. Here's the project, it's a no_std windows driver with barebones logic for a wasm interpreter that's also no_std. There's some linker flags in the .cargo/config to specify the necessary windows driver link options, i haven't verified if these are correct for lld yet:
RSTrace.zip
lld ICE:
link.exe access violation: