From fd62f8e268fb470030dfdd6c9832e86ded7c216e Mon Sep 17 00:00:00 2001 From: Jacob Lambert Date: Thu, 25 Jun 2026 14:59:13 -0700 Subject: [PATCH] [Comgr] Assert hotswap RSRC1 field layout assumptions The hotswap ELF code reads/writes the GRANULATED VGPR and SGPR count fields of COMPUTE_PGM_RSRC1 at fixed shifts/widths. Add static_asserts pinning those layout assumptions so any change is caught at compile time. --- amd/comgr/src/comgr-hotswap-elf.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/amd/comgr/src/comgr-hotswap-elf.cpp b/amd/comgr/src/comgr-hotswap-elf.cpp index 29552e6dd86ea..29a475ea59c34 100644 --- a/amd/comgr/src/comgr-hotswap-elf.cpp +++ b/amd/comgr/src/comgr-hotswap-elf.cpp @@ -29,6 +29,17 @@ using Phdr = ELF::Elf64_Phdr; using ELFT = ElfView::ELFT; using ELFFileT = ElfView::ELFFileT; +// This file depends on the COMPUTE_PGM_RSRC1_GRANULATED_* field layout below. +// Assert it so the dependency is caught at compile time if it ever shifts. +static_assert( + amdhsa::COMPUTE_PGM_RSRC1_GRANULATED_WORKITEM_VGPR_COUNT_SHIFT == 0 && + amdhsa::COMPUTE_PGM_RSRC1_GRANULATED_WORKITEM_VGPR_COUNT_WIDTH == 6, + "GRANULATED_WORKITEM_VGPR_COUNT layout changed unexpectedly."); +static_assert( + amdhsa::COMPUTE_PGM_RSRC1_GRANULATED_WAVEFRONT_SGPR_COUNT_SHIFT == 6 && + amdhsa::COMPUTE_PGM_RSRC1_GRANULATED_WAVEFRONT_SGPR_COUNT_WIDTH == 4, + "GRANULATED_WAVEFRONT_SGPR_COUNT layout changed unexpectedly."); + // -- applyByteReplace --------------------------------------------------------- bool applyByteReplace(const RewriteRule &Rule, uint64_t InstOffset,