diff --git a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp --- a/openmp/libomptarget/DeviceRTL/src/Configuration.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Configuration.cpp @@ -24,7 +24,7 @@ // TODO: We want to change the name as soon as the old runtime is gone. DeviceEnvironmentTy CONSTANT(omptarget_device_environment) - __attribute__((used)); + __attribute__((used, retain)); uint32_t config::getDebugKind() { return __omp_rtl_debug_kind & omptarget_device_environment.DebugKind; diff --git a/openmp/libomptarget/DeviceRTL/src/Utils.cpp b/openmp/libomptarget/DeviceRTL/src/Utils.cpp --- a/openmp/libomptarget/DeviceRTL/src/Utils.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Utils.cpp @@ -21,7 +21,7 @@ namespace _OMP { /// Helper to keep code alive without introducing a performance penalty. -__attribute__((used, weak, optnone)) void keepAlive() { +__attribute__((used, retain, weak, optnone)) void keepAlive() { __kmpc_get_hardware_thread_id_in_block(); __kmpc_get_hardware_num_threads_in_block(); __kmpc_get_warp_size(); diff --git a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h --- a/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h +++ b/openmp/libomptarget/deviceRTLs/amdgcn/src/target_impl.h @@ -31,7 +31,8 @@ #define NOINLINE __attribute__((noinline)) #define ALIGN(N) __attribute__((aligned(N))) #define PLUGIN_ACCESSIBLE \ - __attribute__((used)) /* Don't discard values the plugin reads */ \ + __attribute__((used)) /* Don't discard values the plugin reads */ \ + __attribute__((retain)) /* Also needed to keep values alive */ \ __attribute__((visibility("default"))) /* Access via SHT_HASH */ \ __attribute__((section(".data"))) /* Not .bss, can write before load */ diff --git a/openmp/libomptarget/deviceRTLs/common/src/support.cu b/openmp/libomptarget/deviceRTLs/common/src/support.cu --- a/openmp/libomptarget/deviceRTLs/common/src/support.cu +++ b/openmp/libomptarget/deviceRTLs/common/src/support.cu @@ -228,7 +228,7 @@ namespace _OMP { /// Helper to keep code alive without introducing a performance penalty. -__attribute__((used, weak, optnone)) void keepAlive() { +__attribute__((used, retain, weak, optnone)) void keepAlive() { __kmpc_get_hardware_thread_id_in_block(); __kmpc_get_hardware_num_threads_in_block(); __kmpc_get_warp_size();