diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp --- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -1244,6 +1244,7 @@ auto *Var = new GlobalVariable(*M, Int32Ty, false, GlobalValue::ExternalLinkage, nullptr, getInstrProfRuntimeHookVarName()); + Var->setVisibility(GlobalValue::HiddenVisibility); if (TT.isOSBinFormatELF() && !TT.isPS()) { // Mark the user variable as used so that it isn't stripped out. diff --git a/llvm/test/Instrumentation/InstrProfiling/profiling.ll b/llvm/test/Instrumentation/InstrProfiling/profiling.ll --- a/llvm/test/Instrumentation/InstrProfiling/profiling.ll +++ b/llvm/test/Instrumentation/InstrProfiling/profiling.ll @@ -8,11 +8,13 @@ ; RUN: opt < %s -mtriple=x86_64-sie-ps5 -passes=instrprof -S | FileCheck %s --check-prefixes=ELF,PS ; RUN: opt < %s -mtriple=x86_64-pc-win32-coff -passes=instrprof -S | FileCheck %s --check-prefixes=COFF ; RUN: opt < %s -mtriple=powerpc64-ibm-aix-xcoff -passes=instrprof -S | FileCheck %s --check-prefixes=XCOFF +; RUN: opt < %s -mtriple=x86_64-pc-freebsd13 -passes=instrprof -S | FileCheck %s --check-prefixes=ELF -; MACHO: @__llvm_profile_runtime = external global i32 -; ELF_GENERIC: @__llvm_profile_runtime = external global i32 +; MACHO: @__llvm_profile_runtime = external hidden global i32 +; ELF_GENERIC: @__llvm_profile_runtime = external hidden global i32 ; ELF-NOT: @__llvm_profile_runtime = external global i32 -; XCOFF: @__llvm_profile_runtime = external global i32 +; XCOFF: @__llvm_profile_runtime = external hidden global i32 +; COFF: @__llvm_profile_runtime = external hidden global i32 ; ELF: $__profc_foo = comdat nodeduplicate ; ELF: $__profc_foo_weak = comdat nodeduplicate