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.