diff --git a/openmp/libomptarget/plugins/amdgpu/impl/system.cpp b/openmp/libomptarget/plugins/amdgpu/impl/system.cpp --- a/openmp/libomptarget/plugins/amdgpu/impl/system.cpp +++ b/openmp/libomptarget/plugins/amdgpu/impl/system.cpp @@ -132,7 +132,6 @@ std::vector atl_gpu_kernarg_pools; -std::map KernelNameMap; std::vector> KernelInfoTable; std::vector> SymbolInfoTable; @@ -868,6 +867,16 @@ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT; } + // Make sure that kernelName + ".kd" == symbolName + size_t Found = symbolName.find(kernelName); + if (Found == std::string::npos || + symbolName.length() != kernelName.length() + 3 || + symbolName.find(".kd", kernelName.length()) == std::string::npos) { + printf("[%s:%d] Kernel name mismatching symbol: %s != %s + .kd\n", + __FILE__, __LINE__, symbolName.c_str(), kernelName.c_str()); + return HSA_STATUS_ERROR_INVALID_CODE_OBJECT; + } + atl_kernel_info_t info = {0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, {}}; uint64_t sgpr_count, vgpr_count, sgpr_spill_count, vgpr_spill_count; @@ -922,7 +931,6 @@ // create a map from symbol to name DEBUG_PRINT("Kernel symbol %s; Name: %s; Size: %lu\n", symbolName.c_str(), kernelName.c_str(), kernel_segment_size); - KernelNameMap[symbolName] = kernelName; bool hasHiddenArgs = false; if (kernel_segment_size > 0) { @@ -1027,16 +1035,11 @@ "Symbol info extraction", get_error_string(err)); return err; } - name[name_length] = 0; + // remove the suffix .kd from symbol name. + name[name_length - 3] = 0; - if (KernelNameMap.find(std::string(name)) == KernelNameMap.end()) { - // did not find kernel name in the kernel map; this can happen only - // if the ROCr API for getting symbol info (name) is different from - // the comgr method of getting symbol info - return HSA_STATUS_ERROR; - } atl_kernel_info_t info; - std::string kernelName = KernelNameMap[std::string(name)]; + std::string kernelName(name); // by now, the kernel info table should already have an entry // because the non-ROCr custom code object parsing is called before // iterating over the code object symbols using ROCr