[PATCH 3/3] readelf: Add support for AMDGPU code object V6

Luis Machado luis.machado@amd.com
Fri Oct 31 17:54:11 GMT 2025


From: Lancelot Six <lancelot.six@amd.com>

AMDGPU code object V6 adds the EF_AMDGPU_GENERIC_VERSION_V field.
Decode it when decoding the e_flags value for amdgpu.

The output for such generic GFX targets will look like:

$ readelf -h gpu.elf
  ELF Header:
    ...
    Flags:     0x1000151, gfx9-generic, xnack any, generic_v1
                                                   ----------
    ...

That matches what is currently done by llvm-readelf [1].

[1]
https://github.com/ROCm/llvm-project/blob/088e74cf73549b556cb718f5322ae40a2c84a1f8/llvm/tools/llvm-readobj/ELFDumper.cpp#L3683-L3687
---
 binutils/readelf.c   | 14 ++++++++++++++
 include/elf/amdgpu.h |  9 +++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/binutils/readelf.c b/binutils/readelf.c
index 44d23261cc8..91ae762dc44 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -5357,6 +5357,20 @@ decode_AMDGPU_machine_flags (char *out, unsigned int e_flags, Filedata *filedata
 	}
 
       e_flags &= ~EF_AMDGPU_FEATURE_SRAMECC_V4;
+
+
+      /* Extensions for HSA v6+.  */
+      if (abiversion >= ELFABIVERSION_AMDGPU_HSA_V6)
+	{
+	  int generic_v;
+
+	  generic_v = ((e_flags & EF_AMDGPU_GENERIC_VERSION_V)
+		       >> EF_AMDGPU_GENERIC_VERSION_V_SHIFT);
+
+	  if (generic_v > 0)
+	    out += sprintf (out, _(", generic_v%d"), generic_v);
+	  e_flags &= ~EF_AMDGPU_GENERIC_VERSION_V;
+	}
     }
 
   if (e_flags != 0)
diff --git a/include/elf/amdgpu.h b/include/elf/amdgpu.h
index 7db66c0c08b..664b09bd64b 100644
--- a/include/elf/amdgpu.h
+++ b/include/elf/amdgpu.h
@@ -29,6 +29,7 @@
 #define ELFABIVERSION_AMDGPU_HSA_V3 1
 #define ELFABIVERSION_AMDGPU_HSA_V4 2
 #define ELFABIVERSION_AMDGPU_HSA_V5 3
+#define ELFABIVERSION_AMDGPU_HSA_V6 4
 
 /* Processor selection mask for EF_AMDGPU_MACH_* values.  */
 
@@ -91,7 +92,7 @@
 #define EF_AMDGPU_FEATURE_XNACK_V3   0x100
 #define EF_AMDGPU_FEATURE_SRAMECC_V3 0x200
 
-/* Code object v4 (and later) machine flags.  */
+/* Code object v4 (and v5) machine flags.  */
 
 #define EF_AMDGPU_FEATURE_XNACK_V4             0x300
 #define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000
@@ -105,8 +106,12 @@
 #define EF_AMDGPU_FEATURE_SRAMECC_OFF_V4         0x800
 #define EF_AMDGPU_FEATURE_SRAMECC_ON_V4          0xc00
 
-/* Notes. */
+/* Code object v6 machine flags.  */
 
+#define EF_AMDGPU_GENERIC_VERSION_V              0xff000000
+#define EF_AMDGPU_GENERIC_VERSION_V_SHIFT        24
+
+/* Notes.  */
 #define NT_AMDGPU_METADATA                32
 
 /* Relocations.  */
-- 
2.43.0



More information about the Binutils mailing list