#include "msgpack.h"
-#define msgpackErrorCheck(msg, status) \
- if (status != 0) { \
- printf("[%s:%d] %s failed\n", __FILE__, __LINE__, msg); \
- return HSA_STATUS_ERROR_INVALID_CODE_OBJECT; \
- } else { \
- }
-
typedef unsigned char *address;
/*
* Note descriptors.
agents.push_back(gpu_procs[i].agent());
}
err = hsa_amd_agents_allow_access(agents.size(), &agents[0], NULL, ptr);
- ErrorCheck("Allow agents ptr access", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Allow agents ptr access", get_error_string(err));
+ exit(1);
+ }
}
atmi_status_t Runtime::Initialize() {
return ATMI_STATUS_SUCCESS;
if (devtype == ATMI_DEVTYPE_ALL || devtype & ATMI_DEVTYPE_GPU) {
- ATMIErrorCheck("GPU context init", atl_init_gpu_context());
+ if (atl_init_gpu_context() != ATMI_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__, "GPU context init",
+ get_atmi_error_string(atl_init_gpu_context()));
+ exit(1);
+ }
}
atl_set_atmi_initialized();
for (uint32_t i = 0; i < g_executables.size(); i++) {
err = hsa_executable_destroy(g_executables[i]);
- ErrorCheck("Destroying executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Destroying executable", get_error_string(err));
+ exit(1);
+ }
}
for (uint32_t i = 0; i < SymbolInfoTable.size(); i++) {
atl_reset_atmi_initialized();
err = hsa_shut_down();
- ErrorCheck("Shutting down HSA", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__, "Shutting down HSA",
+ get_error_string(err));
+ exit(1);
+ }
return ATMI_STATUS_SUCCESS;
}
err = hsa_amd_memory_pool_get_info(
memory_pool, HSA_AMD_MEMORY_POOL_INFO_RUNTIME_ALLOC_ALLOWED,
&alloc_allowed);
- ErrorCheck("Alloc allowed in memory pool check", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Alloc allowed in memory pool check", get_error_string(err));
+ exit(1);
+ }
if (alloc_allowed) {
uint32_t global_flag = 0;
err = hsa_amd_memory_pool_get_info(
memory_pool, HSA_AMD_MEMORY_POOL_INFO_GLOBAL_FLAGS, &global_flag);
- ErrorCheck("Get memory pool info", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Get memory pool info", get_error_string(err));
+ exit(1);
+ }
if (HSA_AMD_MEMORY_POOL_GLOBAL_FLAG_FINE_GRAINED & global_flag) {
ATLMemory new_mem(memory_pool, *proc, ATMI_MEMTYPE_FINE_GRAINED);
proc->addMemory(new_mem);
hsa_status_t err = HSA_STATUS_SUCCESS;
hsa_device_type_t device_type;
err = hsa_agent_get_info(agent, HSA_AGENT_INFO_DEVICE, &device_type);
- ErrorCheck("Get device type info", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Get device type info", get_error_string(err));
+ exit(1);
+ }
switch (device_type) {
case HSA_DEVICE_TYPE_CPU: {
;
ATLCPUProcessor new_proc(agent);
err = hsa_amd_agent_iterate_memory_pools(agent, get_memory_pool_info,
&new_proc);
- ErrorCheck("Iterate all memory pools", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Iterate all memory pools", get_error_string(err));
+ exit(1);
+ }
g_atl_machine.addProcessor(new_proc);
} break;
case HSA_DEVICE_TYPE_GPU: {
;
hsa_profile_t profile;
err = hsa_agent_get_info(agent, HSA_AGENT_INFO_PROFILE, &profile);
- ErrorCheck("Query the agent profile", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Query the agent profile", get_error_string(err));
+ exit(1);
+ }
atmi_devtype_t gpu_type;
gpu_type =
(profile == HSA_PROFILE_FULL) ? ATMI_DEVTYPE_iGPU : ATMI_DEVTYPE_dGPU;
ATLGPUProcessor new_proc(agent, gpu_type);
err = hsa_amd_agent_iterate_memory_pools(agent, get_memory_pool_info,
&new_proc);
- ErrorCheck("Iterate all memory pools", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Iterate all memory pools", get_error_string(err));
+ exit(1);
+ }
g_atl_machine.addProcessor(new_proc);
} break;
case HSA_DEVICE_TYPE_DSP: {
if (err == HSA_STATUS_INFO_BREAK) {
err = HSA_STATUS_SUCCESS;
}
- ErrorCheck("Getting a gpu agent", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__, "Getting a gpu agent",
+ get_error_string(err));
+ exit(1);
+ }
if (err != HSA_STATUS_SUCCESS)
return err;
}
err = (atl_cpu_kernarg_region.handle == (uint64_t)-1) ? HSA_STATUS_ERROR
: HSA_STATUS_SUCCESS;
- ErrorCheck("Finding a CPU kernarg memory region handle", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Finding a CPU kernarg memory region handle",
+ get_error_string(err));
+ exit(1);
+ }
}
/* Find a memory region that supports kernel arguments. */
atl_gpu_kernarg_region.handle = (uint64_t)-1;
&atl_gpu_kernarg_region);
err = (atl_gpu_kernarg_region.handle == (uint64_t)-1) ? HSA_STATUS_ERROR
: HSA_STATUS_SUCCESS;
- ErrorCheck("Finding a kernarg memory region", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Finding a kernarg memory region", get_error_string(err));
+ exit(1);
+ }
}
if (num_procs > 0)
return HSA_STATUS_SUCCESS;
if (atlc.g_hsa_initialized == false) {
DEBUG_PRINT("Initializing HSA...");
hsa_status_t err = hsa_init();
- ErrorCheck("Initializing the hsa runtime", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Initializing the hsa runtime", get_error_string(err));
+ exit(1);
+ }
if (err != HSA_STATUS_SUCCESS)
return err;
err = init_compute_and_memory();
if (err != HSA_STATUS_SUCCESS)
return err;
- ErrorCheck("After initializing compute and memory", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "After initializing compute and memory", get_error_string(err));
+ exit(1);
+ }
int gpu_count = g_atl_machine.processorCount<ATLGPUProcessor>();
KernelInfoTable.resize(gpu_count);
}
err = hsa_amd_register_system_event_handler(callbackEvent, NULL);
- ErrorCheck("Registering the system for memory faults", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Registering the system for memory faults", get_error_string(err));
+ exit(1);
+ }
init_tasks();
atlc.g_gpu_initialized = true;
msgpack_errors =
map_lookup_array({metadata.first, metadata.second}, "amdhsa.kernels",
&kernel_array, &kernelsSize);
- msgpackErrorCheck("kernels lookup in program metadata", msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "kernels lookup in program metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
for (size_t i = 0; i < kernelsSize; i++) {
assert(msgpack_errors == 0);
msgpack::byte_range element;
msgpack_errors += array_lookup_element(kernel_array, i, &element);
- msgpackErrorCheck("element lookup in kernel metadata", msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "element lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
msgpack_errors += map_lookup_string(element, ".name", &kernelName);
msgpack_errors += map_lookup_string(element, ".symbol", &symbolName);
- msgpackErrorCheck("strings lookup in kernel metadata", msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "strings lookup in kernel metadata");
+ 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;
msgpack_errors += map_lookup_uint64_t(element, ".sgpr_count", &sgpr_count);
- msgpackErrorCheck("sgpr count metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "sgpr count metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
+
info.sgpr_count = sgpr_count;
msgpack_errors += map_lookup_uint64_t(element, ".vgpr_count", &vgpr_count);
- msgpackErrorCheck("vgpr count metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "vgpr count metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
+
info.vgpr_count = vgpr_count;
msgpack_errors +=
map_lookup_uint64_t(element, ".sgpr_spill_count", &sgpr_spill_count);
- msgpackErrorCheck("sgpr spill count metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "sgpr spill count metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
+
info.sgpr_spill_count = sgpr_spill_count;
msgpack_errors +=
map_lookup_uint64_t(element, ".vgpr_spill_count", &vgpr_spill_count);
- msgpackErrorCheck("vgpr spill count metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "vgpr spill count metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
+
info.vgpr_spill_count = vgpr_spill_count;
size_t kernel_explicit_args_size = 0;
uint64_t kernel_segment_size;
msgpack_errors += map_lookup_uint64_t(element, ".kernarg_segment_size",
&kernel_segment_size);
- msgpackErrorCheck("kernarg segment size metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "kernarg segment size metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
// create a map from symbol to name
DEBUG_PRINT("Kernel symbol %s; Name: %s; Size: %lu\n", symbolName.c_str(),
msgpack::byte_range args_array;
msgpack_errors +=
map_lookup_array(element, ".args", &args_array, &argsSize);
- msgpackErrorCheck("kernel args metadata lookup in kernel metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "kernel args metadata lookup in kernel metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
info.num_args = argsSize;
msgpack::byte_range args_element;
msgpack_errors += array_lookup_element(args_array, i, &args_element);
- msgpackErrorCheck("iterate args map in kernel args metadata",
- msgpack_errors);
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "iterate args map in kernel args metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
msgpack_errors += populate_kernelArgMD(args_element, &lcArg);
- msgpackErrorCheck("iterate args map in kernel args metadata",
- msgpack_errors);
-
+ if (msgpack_errors != 0) {
+ printf("[%s:%d] %s failed\n", __FILE__, __LINE__,
+ "iterate args map in kernel args metadata");
+ return HSA_STATUS_ERROR_INVALID_CODE_OBJECT;
+ }
// populate info with sizes and offsets
info.arg_sizes.push_back(lcArg.size_);
// v3 has offset field and not align field
hsa_status_t err;
err = hsa_executable_symbol_get_info(symbol, HSA_EXECUTABLE_SYMBOL_INFO_TYPE,
&type);
- ErrorCheck("Symbol info extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info extraction", get_error_string(err));
+ exit(1);
+ }
DEBUG_PRINT("Exec Symbol type: %d\n", type);
if (type == HSA_SYMBOL_KIND_KERNEL) {
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_NAME_LENGTH, &name_length);
- ErrorCheck("Symbol info extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info extraction", get_error_string(err));
+ exit(1);
+ }
char *name = reinterpret_cast<char *>(malloc(name_length + 1));
err = hsa_executable_symbol_get_info(symbol,
HSA_EXECUTABLE_SYMBOL_INFO_NAME, name);
- ErrorCheck("Symbol info extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info extraction", get_error_string(err));
+ exit(1);
+ }
name[name_length] = 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
- ErrorCheck("Invalid kernel name", HSA_STATUS_ERROR_INVALID_CODE_OBJECT);
+ if (HSA_STATUS_ERROR_INVALID_CODE_OBJECT != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Invalid kernel name",
+ get_error_string(HSA_STATUS_ERROR_INVALID_CODE_OBJECT));
+ exit(1);
+ }
}
atl_kernel_info_t info;
std::string kernelName = KernelNameMap[std::string(name)];
// because the non-ROCr custom code object parsing is called before
// iterating over the code object symbols using ROCr
if (KernelInfoTable[gpu].find(kernelName) == KernelInfoTable[gpu].end()) {
- ErrorCheck("Finding the entry kernel info table",
- HSA_STATUS_ERROR_INVALID_CODE_OBJECT);
+ if (HSA_STATUS_ERROR_INVALID_CODE_OBJECT != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Finding the entry kernel info table",
+ get_error_string(HSA_STATUS_ERROR_INVALID_CODE_OBJECT));
+ exit(1);
+ }
}
// found, so assign and update
info = KernelInfoTable[gpu][kernelName];
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_OBJECT,
&(info.kernel_object));
- ErrorCheck("Extracting the symbol from the executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Extracting the symbol from the executable",
+ get_error_string(err));
+ exit(1);
+ }
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_GROUP_SEGMENT_SIZE,
&(info.group_segment_size));
- ErrorCheck("Extracting the group segment size from the executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Extracting the group segment size from the executable",
+ get_error_string(err));
+ exit(1);
+ }
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_KERNEL_PRIVATE_SEGMENT_SIZE,
&(info.private_segment_size));
- ErrorCheck("Extracting the private segment from the executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Extracting the private segment from the executable",
+ get_error_string(err));
+ exit(1);
+ }
DEBUG_PRINT(
"Kernel %s --> %lx symbol %u group segsize %u pvt segsize %u bytes "
} else if (type == HSA_SYMBOL_KIND_VARIABLE) {
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_NAME_LENGTH, &name_length);
- ErrorCheck("Symbol info extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info extraction", get_error_string(err));
+ exit(1);
+ }
char *name = reinterpret_cast<char *>(malloc(name_length + 1));
err = hsa_executable_symbol_get_info(symbol,
HSA_EXECUTABLE_SYMBOL_INFO_NAME, name);
- ErrorCheck("Symbol info extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info extraction", get_error_string(err));
+ exit(1);
+ }
name[name_length] = 0;
atl_symbol_info_t info;
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_VARIABLE_ADDRESS, &(info.addr));
- ErrorCheck("Symbol info address extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info address extraction", get_error_string(err));
+ exit(1);
+ }
err = hsa_executable_symbol_get_info(
symbol, HSA_EXECUTABLE_SYMBOL_INFO_VARIABLE_SIZE, &(info.size));
- ErrorCheck("Symbol info size extraction", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Symbol info size extraction", get_error_string(err));
+ exit(1);
+ }
atmi_mem_place_t place = ATMI_MEM_PLACE(ATMI_DEVTYPE_GPU, gpu, 0);
DEBUG_PRINT("Symbol %s = %p (%u bytes)\n", name, (void *)info.addr,
hsa_profile_t agent_profile;
err = hsa_agent_get_info(agent, HSA_AGENT_INFO_PROFILE, &agent_profile);
- ErrorCheck("Query the agent profile", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Query the agent profile", get_error_string(err));
+ exit(1);
+ }
// FIXME: Assume that every profile is FULL until we understand how to build
// GCN with base profile
agent_profile = HSA_PROFILE_FULL;
/* Create the empty executable. */
err = hsa_executable_create(agent_profile, HSA_EXECUTABLE_STATE_UNFROZEN, "",
&executable);
- ErrorCheck("Create the executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Create the executable", get_error_string(err));
+ exit(1);
+ }
bool module_load_success = false;
do // Existing control flow used continue, preserve that for this patch
// code object metadata parsing to collect such metadata info
err = get_code_object_custom_metadata(module_bytes, module_size, gpu);
- ErrorCheckAndContinue("Getting custom code object metadata", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ DEBUG_PRINT("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Getting custom code object metadata",
+ get_error_string(err));
+ continue;
+ }
// Deserialize code object.
hsa_code_object_t code_object = {0};
err = hsa_code_object_deserialize(module_bytes, module_size, NULL,
&code_object);
- ErrorCheckAndContinue("Code Object Deserialization", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ DEBUG_PRINT("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Code Object Deserialization", get_error_string(err));
+ continue;
+ }
assert(0 != code_object.handle);
// Mutating the device image here avoids another allocation & memcpy
reinterpret_cast<void *>(code_object.handle);
atmi_status_t atmi_err =
on_deserialized_data(code_object_alloc_data, module_size, cb_state);
- ATMIErrorCheck("Error in deserialized_data callback", atmi_err);
+ if (atmi_err != ATMI_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Error in deserialized_data callback",
+ get_atmi_error_string(atmi_err));
+ exit(1);
+ }
/* Load the code object. */
err =
hsa_executable_load_code_object(executable, agent, code_object, NULL);
- ErrorCheckAndContinue("Loading the code object", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ DEBUG_PRINT("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Loading the code object", get_error_string(err));
+ continue;
+ }
// cannot iterate over symbols until executable is frozen
}
if (module_load_success) {
/* Freeze the executable; it can now be queried for symbols. */
err = hsa_executable_freeze(executable, "");
- ErrorCheck("Freeze the executable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Freeze the executable", get_error_string(err));
+ exit(1);
+ }
err = hsa_executable_iterate_symbols(executable, populate_InfoTables,
static_cast<void *>(&gpu));
- ErrorCheck("Iterating over symbols for execuatable", err);
+ if (err != HSA_STATUS_SUCCESS) {
+ printf("[%s:%d] %s failed: %s\n", __FILE__, __LINE__,
+ "Iterating over symbols for execuatable", get_error_string(err));
+ exit(1);
+ }
// save the executable and destroy during finalize
g_executables.push_back(executable);