From 9265409f0871c07195b39f2548d89478ec784b4f Mon Sep 17 00:00:00 2001 From: Konstantin Zhuravlyov Date: Mon, 4 Apr 2022 16:40:51 -0400 Subject: [PATCH] Add code object v5 support Change-Id: I03522765056e99ed49e6c5e213ee3753852de27b --- runtime/hsa-runtime/inc/amd_hsa_elf.h | 9 ++++++--- runtime/hsa-runtime/libamdhsacode/amd_hsa_code.cpp | 6 +++++- runtime/hsa-runtime/loader/executable.cpp | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/runtime/hsa-runtime/inc/amd_hsa_elf.h b/runtime/hsa-runtime/inc/amd_hsa_elf.h index ec5229e024..6ad19db90b 100644 --- a/runtime/hsa-runtime/inc/amd_hsa_elf.h +++ b/runtime/hsa-runtime/inc/amd_hsa_elf.h @@ -74,7 +74,8 @@ enum { // was never defined for V1. ELFABIVERSION_AMDGPU_HSA_V2 = 0, ELFABIVERSION_AMDGPU_HSA_V3 = 1, - ELFABIVERSION_AMDGPU_HSA_V4 = 2 + ELFABIVERSION_AMDGPU_HSA_V4 = 2, + ELFABIVERSION_AMDGPU_HSA_V5 = 3 }; // AMDGPU specific e_flags. @@ -150,7 +151,8 @@ enum : unsigned { // XNACK selection mask for EF_AMDGPU_FEATURE_XNACK_* values. // - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4. + // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4, + // ELFABIVERSION_AMDGPU_HSA_V5. EF_AMDGPU_FEATURE_XNACK_V4 = 0x300, // XNACK is not supported. EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 = 0x000, @@ -163,7 +165,8 @@ enum : unsigned { // SRAMECC selection mask for EF_AMDGPU_FEATURE_SRAMECC_* values. // - // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4. + // Only valid for ELFOSABI_AMDGPU_HSA and ELFABIVERSION_AMDGPU_HSA_V4, + // ELFABIVERSION_AMDGPU_HSA_V5. EF_AMDGPU_FEATURE_SRAMECC_V4 = 0xc00, // SRAMECC is not supported. EF_AMDGPU_FEATURE_SRAMECC_UNSUPPORTED_V4 = 0x000, diff --git a/runtime/hsa-runtime/libamdhsacode/amd_hsa_code.cpp b/runtime/hsa-runtime/libamdhsacode/amd_hsa_code.cpp index 2a3391b2aa..30de260dc6 100644 --- a/runtime/hsa-runtime/libamdhsacode/amd_hsa_code.cpp +++ b/runtime/hsa-runtime/libamdhsacode/amd_hsa_code.cpp @@ -479,6 +479,10 @@ namespace code { *major = 4; *minor = 0; return true; + case ELF::ELFABIVERSION_AMDGPU_HSA_V5: + *major = 5; + *minor = 0; + return true; } return false; @@ -724,7 +728,7 @@ namespace code { target_name += ":xnack+"; else if (xnack_supported) target_name += ":xnack-"; - } else if (code_object_major_version == 4) { + } else if (code_object_major_version == 4 || code_object_major_version == 5) { switch (img->EFlags() & ELF::EF_AMDGPU_FEATURE_SRAMECC_V4) { case ELF::EF_AMDGPU_FEATURE_SRAMECC_OFF_V4: target_name += ":sramecc-"; diff --git a/runtime/hsa-runtime/loader/executable.cpp b/runtime/hsa-runtime/loader/executable.cpp index 888598e045..c1bcf2bcba 100644 --- a/runtime/hsa-runtime/loader/executable.cpp +++ b/runtime/hsa-runtime/loader/executable.cpp @@ -1221,7 +1221,7 @@ hsa_status_t ExecutableImpl::LoadCodeObject( return HSA_STATUS_ERROR_INVALID_CODE_OBJECT; } - if (majorVersion < 1 || majorVersion > 4) { + if (majorVersion < 1 || majorVersion > 5) { logger_ << "LoaderError: unsupported code object version: " << majorVersion << "\n"; return HSA_STATUS_ERROR_INVALID_CODE_OBJECT; }