From 4b145dd11706fc8be8ac4137f1d455bb8cbe9e88 Mon Sep 17 00:00:00 2001 From: Konstantin Zhuravlyov Date: Tue, 3 Oct 2017 21:14:14 +0000 Subject: [PATCH] AMDGPU: Add ELFOSABI_AMDGPU_MESA3D Differential Revision: https://reviews.llvm.org/D38387 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314846 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/AMDGPUUsage.rst | 34 +++++++++----- include/llvm/BinaryFormat/ELF.h | 53 +++++++++++----------- lib/ObjectYAML/ELFYAML.cpp | 1 + .../AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml | 21 +++++++++ tools/llvm-readobj/ELFDumper.cpp | 5 +- 5 files changed, 74 insertions(+), 40 deletions(-) create mode 100644 test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml diff --git a/docs/AMDGPUUsage.rst b/docs/AMDGPUUsage.rst index 2e9840905e2..ac8c0bd884f 100644 --- a/docs/AMDGPUUsage.rst +++ b/docs/AMDGPUUsage.rst @@ -365,9 +365,11 @@ The AMDGPU backend uses the following ELF header: ``e_ident[EI_CLASS]`` ``ELFCLASS64`` ``e_ident[EI_DATA]`` ``ELFDATA2LSB`` ``e_ident[EI_OSABI]`` ``ELFOSABI_AMDGPU_HSA`` or - ``ELFOSABI_AMDGPU_PAL`` + ``ELFOSABI_AMDGPU_PAL`` or + ``ELFOSABI_AMDGPU_MESA3D`` ``e_ident[EI_ABIVERSION]`` ``ELFABIVERSION_AMDGPU_HSA`` or - ``ELFABIVERSION_AMDGPU_PAL`` + ``ELFABIVERSION_AMDGPU_PAL`` or + ``ELFABIVERSION_AMDGPU_MESA3D`` ``e_type`` ``ET_REL`` or ``ET_DYN`` ``e_machine`` ``EM_AMDGPU`` ``e_entry`` 0 @@ -379,15 +381,17 @@ The AMDGPU backend uses the following ELF header: .. table:: AMDGPU ELF Header Enumeration Values :name: amdgpu-elf-header-enumeration-values-table - ============================ ===== - Name Value - ============================ ===== - ``EM_AMDGPU`` 224 - ``ELFOSABI_AMDGPU_HSA`` 64 - ``ELFOSABI_AMDGPU_PAL`` 65 - ``ELFABIVERSION_AMDGPU_HSA`` 1 - ``ELFABIVERSION_AMDGPU_PAL`` 0 - ============================ ===== + =============================== ===== + Name Value + =============================== ===== + ``EM_AMDGPU`` 224 + ``ELFOSABI_AMDGPU_HSA`` 64 + ``ELFOSABI_AMDGPU_PAL`` 65 + ``ELFOSABI_AMDGPU_MESA3D`` 66 + ``ELFABIVERSION_AMDGPU_HSA`` 1 + ``ELFABIVERSION_AMDGPU_PAL`` 0 + ``ELFABIVERSION_AMDGPU_MESA3D`` 0 + =============================== ===== ``e_ident[EI_CLASS]`` The ELF class is always ``ELFCLASS64``. The AMDGPU backend only supports 64 @@ -397,7 +401,7 @@ The AMDGPU backend uses the following ELF header: All AMDGPU targets use ELFDATA2LSB for little-endian byte ordering. ``e_ident[EI_OSABI]`` - One of two AMD GPU architecture specific OS ABI: + One of the following AMD GPU architecture specific OS ABIs: * ``ELFOSABI_AMDGPU_HSA`` is used to specify that the code object conforms to the AMD HSA runtime ABI [HSA]_. @@ -405,6 +409,9 @@ The AMDGPU backend uses the following ELF header: * ``ELFOSABI_AMDGPU_PAL`` is used to specify that the code object conforms to the AMD PAL runtime ABI. + * ``ELFOSABI_AMDGPU_MESA3D`` is used to specify that the code object conforms + to the AMD MESA runtime ABI. + ``e_ident[EI_ABIVERSION]`` The ABI version of the AMD GPU architecture specific OS ABI to which the code object conforms: @@ -415,6 +422,9 @@ The AMDGPU backend uses the following ELF header: * ``ELFABIVERSION_AMDGPU_PAL`` is used to specify the version of AMD PAL runtime ABI. + * ``ELFABIVERSION_AMDGPU_MESA3D`` is used to specify the version of AMD MESA + runtime ABI. + ``e_type`` Can be one of the following values: diff --git a/include/llvm/BinaryFormat/ELF.h b/include/llvm/BinaryFormat/ELF.h index f83946a48c2..712e67ef52a 100644 --- a/include/llvm/BinaryFormat/ELF.h +++ b/include/llvm/BinaryFormat/ELF.h @@ -335,32 +335,33 @@ enum { // OS ABI identification. enum { - ELFOSABI_NONE = 0, // UNIX System V ABI - ELFOSABI_HPUX = 1, // HP-UX operating system - ELFOSABI_NETBSD = 2, // NetBSD - ELFOSABI_GNU = 3, // GNU/Linux - ELFOSABI_LINUX = 3, // Historical alias for ELFOSABI_GNU. - ELFOSABI_HURD = 4, // GNU/Hurd - ELFOSABI_SOLARIS = 6, // Solaris - ELFOSABI_AIX = 7, // AIX - ELFOSABI_IRIX = 8, // IRIX - ELFOSABI_FREEBSD = 9, // FreeBSD - ELFOSABI_TRU64 = 10, // TRU64 UNIX - ELFOSABI_MODESTO = 11, // Novell Modesto - ELFOSABI_OPENBSD = 12, // OpenBSD - ELFOSABI_OPENVMS = 13, // OpenVMS - ELFOSABI_NSK = 14, // Hewlett-Packard Non-Stop Kernel - ELFOSABI_AROS = 15, // AROS - ELFOSABI_FENIXOS = 16, // FenixOS - 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_STANDALONE = 255, // Standalone (embedded) application - ELFOSABI_LAST_ARCH = 255 // Last Architecture-specific OS ABI + ELFOSABI_NONE = 0, // UNIX System V ABI + ELFOSABI_HPUX = 1, // HP-UX operating system + ELFOSABI_NETBSD = 2, // NetBSD + ELFOSABI_GNU = 3, // GNU/Linux + ELFOSABI_LINUX = 3, // Historical alias for ELFOSABI_GNU. + ELFOSABI_HURD = 4, // GNU/Hurd + ELFOSABI_SOLARIS = 6, // Solaris + ELFOSABI_AIX = 7, // AIX + ELFOSABI_IRIX = 8, // IRIX + ELFOSABI_FREEBSD = 9, // FreeBSD + ELFOSABI_TRU64 = 10, // TRU64 UNIX + ELFOSABI_MODESTO = 11, // Novell Modesto + ELFOSABI_OPENBSD = 12, // OpenBSD + ELFOSABI_OPENVMS = 13, // OpenVMS + ELFOSABI_NSK = 14, // Hewlett-Packard Non-Stop Kernel + ELFOSABI_AROS = 15, // AROS + ELFOSABI_FENIXOS = 16, // FenixOS + 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_AMDGPU_MESA3D = 66, // AMD GCN GPUs (GFX6+) for MESA runtime + ELFOSABI_ARM = 97, // ARM + ELFOSABI_C6000_ELFABI = 64, // Bare-metal TMS320C6000 + ELFOSABI_C6000_LINUX = 65, // Linux TMS320C6000 + ELFOSABI_STANDALONE = 255, // Standalone (embedded) application + ELFOSABI_LAST_ARCH = 255 // Last Architecture-specific OS ABI }; #define ELF_RELOC(name, value) name = value, diff --git a/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp index 21777c0f459..36db8eae5ba 100644 --- a/lib/ObjectYAML/ELFYAML.cpp +++ b/lib/ObjectYAML/ELFYAML.cpp @@ -262,6 +262,7 @@ void ScalarEnumerationTraits::enumeration( ECase(ELFOSABI_CLOUDABI); ECase(ELFOSABI_AMDGPU_HSA); ECase(ELFOSABI_AMDGPU_PAL); + ECase(ELFOSABI_AMDGPU_MESA3D); ECase(ELFOSABI_ARM); ECase(ELFOSABI_C6000_ELFABI); ECase(ELFOSABI_C6000_LINUX); diff --git a/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml b/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml new file mode 100644 index 00000000000..7fa413f64a1 --- /dev/null +++ b/test/Object/AMDGPU/elf64-amdgcn-mesa3d-definitions.yaml @@ -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_MESA3D (0x42) +# 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_MESA3D +... diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 4ea0ed2f5ee..387ad364eba 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -825,8 +825,9 @@ static const EnumEntry ElfOSABI[] = { }; static const EnumEntry AMDGPUElfOSABI[] = { - {"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA}, - {"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL} + {"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA}, + {"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL}, + {"AMDGPU_MESA3D", "AMDGPU - MESA3D", ELF::ELFOSABI_AMDGPU_MESA3D} }; static const EnumEntry ARMElfOSABI[] = { -- 2.11.0