Skip to content

Commit 0aa94d3

Browse files
committed
AMDGPU: Add ELFOSABI_AMDGPU_MESA3D
Differential Revision: https://reviews.llvm.org/D38387 llvm-svn: 314846
1 parent 33cbbbc commit 0aa94d3

File tree

5 files changed

+74
-40
lines changed

5 files changed

+74
-40
lines changed

llvm/docs/AMDGPUUsage.rst

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,11 @@ The AMDGPU backend uses the following ELF header:
365365
``e_ident[EI_CLASS]`` ``ELFCLASS64``
366366
``e_ident[EI_DATA]`` ``ELFDATA2LSB``
367367
``e_ident[EI_OSABI]`` ``ELFOSABI_AMDGPU_HSA`` or
368-
``ELFOSABI_AMDGPU_PAL``
368+
``ELFOSABI_AMDGPU_PAL`` or
369+
``ELFOSABI_AMDGPU_MESA3D``
369370
``e_ident[EI_ABIVERSION]`` ``ELFABIVERSION_AMDGPU_HSA`` or
370-
``ELFABIVERSION_AMDGPU_PAL``
371+
``ELFABIVERSION_AMDGPU_PAL`` or
372+
``ELFABIVERSION_AMDGPU_MESA3D``
371373
``e_type`` ``ET_REL`` or ``ET_DYN``
372374
``e_machine`` ``EM_AMDGPU``
373375
``e_entry`` 0
@@ -379,15 +381,17 @@ The AMDGPU backend uses the following ELF header:
379381
.. table:: AMDGPU ELF Header Enumeration Values
380382
:name: amdgpu-elf-header-enumeration-values-table
381383

382-
============================ =====
383-
Name Value
384-
============================ =====
385-
``EM_AMDGPU`` 224
386-
``ELFOSABI_AMDGPU_HSA`` 64
387-
``ELFOSABI_AMDGPU_PAL`` 65
388-
``ELFABIVERSION_AMDGPU_HSA`` 1
389-
``ELFABIVERSION_AMDGPU_PAL`` 0
390-
============================ =====
384+
=============================== =====
385+
Name Value
386+
=============================== =====
387+
``EM_AMDGPU`` 224
388+
``ELFOSABI_AMDGPU_HSA`` 64
389+
``ELFOSABI_AMDGPU_PAL`` 65
390+
``ELFOSABI_AMDGPU_MESA3D`` 66
391+
``ELFABIVERSION_AMDGPU_HSA`` 1
392+
``ELFABIVERSION_AMDGPU_PAL`` 0
393+
``ELFABIVERSION_AMDGPU_MESA3D`` 0
394+
=============================== =====
391395

392396
``e_ident[EI_CLASS]``
393397
The ELF class is always ``ELFCLASS64``. The AMDGPU backend only supports 64
@@ -397,14 +401,17 @@ The AMDGPU backend uses the following ELF header:
397401
All AMDGPU targets use ELFDATA2LSB for little-endian byte ordering.
398402

399403
``e_ident[EI_OSABI]``
400-
One of two AMD GPU architecture specific OS ABI:
404+
One of the following AMD GPU architecture specific OS ABIs:
401405

402406
* ``ELFOSABI_AMDGPU_HSA`` is used to specify that the code object conforms to
403407
the AMD HSA runtime ABI [HSA]_.
404408

405409
* ``ELFOSABI_AMDGPU_PAL`` is used to specify that the code object conforms to
406410
the AMD PAL runtime ABI.
407411

412+
* ``ELFOSABI_AMDGPU_MESA3D`` is used to specify that the code object conforms
413+
to the AMD MESA runtime ABI.
414+
408415
``e_ident[EI_ABIVERSION]``
409416
The ABI version of the AMD GPU architecture specific OS ABI to which the code
410417
object conforms:
@@ -415,6 +422,9 @@ The AMDGPU backend uses the following ELF header:
415422
* ``ELFABIVERSION_AMDGPU_PAL`` is used to specify the version of AMD PAL
416423
runtime ABI.
417424

425+
* ``ELFABIVERSION_AMDGPU_MESA3D`` is used to specify the version of AMD MESA
426+
runtime ABI.
427+
418428
``e_type``
419429
Can be one of the following values:
420430

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -335,32 +335,33 @@ enum {
335335

336336
// OS ABI identification.
337337
enum {
338-
ELFOSABI_NONE = 0, // UNIX System V ABI
339-
ELFOSABI_HPUX = 1, // HP-UX operating system
340-
ELFOSABI_NETBSD = 2, // NetBSD
341-
ELFOSABI_GNU = 3, // GNU/Linux
342-
ELFOSABI_LINUX = 3, // Historical alias for ELFOSABI_GNU.
343-
ELFOSABI_HURD = 4, // GNU/Hurd
344-
ELFOSABI_SOLARIS = 6, // Solaris
345-
ELFOSABI_AIX = 7, // AIX
346-
ELFOSABI_IRIX = 8, // IRIX
347-
ELFOSABI_FREEBSD = 9, // FreeBSD
348-
ELFOSABI_TRU64 = 10, // TRU64 UNIX
349-
ELFOSABI_MODESTO = 11, // Novell Modesto
350-
ELFOSABI_OPENBSD = 12, // OpenBSD
351-
ELFOSABI_OPENVMS = 13, // OpenVMS
352-
ELFOSABI_NSK = 14, // Hewlett-Packard Non-Stop Kernel
353-
ELFOSABI_AROS = 15, // AROS
354-
ELFOSABI_FENIXOS = 16, // FenixOS
355-
ELFOSABI_CLOUDABI = 17, // Nuxi CloudABI
356-
ELFOSABI_FIRST_ARCH = 64, // First architecture-specific OS ABI
357-
ELFOSABI_AMDGPU_HSA = 64, // AMD HSA runtime
358-
ELFOSABI_AMDGPU_PAL = 65, // AMD PAL runtime
359-
ELFOSABI_ARM = 97, // ARM
360-
ELFOSABI_C6000_ELFABI = 64, // Bare-metal TMS320C6000
361-
ELFOSABI_C6000_LINUX = 65, // Linux TMS320C6000
362-
ELFOSABI_STANDALONE = 255, // Standalone (embedded) application
363-
ELFOSABI_LAST_ARCH = 255 // Last Architecture-specific OS ABI
338+
ELFOSABI_NONE = 0, // UNIX System V ABI
339+
ELFOSABI_HPUX = 1, // HP-UX operating system
340+
ELFOSABI_NETBSD = 2, // NetBSD
341+
ELFOSABI_GNU = 3, // GNU/Linux
342+
ELFOSABI_LINUX = 3, // Historical alias for ELFOSABI_GNU.
343+
ELFOSABI_HURD = 4, // GNU/Hurd
344+
ELFOSABI_SOLARIS = 6, // Solaris
345+
ELFOSABI_AIX = 7, // AIX
346+
ELFOSABI_IRIX = 8, // IRIX
347+
ELFOSABI_FREEBSD = 9, // FreeBSD
348+
ELFOSABI_TRU64 = 10, // TRU64 UNIX
349+
ELFOSABI_MODESTO = 11, // Novell Modesto
350+
ELFOSABI_OPENBSD = 12, // OpenBSD
351+
ELFOSABI_OPENVMS = 13, // OpenVMS
352+
ELFOSABI_NSK = 14, // Hewlett-Packard Non-Stop Kernel
353+
ELFOSABI_AROS = 15, // AROS
354+
ELFOSABI_FENIXOS = 16, // FenixOS
355+
ELFOSABI_CLOUDABI = 17, // Nuxi CloudABI
356+
ELFOSABI_FIRST_ARCH = 64, // First architecture-specific OS ABI
357+
ELFOSABI_AMDGPU_HSA = 64, // AMD HSA runtime
358+
ELFOSABI_AMDGPU_PAL = 65, // AMD PAL runtime
359+
ELFOSABI_AMDGPU_MESA3D = 66, // AMD GCN GPUs (GFX6+) for MESA runtime
360+
ELFOSABI_ARM = 97, // ARM
361+
ELFOSABI_C6000_ELFABI = 64, // Bare-metal TMS320C6000
362+
ELFOSABI_C6000_LINUX = 65, // Linux TMS320C6000
363+
ELFOSABI_STANDALONE = 255, // Standalone (embedded) application
364+
ELFOSABI_LAST_ARCH = 255 // Last Architecture-specific OS ABI
364365
};
365366

366367
#define ELF_RELOC(name, value) name = value,

llvm/lib/ObjectYAML/ELFYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_ELFOSABI>::enumeration(
262262
ECase(ELFOSABI_CLOUDABI);
263263
ECase(ELFOSABI_AMDGPU_HSA);
264264
ECase(ELFOSABI_AMDGPU_PAL);
265+
ECase(ELFOSABI_AMDGPU_MESA3D);
265266
ECase(ELFOSABI_ARM);
266267
ECase(ELFOSABI_C6000_ELFABI);
267268
ECase(ELFOSABI_C6000_LINUX);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# RUN: yaml2obj %s > %t.o
2+
# RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s
3+
4+
# CHECK: Format: ELF64-amdgpu
5+
# CHECK: Arch: amdgcn
6+
# CHECK: ElfHeader {
7+
# CHECK: Ident {
8+
# CHECK: OS/ABI: AMDGPU_MESA3D (0x42)
9+
# CHECK: ABIVersion: 0
10+
# CHECK: }
11+
# CHECK: Machine: EM_AMDGPU (0xE0)
12+
# CHECK: }
13+
14+
--- !ELF
15+
FileHeader:
16+
Class: ELFCLASS64
17+
Data: ELFDATA2LSB
18+
Type: ET_REL
19+
Machine: EM_AMDGPU
20+
OSABI: ELFOSABI_AMDGPU_MESA3D
21+
...

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,9 @@ static const EnumEntry<unsigned> ElfOSABI[] = {
825825
};
826826

827827
static const EnumEntry<unsigned> AMDGPUElfOSABI[] = {
828-
{"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA},
829-
{"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL}
828+
{"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA},
829+
{"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL},
830+
{"AMDGPU_MESA3D", "AMDGPU - MESA3D", ELF::ELFOSABI_AMDGPU_MESA3D}
830831
};
831832

832833
static const EnumEntry<unsigned> ARMElfOSABI[] = {

0 commit comments

Comments
 (0)