Repository navigation
Linker hangs with no output 9/10 times. #88704
Description
When building various example projects, I find that the rust-lld.exe linker will just stall instead of creating the .elf file. When it works, it takes about 0.4seconds, most of the time it fails and you have to ctrl+c the command and retry, it's obviously ridiculously frustrating, especially during a pair programming session.
To make sure there was nothing odd on my PC that might be affecting it, I did a complete fresh install of the OS, rust and the tools, yet the same thing still happens.
I was able to record detailed logs using ProcessMonitor of the failure. Attached to this issue are 3 files:
good.CSV, a log from when it works.
The output was this:
PS D:\Users\Hydra\Documents\dev\playground\rust\rtic\rtic-examples\rtic_v6\stm32f4_pwm_monitor> cargo build -j1
Compiling stm32f4_pwm_input v0.1.0 (D:\Users\Hydra\Documents\dev\playground\rust\rtic\rtic-examples\rtic_v6\stm32f4_pwm_monitor)
Finished dev [unoptimized + debuginfo] target(s) in 0.70s
bad.CSVand 3)bad-after-killing.CSV. A trace was started and saved asbad.CSVwhen rust-lld.exe hanged, then a new trace was started, ctrl+c was pressed and the new trace was saved asbad-after-killing.CSVso that you can see what happens before and after ctrl+c was pressed.
The output, when it fails is this:
...
Compiling stm32f4_pwm_input v0.1.0 (D:\Users\Hydra\Documents\dev\playground\rust\rtic\rtic-examples\rtic_v6\stm32f4_pwm_monitor)
Building [=========================> ] 98/99: stm32f4_pwm_input(bin)
I'm compiling for an STM32F446RE CPU.
I tried with stable and with nightly
Meta
Project source: rtic-examples.zip
Nightly:
> rustup show
Default host: x86_64-pc-windows-gnu
rustup home: D:\Users\Hydra\.rustup
installed toolchains
--------------------
stable-x86_64-pc-windows-gnu
nightly-x86_64-pc-windows-gnu (default)
installed targets for active toolchain
--------------------------------------
thumbv7em-none-eabihf
x86_64-pc-windows-gnu
active toolchain
----------------
nightly-x86_64-pc-windows-gnu (default)
rustc 1.57.0-nightly (e30b68353 2021-09-05)
Stable:
> rustup show
Default host: x86_64-pc-windows-gnu
rustup home: D:\Users\Hydra\.rustup
installed toolchains
--------------------
stable-x86_64-pc-windows-gnu (default)
nightly-x86_64-pc-windows-gnu
installed targets for active toolchain
--------------------------------------
thumbv7em-none-eabihf
x86_64-pc-windows-gnu
active toolchain
----------------
stable-x86_64-pc-windows-gnu (default)
rustc 1.54.0 (a178d0322 2021-07-26)
Hardware:
Processor AMD Ryzen 9 5950X 16-Core Processor 3.40 GHz
Installed RAM 64.0 GB
OS:
Edition Windows 10 Pro
Version 21H1
Installed on 05/09/2021
OS build 19043.928
Experience Windows Feature Experience Pack 120.2212.551.0
If you need more information/logs/etc, just tell me what commands you want me to run and what output/files to provide.
Activity
mati865 commentedon Sep 7, 2021
Could you obtain stacktraces for the hanged process? I though we fixed all hangs like that in LLD 13 but maybe Rust's ancient GCC is even more broken than more recent versions.
mati865 commentedon Sep 7, 2021
hydra commentedon Sep 7, 2021
@mati865 Sure, but how do I obtain a stacktrace for the hung process?
mati865 commentedon Sep 7, 2021
The easiest way is to attach debugger to the process (this sometimes fixes the hang so you cannot get the trace) or create dump by right clicking on the process in task manager and load it into the debugger.
Anyway I'm back home so I've obtained the trace myself:
Indeed it looks like bug in old GCC or mingw-w64 used by Rust to build this target.
hydra commentedon Sep 7, 2021
@mati865 Awesome! Thanks ever so much for digging into it, was glad you were able to replicate the issue. Keep us all posted. I and my colleagues will be so happy when this is fixed.
Is it possible to upgrade the tools used by rust to workaround this issue?
mati865 commentedon Sep 8, 2021
Unfortunately there is no easy fix, last time I tried to upgrade the tools it couldn't make it on the CI: #51989
Mingw-builds haven't provided any new build since then, I'll try to provide more up to date toolchain but cannot give any ETA.
I don't know how
rust-lldis called here but as a workaround you could try usingld.lldfrom official LLVM builds or MSYS2.hydra commentedon Sep 8, 2021
rust-lldis called viacargo->rustc->rust-lldIIRC.Can you reach out the mingw developers to see if they can provide an updated build?
How would I go about using
ld.lld? overwrite therust-lld.exewith a different.exeor?hydra commentedon Sep 9, 2021
I found the documentation for changing the linker:
https://doc.rust-lang.org/rustc/codegen-options/index.html#linker-flavor
I will give that a try as time permits and report back.
hydra commentedon May 24, 2022
This is still an issue, I changed my linker to the gnu-ld linker for other reasons (map file generation, printing memory usage stats, etc) and forgot about this issue. Today when working on a new project I encountered the error again. I'm using a much newer version of rust since I opened this issue.
rustup showreports the following:Has there been any update to the tools? what's the current status of this? are there any other workarounds?
hydra commentedon Jul 19, 2022
Any update on this? I find it a bit crazy that such a fundamental issue, i.e. it randomly fails 9/10 times, hasn't been prioritized over other changes.
hydra commentedon Jul 19, 2022
This still happens on a very recent nightly:
example, frustrating, user experience:
Merge #83
mati865 commentedon Feb 17, 2023
The MinGW version had been updated, does this issue still happen with recent nightly?
hydra commentedon Feb 21, 2023
I'll check with the latest nightly and report back ASAP.
hydra commentedon Jun 17, 2023
Hi, Sorry for not getting back to you sooner.
I confirm this doesn't happen with the nightly from 2023-06-17, installed via rustup. To verify I ran
rustup default 1.54.0and the problem occurred again. I again switched back to the new nightly withrustup default nightly-2023-06-17-x86_64-pc-windows-gnuand the problem doesn't occur again.Happy days!
Do we know exactly which nightly and/or or stable version this issue issue was fixed in so that others coming back to this issue can ensure they are on known-working fixed version?
mati865 commentedon Jun 17, 2023
It was fixed by #100178 because this was GCC/winpthreads bug.
hydra commentedon Jun 17, 2023
ok, closing since it seems to be fixed now.