Amit Levy via llvm-dev
2017-May-03 14:46 UTC
[llvm-dev] Fwd: Unsupported relocation emitted by LLVM
Hi, I'm trying to compile bare-metal relocatable binaries for Thumb using the RWPI/ROPI relocation models in the recently released version 4. The code is coming out great from clang as well as Rust (anecdotally, so far it behaves nicer overall than GCC's -msingle-pic-base in my minimal experiments). However, I'm unable to link this code since both GNU LD and LLD are missing support for the ARM relocation type R_ARM_SBREL32 (relocation type 9 in http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/IHI0044F_aaelf.pdf) which is emitted by LLVM for the RWPI relocation model. I believe the relevant function in LLD is here: https://github.com/llvm-mirror/lld/blob/f78635b8b05285750ef76b56e3b696cb34a0c49b/ELF/Target.cpp#L1856 I'm attaching a very simple file, `test.c`, which simply dereferences a global volatile int in `_start`. Compiling it without RWPI relocations works as expected: ``` $ clang --target=thumbv7-eabi -fropi -o test.o -c test.c $ ld.lld -o test test.o ``` However, compiling with RWPI turned on errors with `unrecognized reloc 9` from LLD: ``` $ clang --target=thumbv7-eabi -fropi -frwpi -o test.o -c test.c $ ld.lld -o test test.o ld.lld: error: test.c:(function _start): unrecognized reloc 9 ``` and a similar error from GNU LD: ``` $ clang --target=thumbv7-eabi -fropi -frwpi -o test.o -c test.c $ ld.lld -o test test.o test.o: In function `_start': test.c:(.text+0x28): dangerous relocation: unsupported relocation ``` As far as I can tell, the linker doesn't _actually_ need to do anything for this relocation, either. I'm not sure if that might mean there is away to work around this in the interim. Thanks! Amit -------------- next part -------------- A non-text attachment was scrubbed... Name: test.c Type: text/x-csrc Size: 100 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170503/d56c82ff/attachment.c>