[llvm-bugs] [Bug 32924] New: Unsupported SBREL32 relocation emitted by LLVM
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu May 4 09:06:27 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=32924
Bug ID: 32924
Summary: Unsupported SBREL32 relocation emitted by LLVM
Product: lld
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: ELF
Assignee: unassignedbugs at nondot.org
Reporter: amit at amitlevy.com
CC: compnerd at compnerd.org, llvm-bugs at lists.llvm.org
Created attachment 18409
--> https://bugs.llvm.org/attachment.cgi?id=18409&action=edit
C test file
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.
However, I'm unable to link this code since LLD seems to be
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`. The assembly equivalent with the failing
relocation is:
.text
.syntax unified
.eabi_attribute 67, "2.09" @ Tag_conformance
.cpu arm7tdmi
.eabi_attribute 6, 2 @ Tag_CPU_arch
.eabi_attribute 8, 1 @ Tag_ARM_ISA_use
.eabi_attribute 15, 2 @ Tag_ABI_PCS_RW_data
.eabi_attribute 16, 1 @ Tag_ABI_PCS_RO_data
.eabi_attribute 17, 1 @ Tag_ABI_PCS_GOT_use
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
.eabi_attribute 34, 0 @ Tag_CPU_unaligned_access
.eabi_attribute 24, 1 @ Tag_ABI_align_needed
.eabi_attribute 25, 1 @ Tag_ABI_align_preserved
.eabi_attribute 38, 1 @ Tag_ABI_FP_16bit_format
.eabi_attribute 18, 4 @ Tag_ABI_PCS_wchar_t
.eabi_attribute 26, 2 @ Tag_ABI_enum_size
.eabi_attribute 14, 1 @ Tag_ABI_PCS_R9_use
.file "test.c"
.globl _start
.p2align 2
.type _start,%function
.code 32 @ @_start
_start:
.fnstart
@ BB#0:
ldr r0, .LCPI0_0
mov r1, r9
ldr r0, [r1, r0]
bx lr
.p2align 2
@ BB#4:
.LCPI0_0:
.long foo(sbrel)
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
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170504/86e64add/attachment.html>
More information about the llvm-bugs
mailing list