summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-07-21 15:29:19 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-07-21 15:29:19 +0000
commit155626238b4f7148b363c9a3663a9e8abc00768c (patch)
treead9eb5493f756e912706ddb6079e03f22ad2cce0
parent4ff2e36d32965bf76f9180ee15869a8922c988ba (diff)
downloadbcm5719-llvm-155626238b4f7148b363c9a3663a9e8abc00768c.tar.gz
bcm5719-llvm-155626238b4f7148b363c9a3663a9e8abc00768c.zip
AMDGPU/SI: Add support for R_AMDGPU_ABS32
Differential Revision: https://reviews.llvm.org/D21646 llvm-svn: 276294
-rw-r--r--llvm/include/llvm/Object/RelocVisitor.h13
-rw-r--r--llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp1
-rw-r--r--llvm/test/MC/AMDGPU/reloc.s4
3 files changed, 18 insertions, 0 deletions
diff --git a/llvm/include/llvm/Object/RelocVisitor.h b/llvm/include/llvm/Object/RelocVisitor.h
index 5e0df98d862..110cbf79589 100644
--- a/llvm/include/llvm/Object/RelocVisitor.h
+++ b/llvm/include/llvm/Object/RelocVisitor.h
@@ -139,6 +139,14 @@ private:
HasError = true;
return RelocToApply();
}
+ case Triple::amdgcn:
+ switch (RelocType) {
+ case llvm::ELF::R_AMDGPU_ABS32:
+ return visitELF_AMDGPU_ABS32(R, Value);
+ default:
+ HasError = true;
+ return RelocToApply();
+ }
default:
HasError = true;
return RelocToApply();
@@ -403,6 +411,11 @@ private:
return RelocToApply(static_cast<uint32_t>(Res), 4);
}
+ RelocToApply visitELF_AMDGPU_ABS32(RelocationRef R, uint64_t Value) {
+ int64_t Addend = getELFAddend(R);
+ return RelocToApply(Value + Addend, 4);
+ }
+
/// I386 COFF
RelocToApply visitCOFF_I386_SECREL(RelocationRef R, uint64_t Value) {
return RelocToApply(static_cast<uint32_t>(Value), /*Width=*/4);
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
index b4e3b8e896b..887b073acd5 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
@@ -56,6 +56,7 @@ unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx,
default: break;
case FK_PCRel_4:
return ELF::R_AMDGPU_REL32;
+ case FK_Data_4:
case FK_SecRel_4:
return ELF::R_AMDGPU_ABS32;
}
diff --git a/llvm/test/MC/AMDGPU/reloc.s b/llvm/test/MC/AMDGPU/reloc.s
index 14b0e04949c..57564b91d34 100644
--- a/llvm/test/MC/AMDGPU/reloc.s
+++ b/llvm/test/MC/AMDGPU/reloc.s
@@ -4,6 +4,7 @@
// CHECK: R_AMDGPU_ABS32_LO SCRATCH_RSRC_DWORD0 0x0
// CHECK: R_AMDGPU_ABS32_HI SCRATCH_RSRC_DWORD1 0x0
// CHECK: R_AMDGPU_GOTPCREL global_var 0x0
+// CHECK: R_AMDGPU_ABS32 var 0x0
// CHECK: ]
kernel:
@@ -14,3 +15,6 @@ kernel:
.globl global_var
.globl SCRATCH_RSRC_DWORD0
+
+.section nonalloc, "w", @progbits
+ .long var, common_var
OpenPOWER on IntegriCloud