Index: include/llvm/MC/MCDirectives.h =================================================================== --- include/llvm/MC/MCDirectives.h +++ include/llvm/MC/MCDirectives.h @@ -27,6 +27,8 @@ MCSA_ELF_TypeCommon, ///< .type _foo, STT_COMMON # aka @common MCSA_ELF_TypeNoType, ///< .type _foo, STT_NOTYPE # aka @notype MCSA_ELF_TypeGnuUniqueObject, /// .type _foo, @gnu_unique_object + /// .type _foo, STT_AMDGPU_HSA_KERNEL, @amdgpu_hsa_kernel (AMDGPU) + MCSA_ELF_TypeAMDGPUHSAKernel, MCSA_Global, ///< .globl MCSA_Hidden, ///< .hidden (ELF) MCSA_IndirectSymbol, ///< .indirect_symbol (MachO) Index: lib/MC/MCAsmStreamer.cpp =================================================================== --- lib/MC/MCAsmStreamer.cpp +++ lib/MC/MCAsmStreamer.cpp @@ -425,6 +425,8 @@ case MCSA_ELF_TypeCommon: /// .type _foo, STT_COMMON # aka @common case MCSA_ELF_TypeNoType: /// .type _foo, STT_NOTYPE # aka @notype case MCSA_ELF_TypeGnuUniqueObject: /// .type _foo, @gnu_unique_object + case MCSA_ELF_TypeAMDGPUHSAKernel: /// .type _foo, STT_AMDGPU_SHA_KERNEL + /// aka @amdgpu_hsa_kernel if (!MAI->hasDotTypeDotSizeDirective()) return false; // Symbol attribute not supported OS << "\t.type\t"; @@ -439,6 +441,7 @@ case MCSA_ELF_TypeCommon: OS << "common"; break; case MCSA_ELF_TypeNoType: OS << "no_type"; break; case MCSA_ELF_TypeGnuUniqueObject: OS << "gnu_unique_object"; break; + case MCSA_ELF_TypeAMDGPUHSAKernel: OS << "amdgpu_hsa_kernel"; break; } EmitEOL(); return true; Index: lib/MC/MCELFStreamer.cpp =================================================================== --- lib/MC/MCELFStreamer.cpp +++ lib/MC/MCELFStreamer.cpp @@ -258,6 +258,10 @@ Symbol->setExternal(false); break; + case MCSA_ELF_TypeAMDGPUHSAKernel: + Symbol->setType(ELF::STT_AMDGPU_HSA_KERNEL); + break; + case MCSA_ELF_TypeFunction: Symbol->setType(CombineSymbolTypes(Symbol->getType(), ELF::STT_FUNC)); break; Index: lib/MC/MCParser/ELFAsmParser.cpp =================================================================== --- lib/MC/MCParser/ELFAsmParser.cpp +++ lib/MC/MCParser/ELFAsmParser.cpp @@ -567,6 +567,8 @@ .Cases("STT_GNU_IFUNC", "gnu_indirect_function", MCSA_ELF_TypeIndFunction) .Case("gnu_unique_object", MCSA_ELF_TypeGnuUniqueObject) + .Cases("STT_AMDGPU_HSA_KERNEL", "amdgpu_hsa_kernel", + MCSA_ELF_TypeAMDGPUHSAKernel) .Default(MCSA_Invalid); } Index: lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp =================================================================== --- lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp +++ lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp @@ -35,7 +35,6 @@ //===--- Global Variable Emission Directives --------------------------===// HasAggressiveSymbolFolding = true; COMMDirectiveAlignmentIsInBytes = false; - HasDotTypeDotSizeDirective = false; HasNoDeadStrip = true; WeakRefDirective = ".weakref\t"; //===--- Dwarf Emission Directives -----------------------------------===// Index: test/MC/AMDGPU/hsa.s =================================================================== --- test/MC/AMDGPU/hsa.s +++ test/MC/AMDGPU/hsa.s @@ -1,5 +1,5 @@ // RUN: llvm-mc -triple amdgcn--amdhsa -mcpu=kaveri -show-encoding %s | FileCheck %s --check-prefix=ASM -// RUN: llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri -show-encoding %s | llvm-readobj -s -sd | FileCheck %s --check-prefix=ELF +// RUN: llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri -show-encoding %s | llvm-readobj -symbols -s -sd | FileCheck %s --check-prefix=ELF // ELF: SHT_NOTE // ELF: 0000: 04000000 08000000 01000000 414D4400 @@ -8,12 +8,24 @@ // ELF: 0030: 00000000 00000000 414D4400 414D4447 // ELF: 0040: 50550000 +// ELF: Symbol { +// ELF: Name: amd_kernel_code_t_minimal +// ELF: Type: AMDGPU_HSA_KERNEL (0xA) +// ELF: } +// ELF: Symbol { +// ELF: Name: amd_kernel_code_t_test_all +// ELF: Type: AMDGPU_HSA_KERNEL (0xA) +// ELF: } + .hsa_code_object_version 1,0 // ASM: .hsa_code_object_version 1,0 .hsa_code_object_isa 7,0,0,"AMD","AMDGPU" // ASM: .hsa_code_object_isa 7,0,0,"AMD","AMDGPU" +.type amd_kernel_code_t_test_all,STT_AMDGPU_HSA_KERNEL +.type amd_kernel_code_t_minimal,@amdgpu_hsa_kernel + .text amd_kernel_code_t_test_all: ; Test all amd_kernel_code_t members with non-default values.