diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp index c2d2ca0f90f93..3172a83e5a1fe 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp @@ -163,12 +163,17 @@ void AMDGPUAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, std::optional AMDGPUAsmBackend::getFixupKind(StringRef Name) const { - return StringSwitch>(Name) -#define ELF_RELOC(Name, Value) \ - .Case(#Name, MCFixupKind(FirstLiteralRelocationKind + Value)) + auto Type = StringSwitch(Name) +#define ELF_RELOC(Name, Value) .Case(#Name, Value) #include "llvm/BinaryFormat/ELFRelocs/AMDGPU.def" #undef ELF_RELOC - .Default(std::nullopt); + .Case("BFD_RELOC_NONE", ELF::R_AMDGPU_NONE) + .Case("BFD_RELOC_32", ELF::R_AMDGPU_ABS32) + .Case("BFD_RELOC_64", ELF::R_AMDGPU_ABS64) + .Default(-1u); + if (Type != -1u) + return static_cast(FirstLiteralRelocationKind + Type); + return std::nullopt; } const MCFixupKindInfo &AMDGPUAsmBackend::getFixupKindInfo( diff --git a/llvm/test/MC/AMDGPU/reloc-directive.s b/llvm/test/MC/AMDGPU/reloc-directive.s index 351a5c956295c..99e972b3105a2 100644 --- a/llvm/test/MC/AMDGPU/reloc-directive.s +++ b/llvm/test/MC/AMDGPU/reloc-directive.s @@ -19,6 +19,9 @@ # PRINT-NEXT: .reloc 0, R_AMDGPU_REL32_HI, .data # PRINT-NEXT: .reloc 0, R_AMDGPU_RELATIVE64, .data # PRINT-NEXT: .reloc 0, R_AMDGPU_REL16, .data +# PRINT-NEXT: .reloc 0, BFD_RELOC_NONE, .data +# PRINT-NEXT: .reloc 0, BFD_RELOC_32, .data +# PRINT-NEXT: .reloc 0, BFD_RELOC_64, .data # CHECK: 0x2 R_AMDGPU_NONE .data # CHECK-NEXT: 0x1 R_AMDGPU_NONE foo 0x4 @@ -36,6 +39,9 @@ # CHECK-NEXT: 0x0 R_AMDGPU_REL32_HI .data # CHECK-NEXT: 0x0 R_AMDGPU_RELATIVE64 .data # CHECK-NEXT: 0x0 R_AMDGPU_REL16 .data +# CHECK-NEXT: 0x0 R_AMDGPU_NONE .data +# CHECK-NEXT: 0x0 R_AMDGPU_ABS32 .data +# CHECK-NEXT: 0x0 R_AMDGPU_ABS64 .data .text s_nop 0 @@ -56,6 +62,9 @@ .reloc 0, R_AMDGPU_REL32_HI, .data .reloc 0, R_AMDGPU_RELATIVE64, .data .reloc 0, R_AMDGPU_REL16, .data + .reloc 0, BFD_RELOC_NONE, .data + .reloc 0, BFD_RELOC_32, .data + .reloc 0, BFD_RELOC_64, .data .data .globl foo