diff options
| author | Tim Northover <tnorthover@apple.com> | 2014-04-24 12:12:10 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2014-04-24 12:12:10 +0000 |
| commit | 79ec019261e44ad5c03194aa124e4a5b1be04f7d (patch) | |
| tree | dfecc805095d966b2839f8e68f902fcc6ecc384b /llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp | |
| parent | cf16ec238e469dcc83d335fddaa25a713231a2aa (diff) | |
| download | bcm5719-llvm-79ec019261e44ad5c03194aa124e4a5b1be04f7d.tar.gz bcm5719-llvm-79ec019261e44ad5c03194aa124e4a5b1be04f7d.zip | |
AArch64/ARM64: disentangle the "B.CC" and "LDR lit" operands
These can have different relocations in ELF. In particular both:
b.eq global
ldr x0, global
are valid, giving different relocations. The only possible way to distinguish
them is via a different fixup, so the operands had to be separated throughout
the backend.
llvm-svn: 207105
Diffstat (limited to 'llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp b/llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp index fe3070c019e..718501f918e 100644 --- a/llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp +++ b/llvm/lib/Target/ARM64/MCTargetDesc/ARM64ELFObjectWriter.cpp @@ -82,11 +82,11 @@ unsigned ARM64ELFObjectWriter::GetRelocType(const MCValue &Target, return ELF::R_AARCH64_JUMP26; case ARM64::fixup_arm64_pcrel_call26: return ELF::R_AARCH64_CALL26; - case ARM64::fixup_arm64_pcrel_imm19: - // A bit of an oddity here: shared by both "ldr x0, :gottprel:var" and - // "b.eq var". + case ARM64::fixup_arm64_ldr_pcrel_imm19: if (SymLoc == ARM64MCExpr::VK_GOTTPREL) return ELF::R_AARCH64_TLSIE_LD_GOTTPREL_PREL19; + return ELF::R_AARCH64_LD_PREL_LO19; + case ARM64::fixup_arm64_pcrel_branch19: return ELF::R_AARCH64_CONDBR19; default: llvm_unreachable("Unsupported pc-relative fixup kind"); |

