1.15.1 armhf run-make/relocation-model failed, "relocation [..] against `a local symbol' can not be used [..]; recompile with -fPIC"
Running manually on abel.debian.org:
failures:
---- [run-make] run-make/relocation-model stdout ----
error: make failed
status: exit code: 2
command: "make"
stdout:
------------------------------------------
make[3]: Entering directory '/home/infinity0/rustc/src/test/run-make/relocation-model'
LD_LIBRARY_PATH="/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf:/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib:/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib:/usr/lib/llvm-3.9/lib:" '/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/bin/rustc' --out-dir /home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf -L /home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf -C link-args=-Wl,-z,relro -C relocation-model=dynamic-no-pic foo.rs
Makefile:4: recipe for target 'all' failed
make[3]: Leaving directory '/home/infinity0/rustc/src/test/run-make/relocation-model'
------------------------------------------
stderr:
------------------------------------------
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-L" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf/foo.0.o" "-o" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf/foo" "-Wl,--gc-sections" "-pie" "-nodefaultlibs" "-L" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf" "-L" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libstd-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/librand-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libpanic_unwind-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libcollections-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/liballoc-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/liballoc_jemalloc-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libunwind-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/liblibc-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libstd_unicode-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libcore-570da8f8.rlib" "/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/stage2/lib/rustlib/armv7-unknown-linux-gnueabihf/lib/libcompiler_builtins-570da8f8.rlib" "-l" "dl" "-l" "pthread" "-l" "pthread" "-l" "gcc_s" "-l" "c" "-l" "m" "-l" "rt" "-l" "util" "-Wl,-z,relro"
= note: /usr/bin/ld: /home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf/foo.0.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/home/infinity0/rustc/armv7-unknown-linux-gnueabihf/test/run-make/relocation-model.stage2-armv7-unknown-linux-gnueabihf/foo.0.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
error: aborting due to previous error
make[3]: *** [all] Error 101
The error is triggered by all the executable rules, with relocation-model = {dynamic-no-pic, default, static}.
Building a library with
$(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs --emit=link,objis the only one that works.
Ximin Luo at 2017-03-02 21:05:50
$(RUSTC) -C relocation-model=pic foo.rsalso works. However this is weird because
src/librustc_back/target/mod.rssays the default model is "pic" but this does not appear to be overridden inarmv7_unknown_linux_gnueabihf.rs, yetrelocation-model=defaultfails. Perhaps this is #35061 ?Various other resources such as 1 and 2 suggest to me that non-PIC code is not expected to work on ARMv7, but I don't really know the details to judge this for sure. I will ignore the test for now on Debian.
Ximin Luo at 2017-03-02 21:28:39
I have similar problems working on android with armv7:
android-rs-glue/examples/basic/target/armv7-linux-androideabi/debug/deps/example-5e3c12e16b8a2e10.example2.rcgu.o: requires unsupported dynamic reloc R_ARM_THM_MOVW_ABS_NC; recompile with -fPIC
Pablo Guerrero Rosel at 2018-01-18 19:33:10
Triage: has anyone seen this error since 2018? Any way to reproduce?
Steve Klabnik at 2020-02-08 16:08:28