diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp @@ -74,9 +74,9 @@ return ELF::R_AMDGPU_REL32; case FK_Data_4: case FK_SecRel_4: - return ELF::R_AMDGPU_ABS32; + return IsPCRel ? ELF::R_AMDGPU_REL32 : ELF::R_AMDGPU_ABS32; case FK_Data_8: - return ELF::R_AMDGPU_ABS64; + return IsPCRel ? ELF::R_AMDGPU_REL64 : ELF::R_AMDGPU_ABS64; } if (Fixup.getTargetKind() == AMDGPU::fixup_si_sopp_br) { diff --git a/llvm/test/MC/AMDGPU/cfi_reloc.s b/llvm/test/MC/AMDGPU/cfi_reloc.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AMDGPU/cfi_reloc.s @@ -0,0 +1,16 @@ +// RUN: llvm-mc -filetype=obj -triple amdgcn-- -mcpu=kaveri -show-encoding %s | llvm-readobj -r - | FileCheck %s + +// CHECK: Relocations [ +// CHECK: .rel.eh_frame { +// CHECK: R_AMDGPU_REL32 .text +// CHECK: } +// CHECK: .rel.debug_frame { +// CHECK: R_AMDGPU_ABS64 .text +// CHECK: } +// CHECK: ] + +kernel: + .cfi_startproc + .cfi_sections .debug_frame, .eh_frame + s_endpgm + .cfi_endproc \ No newline at end of file