[Openmp-commits] [openmp] 0203ff1 - [Libomptarget] Fix external visibility for internal variables

Joseph Huber via Openmp-commits openmp-commits at lists.llvm.org
Tue Jan 18 09:53:36 PST 2022


Author: Joseph Huber
Date: 2022-01-18T12:53:24-05:00
New Revision: 0203ff19602d9d90e03653062dbb19cc13afa956

URL: https://github.com/llvm/llvm-project/commit/0203ff19602d9d90e03653062dbb19cc13afa956
DIFF: https://github.com/llvm/llvm-project/commit/0203ff19602d9d90e03653062dbb19cc13afa956.diff

LOG: [Libomptarget] Fix external visibility for internal variables

After the changes in D117362 made variables declared inside of a target
declare directive visible outside the plugin, some variables inside the
runtime were given visiblity that conflicted with their address space
type. This caused problems when shared or local memory was made
externally visible. This patch fixes this issue by making these
varialbes static within the module, therefore limiting their visibility
to being internal.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D117526

Added: 
    

Modified: 
    openmp/libomptarget/DeviceRTL/include/Types.h
    openmp/libomptarget/DeviceRTL/src/Workshare.cpp

Removed: 
    


################################################################################
diff  --git a/openmp/libomptarget/DeviceRTL/include/Types.h b/openmp/libomptarget/DeviceRTL/include/Types.h
index 0ff0cee66b3f3..8d9b48a0f1352 100644
--- a/openmp/libomptarget/DeviceRTL/include/Types.h
+++ b/openmp/libomptarget/DeviceRTL/include/Types.h
@@ -193,7 +193,8 @@ enum OMPTgtExecModeFlags : int8_t {
 // TODO: clang should use address space 5 for omp_thread_mem_alloc, but right
 //       now that's not the case.
 #define THREAD_LOCAL(NAME)                                                     \
-  NAME [[clang::loader_uninitialized, clang::address_space(5)]]
+  NAME [[clang::loader_uninitialized, clang::address_space(5),                 \
+         gnu::visibility("hidden")]]
 
 // TODO: clang should use address space 4 for omp_const_mem_alloc, maybe it
 //       does?

diff  --git a/openmp/libomptarget/DeviceRTL/src/Workshare.cpp b/openmp/libomptarget/DeviceRTL/src/Workshare.cpp
index 24f3fee2aa5b4..0bdbf30c23d3b 100644
--- a/openmp/libomptarget/DeviceRTL/src/Workshare.cpp
+++ b/openmp/libomptarget/DeviceRTL/src/Workshare.cpp
@@ -46,7 +46,7 @@ struct DynamicScheduleTracker {
 #pragma omp declare target
 
 // TODO: This variable is a hack inherited from the old runtime.
-uint64_t SHARED(Cnt);
+static uint64_t SHARED(Cnt);
 
 template <typename T, typename ST> struct omptarget_nvptx_LoopSupport {
   ////////////////////////////////////////////////////////////////////////////////
@@ -443,7 +443,7 @@ template <typename T, typename ST> struct omptarget_nvptx_LoopSupport {
 
 // TODO: This is a stopgap. We probably want to expand the dispatch API to take
 //       an DST pointer which can then be allocated properly without malloc.
-DynamicScheduleTracker *THREAD_LOCAL(ThreadDSTPtr);
+static DynamicScheduleTracker *THREAD_LOCAL(ThreadDSTPtr);
 
 // Create a new DST, link the current one, and define the new as current.
 static DynamicScheduleTracker *pushDST() {


        


More information about the Openmp-commits mailing list