AMDGPU: Add ELFOSABI_AMDGPU_PAL
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>
Tue, 3 Oct 2017 20:54:07 +0000 (20:54 +0000)
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>
Tue, 3 Oct 2017 20:54:07 +0000 (20:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314843 91177308-0d34-0410-b5e6-96231b3b80d8

docs/AMDGPUUsage.rst
include/llvm/BinaryFormat/ELF.h
include/llvm/Object/ELFObjectFile.h
lib/ObjectYAML/ELFYAML.cpp
test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml [moved from test/Object/AMDGPU/elf-definitions.yaml with 91% similarity]
test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml [new file with mode: 0644]
test/Object/AMDGPU/objdump.s
test/tools/llvm-readobj/amdgpu-elf-definitions.test
tools/llvm-readobj/ELFDumper.cpp

index 42131f8d1a8c33a8410dc313c02035166779ebfa..2e9840905e26ed00503188d6fe3b33c1fc726bd4 100644 (file)
@@ -359,18 +359,20 @@ The AMDGPU backend uses the following ELF header:
   .. table:: AMDGPU ELF Header
      :name: amdgpu-elf-header-table
 
-     ========================== =========================
+     ========================== ===============================
      Field                      Value
-     ========================== =========================
+     ========================== ===============================
      ``e_ident[EI_CLASS]``      ``ELFCLASS64``
      ``e_ident[EI_DATA]``       ``ELFDATA2LSB``
-     ``e_ident[EI_OSABI]``      ``ELFOSABI_AMDGPU_HSA``
-     ``e_ident[EI_ABIVERSION]`` ``ELFABIVERSION_AMDGPU_HSA``
+     ``e_ident[EI_OSABI]``      ``ELFOSABI_AMDGPU_HSA`` or
+                                ``ELFOSABI_AMDGPU_PAL``
+     ``e_ident[EI_ABIVERSION]`` ``ELFABIVERSION_AMDGPU_HSA`` or
+                                ``ELFABIVERSION_AMDGPU_PAL``
      ``e_type``                 ``ET_REL`` or ``ET_DYN``
      ``e_machine``              ``EM_AMDGPU``
      ``e_entry``                0
      ``e_flags``                0
-     ========================== =========================
+     ========================== ===============================
 
 ..
 
@@ -382,24 +384,36 @@ The AMDGPU backend uses the following ELF header:
      ============================ =====
      ``EM_AMDGPU``                224
      ``ELFOSABI_AMDGPU_HSA``      64
+     ``ELFOSABI_AMDGPU_PAL``      65
      ``ELFABIVERSION_AMDGPU_HSA`` 1
+     ``ELFABIVERSION_AMDGPU_PAL`` 0
      ============================ =====
 
 ``e_ident[EI_CLASS]``
-  The ELF class is always ``ELFCLASS64``. The AMDGPU backend only supports 64 bit
-  applications.
+  The ELF class is always ``ELFCLASS64``. The AMDGPU backend only supports 64
+  bit applications.
 
 ``e_ident[EI_DATA]``
   All AMDGPU targets use ELFDATA2LSB for little-endian byte ordering.
 
 ``e_ident[EI_OSABI]``
-  The AMD GPU architecture specific OS ABI of ``ELFOSABI_AMDGPU_HSA`` is used to
-  specify that the code object conforms to the AMD HSA runtime ABI [HSA]_.
+  One of two AMD GPU architecture specific OS ABI:
+
+  * ``ELFOSABI_AMDGPU_HSA`` is used to specify that the code object conforms to
+    the AMD HSA runtime ABI [HSA]_.
+
+  * ``ELFOSABI_AMDGPU_PAL`` is used to specify that the code object conforms to
+    the AMD PAL runtime ABI.
 
 ``e_ident[EI_ABIVERSION]``
-  The AMD GPU architecture specific OS ABI version of
-  ``ELFABIVERSION_AMDGPU_HSA`` is used to specify the version of AMD HSA runtime
-  ABI to which the code object conforms.
+  The ABI version of the AMD GPU architecture specific OS ABI to which the code
+  object conforms:
+
+  * ``ELFABIVERSION_AMDGPU_HSA`` is used to specify the version of AMD HSA
+    runtime ABI.
+
+  * ``ELFABIVERSION_AMDGPU_PAL`` is used to specify the version of AMD PAL
+    runtime ABI.
 
 ``e_type``
   Can be one of the following values:
index 47869c16eb43decd9e60d304a977e3a3280e2e7c..f83946a48c2d9e0ac87f34d0ec780466b7ae443f 100644 (file)
@@ -355,9 +355,10 @@ enum {
   ELFOSABI_CLOUDABI = 17,     // Nuxi CloudABI
   ELFOSABI_FIRST_ARCH = 64,   // First architecture-specific OS ABI
   ELFOSABI_AMDGPU_HSA = 64,   // AMD HSA runtime
+  ELFOSABI_AMDGPU_PAL = 65,   // AMD PAL runtime
+  ELFOSABI_ARM = 97,          // ARM
   ELFOSABI_C6000_ELFABI = 64, // Bare-metal TMS320C6000
   ELFOSABI_C6000_LINUX = 65,  // Linux TMS320C6000
-  ELFOSABI_ARM = 97,          // ARM
   ELFOSABI_STANDALONE = 255,  // Standalone (embedded) application
   ELFOSABI_LAST_ARCH = 255    // Last Architecture-specific OS ABI
 };
index f436e4534ce16a200e26639cdb64c7e19e934012..b4411ce984ea4f196637f32162b2812e5b962934 100644 (file)
@@ -995,9 +995,7 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName() const {
     case ELF::EM_WEBASSEMBLY:
       return "ELF64-wasm";
     case ELF::EM_AMDGPU:
-      return (EF.getHeader()->e_ident[ELF::EI_OSABI] == ELF::ELFOSABI_AMDGPU_HSA
-              && IsLittleEndian) ?
-             "ELF64-amdgpu-hsacobj" : "ELF64-amdgpu";
+      return "ELF64-amdgpu";
     case ELF::EM_BPF:
       return "ELF64-BPF";
     default:
@@ -1066,10 +1064,13 @@ unsigned ELFObjectFile<ELFT>::getArch() const {
     }
 
   case ELF::EM_AMDGPU:
-    return (EF.getHeader()->e_ident[ELF::EI_CLASS] == ELF::ELFCLASS64
-         && EF.getHeader()->e_ident[ELF::EI_OSABI] == ELF::ELFOSABI_AMDGPU_HSA
-         && IsLittleEndian) ?
-      Triple::amdgcn : Triple::UnknownArch;
+    if (EF.getHeader()->e_ident[ELF::EI_CLASS] != ELF::ELFCLASS64)
+      return Triple::UnknownArch;
+    if (!IsLittleEndian)
+      return Triple::UnknownArch;
+
+    // TODO: Determine r600/amdgcn architecture based e_flags.
+    return Triple::amdgcn;
 
   case ELF::EM_BPF:
     return IsLittleEndian ? Triple::bpfel : Triple::bpfeb;
index ccd9eebb8aad7dc8221029ac9ccf292a3e62c316..21777c0f45946e9e5739d0ca14cceb61e3303fdc 100644 (file)
@@ -260,10 +260,11 @@ void ScalarEnumerationTraits<ELFYAML::ELF_ELFOSABI>::enumeration(
   ECase(ELFOSABI_AROS);
   ECase(ELFOSABI_FENIXOS);
   ECase(ELFOSABI_CLOUDABI);
-  ECase(ELFOSABI_C6000_ELFABI);
   ECase(ELFOSABI_AMDGPU_HSA);
-  ECase(ELFOSABI_C6000_LINUX);
+  ECase(ELFOSABI_AMDGPU_PAL);
   ECase(ELFOSABI_ARM);
+  ECase(ELFOSABI_C6000_ELFABI);
+  ECase(ELFOSABI_C6000_LINUX);
   ECase(ELFOSABI_STANDALONE);
 #undef ECase
 }
similarity index 91%
rename from test/Object/AMDGPU/elf-definitions.yaml
rename to test/Object/AMDGPU/elf64-amdgcn-amdhsa-definitions.yaml
index 07fe8c62dc47b84afba1ff270f4254a2d26594d9..53639e001584f62cf556748306f8efe4058858bf 100644 (file)
@@ -1,7 +1,7 @@
 # RUN: yaml2obj %s > %t.o
 # RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s
 
-# CHECK: Format: ELF64-amdgpu-hsacobj
+# CHECK: Format: ELF64-amdgpu
 # CHECK: Arch: amdgcn
 # CHECK: ElfHeader {
 # CHECK:   Ident {
diff --git a/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml b/test/Object/AMDGPU/elf64-amdgcn-amdpal-definitions.yaml
new file mode 100644 (file)
index 0000000..8e39f6d
--- /dev/null
@@ -0,0 +1,21 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s
+
+# CHECK: Format: ELF64-amdgpu
+# CHECK: Arch: amdgcn
+# CHECK: ElfHeader {
+# CHECK:   Ident {
+# CHECK:     OS/ABI: AMDGPU_PAL (0x41)
+# CHECK:     ABIVersion: 0
+# CHECK:   }
+# CHECK:   Machine: EM_AMDGPU (0xE0)
+# CHECK: }
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_AMDGPU
+  OSABI:   ELFOSABI_AMDGPU_PAL
+...
index 83f0df2e2e68c6459e8290b16ca87cc82aceadb5..3cdf90be696c42c5e31cfdb1bb024a36343cfad9 100644 (file)
@@ -45,7 +45,7 @@ BB5:
        v_lshlrev_b32_e32 v7, 2, v7
         s_endpgm
 
-// CHECK:  file format ELF64-amdgpu-hsacobj
+// CHECK:  file format ELF64-amdgpu
 // CHECK:  Disassembly of section .text:
 // CHECK:  hello_world:
 // CHECK:  s_mov_b32 m0, 0x10000                                      // 000000000100: BEFC00FF 00010000
index c30931242df6fb2f1c857aeae217bad68f7f4a1e..e52f98794566ddc9c72faf0864695a5d67d2f475 100644 (file)
@@ -1,6 +1,6 @@
 RUN: llvm-readobj -file-headers -program-headers -sections -symbols %p/Inputs/trivial.obj.elf-amdhsa-gfx803 | FileCheck %s
 
-CHECK: Format: ELF64-amdgpu-hsacobj
+CHECK: Format: ELF64-amdgpu
 CHECK: Arch: amdgcn
 CHECK: ElfHeader {
 CHECK:   Ident {
index dd32a8a2fbce3b23292d83d079e621730c1b6235..4ea0ed2f5eef89059c92d07e2363fa7b375348ce 100644 (file)
@@ -825,7 +825,8 @@ static const EnumEntry<unsigned> ElfOSABI[] = {
 };
 
 static const EnumEntry<unsigned> AMDGPUElfOSABI[] = {
-  {"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA}
+  {"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA},
+  {"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL}
 };
 
 static const EnumEntry<unsigned> ARMElfOSABI[] = {