roc-lang / basic-webserver

A basic webserver in Roc

Home Page:https://roc-lang.github.io/basic-webserver/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`Undefined Symbol in relocation` when building example on linux x86_64

Anton-4 opened this issue · comments

❯ ./roc build ~/gitrepos/basic-webserver/examples/todos.roc 
🔨 Rebuilding platform...
An internal compiler expectation was broken.
This is definitely a compiler bug.
Please file an issue here: https://github.com/roc-lang/roc/issues/new/choose
thread 'main' panicked at 'Undefined Symbol in relocation, (+1b97, Relocation { kind: PltRelative, encoding: Generic, size: +20, target: Symbol(SymbolIndex(+13d)), addend: +fffffffffffffffc, implicit_addend: false }): Ok(Symbol { name: "memset", address: +0, size: +0, kind: Label, section: Undefined, scope: Unknown, weak: false, flags: Elf { st_info: +10, st_other: +0 } })', crates/linker/src/elf.rs:1486:25
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

This is not specific to this example, and appears to happen for all of them.

The cause of this issue is: roc-lang/roc#3609

I think this only happens with export CARGO_BUILD_TARGET=x86_64-unknown-linux-musl. This is required for releases with good compatibility. I was also on the more-features branch, not on main.

Temporary workaround:

roc build ~/gitrepos/basic-webserver/examples/todos.roc --linker=legacy

this bug seems to block the git build pipeline. Should we, as a temporary workaround change the ci/all_tests.sh script, so it uses --linker=legacy until the bug is fiexed?

This is not caused by roc-lang/roc#3609

It is probably caused by the compiler-rt related changes that got pulled into this PR: roc-lang/roc#6216

Zig should be automatically bundling the compiler-rt and libc related functions that we use in the builtins. That should include memcpy and memset. My guess is that it is still getting removed by DCE for some reason.

Need to circle back to this when I have more time, but first steps would be to double check the zig generated llvm ir actually has these functions and if it does, double check our llvm DCE related passes and such.

EDIT: If I don't circle back to this in like a week and no one else fixes it, can someone ping me?

This should fix for at least regular linux: roc-lang/roc#6515

I'm not sure what is going on with musl yet.