Go back to producing relocations for out of range symbols.

This brings back the behavior from before r252090 for out of range symbols.

Should bring some arm bots back.

llvm-svn: 252119
This commit is contained in:
Rafael Espindola 2015-11-05 01:10:15 +00:00
parent ba5757da64
commit e61a902371
3 changed files with 9 additions and 13 deletions

View File

@ -639,13 +639,11 @@ void ARMAsmBackend::processFixupValue(const MCAssembler &Asm,
// If the symbol is external the linker will handle it.
// FIXME: Should we handle it as an optimization?
if (Sym->isExternal()) {
// If the symbol is out of range, produce a relocation and hope the
// linker can handle it. GNU AS produces an error in this case.
if (Sym->isExternal() || Value >= 0x400004)
IsResolved = false;
} else {
if (Value >= 0x400004)
Asm.getContext().reportFatalError(Fixup.getLoc(),
"out of range for branch");
}
}
// We must always generate a relocation for BL/BLX instructions if we have
// a symbol to reference, as the linker relies on knowing the destination

View File

@ -1,7 +0,0 @@
@ RUN: not llvm-mc < %s -triple thumbv5-linux-gnueabi -filetype=obj -o %t 2>&1 | FileCheck %s
bl end
.space 0x400000
end:
@ CHECK: out of range for branch

View File

@ -16,5 +16,10 @@ end2:
.global end3
end3:
bl end4
.space 0x400000
end4:
@ CHECK: 0x400003 R_ARM_THM_CALL end2 0x0
@ CHECK: 0x800006 R_ARM_THM_CALL end3 0x0
@ CHECK: 0xC0000A R_ARM_THM_CALL end4 0x0