aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2022-03-16 09:00:27 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2022-03-16 09:00:27 -0400
commit978602e83f038106c8254424ca83991d784b37cf (patch)
tree2713f291ce01c4b0df77e4cd296ca48c090676f4 /include
parentf4f95df31b0172bf182e6a516ba23e299323bb2a (diff)
downloadgdb-978602e83f038106c8254424ca83991d784b37cf.zip
gdb-978602e83f038106c8254424ca83991d784b37cf.tar.gz
gdb-978602e83f038106c8254424ca83991d784b37cf.tar.bz2
bfd: add AMDGCN architecture
Add support for the AMDGCN architecture to BFD. This is the bare minimum to get $ ./configure --target=amdgcn-hsa-amdhsa --disable-gas $ make all-binutils working later in this series. The specific AMDGCN models added here are a bit arbitrary, based on what we intend to initially support in GDB. This list will need to be updated in the future anyway. The complete up-to-date list of existing AMDGPU models can be found here: https://llvm.org/docs/AMDGPUUsage.html#processors The ELF format for this architecture is documented here: https://llvm.org/docs/AMDGPUUsage.html#elf-code-object The flags for the "HSA" OS ABI are properly versioned and documented on that page. But the NONE, PAL and MESA3D OS ABIs are not well documented nor versioned. Taking a peek at the LLVM source code, we see that they encode their flags the same way as HSA v3. For example, for PAL: https://github.com/llvm/llvm-project/blob/c8b614cd74a92d85936aed5ac7c642af75ffdc29/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp#L601 So at least, we know that all AMDGPU objects (of which AMDGCN objects are a subset of) at the time of writing encode the specific GPU model in the EF_AMDGPU_MACH field of e_flags. bfd/ChangeLog: * Makefile.am (ALL_MACHINES, ALL_MACHINES_CFILES): Add cpu-amdgcn.c. (BFD64_BACKENDS): Add elf64-amdgcn.lo. (BFD64_BACKENDS_CFILES): Add elf64-amdgcn.c. * Makefile.in: Re-generate. * cpu-amdgcn.c: New. * elf64-amdgcn.c: New. * archures.c (bfd_architecture): Add bfd_arch_amdgcn and related mach defines. (bfd_amdgcn_arch): New. (bfd_archures_list): Add bfd_amdgcn_arch. * bfd-in2.h: Re-generate. * config.bfd: Handle amdgcn* target. * configure.ac: Handle amdgcn_elf64_le_vec. * configure: Re-generate. * elf-bfd.h (elf_target_id): Add AMDGCN_ELF_DATA. * targets.c (amdgcn_elf64_le_vec): New. (_bfd_target_vector): Add amdgcn_elf64_le_vec. include/ChangeLog: * elf/amdgpu.h: New. * elf/common.h (ELFOSABI_AMDGPU_HSA): Add. Change-Id: I969f7b14960797e88891c308749a6e341eece5b2
Diffstat (limited to 'include')
-rw-r--r--include/ChangeLog5
-rw-r--r--include/elf/amdgpu.h36
-rw-r--r--include/elf/common.h1
3 files changed, 42 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index 6cda7e6..26a64f4 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ * elf/amdgpu.h: New.
+ * elf/common.h (ELFOSABI_AMDGPU_HSA): Add.
+
2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
* collectorAPI.h: New file.
diff --git a/include/elf/amdgpu.h b/include/elf/amdgpu.h
new file mode 100644
index 0000000..daa472e
--- /dev/null
+++ b/include/elf/amdgpu.h
@@ -0,0 +1,36 @@
+/* AMDGPU ELF support for BFD.
+
+ Copyright (C) 2019-2021 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef _ELF_AMDGPU_H
+#define _ELF_AMDGPU_H
+
+/* e_ident[EI_ABIVERSION] values, when e_ident[EI_OSABI] is
+ ELFOSABI_AMDGPU_HSA. */
+
+#define ELFABIVERSION_AMDGPU_HSA_V2 0
+#define ELFABIVERSION_AMDGPU_HSA_V3 1
+#define ELFABIVERSION_AMDGPU_HSA_V4 2
+#define ELFABIVERSION_AMDGPU_HSA_V5 3
+
+/* Processor selection mask for EF_AMDGPU_MACH_* values. */
+
+#define EF_AMDGPU_MACH 0x0ff
+#define EF_AMDGPU_MACH_AMDGCN_MIN 0x020
+
+#endif /* _ELF_AMDGPU_H */
diff --git a/include/elf/common.h b/include/elf/common.h
index def04c3..a1cace4 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -77,6 +77,7 @@
#define ELFOSABI_OPENVOS 18 /* Stratus Technologies OpenVOS */
#define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
+#define ELFOSABI_AMDGPU_HSA 64 /* AMD HSA Runtime */
#define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
#define ELFOSABI_ARM_FDPIC 65 /* ARM FDPIC */
#define ELFOSABI_ARM 97 /* ARM */