Skip to content

Commit

Permalink
[PGO] Make emitted symbols hidden
Browse files Browse the repository at this point in the history
This was reverted because it was breaking when targeting Darwin which
tried to export these symbols which are now hidden. It should be safe
to just stop attempting to export these symbols in the clang driver,
though Apple folks will need to change their TAPI allow list described
in the commit where these symbols were originally exported
f538018

Bug: #58265

Differential Revision: https://reviews.llvm.org/D135340
  • Loading branch information
abrachet committed Oct 24, 2022
1 parent 5f5e019 commit 0487728
Show file tree
Hide file tree
Showing 18 changed files with 23 additions and 47 deletions.
15 changes: 5 additions & 10 deletions clang/lib/Driver/ToolChains/Darwin.cpp
Expand Up @@ -1353,16 +1353,11 @@ void Darwin::addProfileRTLibs(const ArgList &Args,
// If we have a symbol export directive and we're linking in the profile
// runtime, automatically export symbols necessary to implement some of the
// runtime's functionality.
if (hasExportSymbolDirective(Args)) {
if (ForGCOV) {
addExportedSymbol(CmdArgs, "___gcov_dump");
addExportedSymbol(CmdArgs, "___gcov_reset");
addExportedSymbol(CmdArgs, "_writeout_fn_list");
addExportedSymbol(CmdArgs, "_reset_fn_list");
} else {
addExportedSymbol(CmdArgs, "___llvm_profile_filename");
addExportedSymbol(CmdArgs, "___llvm_profile_raw_version");
}
if (hasExportSymbolDirective(Args) && ForGCOV) {
addExportedSymbol(CmdArgs, "___gcov_dump");
addExportedSymbol(CmdArgs, "___gcov_reset");
addExportedSymbol(CmdArgs, "_writeout_fn_list");
addExportedSymbol(CmdArgs, "_reset_fn_list");
}

// Align __llvm_prf_{cnts,data} sections to the maximum expected page
Expand Down
12 changes: 0 additions & 12 deletions clang/test/Driver/darwin-ld.c
Expand Up @@ -338,18 +338,6 @@
// RUN: FileCheck -check-prefix=PROFILE_SECTALIGN %s < %t.log
// PROFILE_SECTALIGN: "-sectalign" "__DATA" "__llvm_prf_cnts" "0x4000" "-sectalign" "__DATA" "__llvm_prf_data" "0x4000"

// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -exported_symbols_list /dev/null -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log
// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Wl,-exported_symbols_list,/dev/null -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log
// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Wl,-exported_symbol,foo -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log
// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Xlinker -exported_symbol -Xlinker foo -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log
// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Xlinker -exported_symbols_list -Xlinker /dev/null -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log
// PROFILE_EXPORT: "-exported_symbol" "___llvm_profile_filename" "-exported_symbol" "___llvm_profile_raw_version"
//
// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate --coverage -### %t.o 2> %t.log
// RUN: FileCheck -check-prefix=NO_PROFILE_EXPORT %s < %t.log
// NO_PROFILE_EXPORT-NOT: "-exported_symbol"
Expand Down
2 changes: 1 addition & 1 deletion compiler-rt/lib/profile/InstrProfilingNameVar.c
Expand Up @@ -14,4 +14,4 @@
* user has not specified one. Set this up by moving the runtime's copy of this
* symbol to an object file within the archive.
*/
COMPILER_RT_WEAK char INSTR_PROF_PROFILE_NAME_VAR[1] = {0};
COMPILER_RT_WEAK COMPILER_RT_VISIBILITY char INSTR_PROF_PROFILE_NAME_VAR[1] = {0};
10 changes: 1 addition & 9 deletions compiler-rt/lib/profile/InstrProfilingVersionVar.c
Expand Up @@ -13,14 +13,6 @@
* The runtime should only provide its own definition of this symbol when the
* user has not specified one. Set this up by moving the runtime's copy of this
* symbol to an object file within the archive.
*
* Hide this symbol everywhere except Apple platforms, where its presence is
* checked by the TAPI tool.
*/
#if !defined(__APPLE__)
#define VERSION_VAR_VISIBILITY COMPILER_RT_VISIBILITY
#else
#define VERSION_VAR_VISIBILITY
#endif
VERSION_VAR_VISIBILITY COMPILER_RT_WEAK uint64_t INSTR_PROF_RAW_VERSION_VAR =
COMPILER_RT_VISIBILITY COMPILER_RT_WEAK uint64_t INSTR_PROF_RAW_VERSION_VAR =
INSTR_PROF_RAW_VERSION;
1 change: 1 addition & 0 deletions llvm/lib/ProfileData/InstrProf.cpp
Expand Up @@ -1210,6 +1210,7 @@ void createProfileFileNameVar(Module &M, StringRef InstrProfileOutput) {
GlobalVariable *ProfileNameVar = new GlobalVariable(
M, ProfileNameConst->getType(), true, GlobalValue::WeakAnyLinkage,
ProfileNameConst, INSTR_PROF_QUOTE(INSTR_PROF_PROFILE_NAME_VAR));
ProfileNameVar->setVisibility(GlobalValue::HiddenVisibility);
Triple TT(M.getTargetTriple());
if (TT.supportsCOMDAT()) {
ProfileNameVar->setLinkage(GlobalValue::ExternalLinkage);
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
Expand Up @@ -380,7 +380,7 @@ static GlobalVariable *createIRLevelProfileFlagVar(Module &M, bool IsCS) {
auto IRLevelVersionVariable = new GlobalVariable(
M, IntTy64, true, GlobalValue::WeakAnyLinkage,
Constant::getIntegerValue(IntTy64, APInt(64, ProfileVersion)), VarName);
IRLevelVersionVariable->setVisibility(GlobalValue::DefaultVisibility);
IRLevelVersionVariable->setVisibility(GlobalValue::HiddenVisibility);
Triple TT(M.getTargetTriple());
if (TT.supportsCOMDAT()) {
IRLevelVersionVariable->setLinkage(GlobalValue::ExternalLinkage);
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/branch1.ll
Expand Up @@ -14,7 +14,7 @@ target triple = "x86_64-unknown-linux-gnu"
; GEN-DARWIN-LINKONCE: target triple = "x86_64-apple-darwin"

; GEN-COMDAT: $__llvm_profile_raw_version = comdat any
; GEN-COMDAT: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN-COMDAT: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN-LINKONCE: @__llvm_profile_raw_version = linkonce constant i64 {{[0-9]+}}
; GEN: @__profn_test_br_1 = private constant [9 x i8] c"test_br_1"

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/branch2.ll
Expand Up @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_br_2 = private constant [9 x i8] c"test_br_2"

define i32 @test_br_2(i32 %i) {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/comdat_internal.ll
Expand Up @@ -10,7 +10,7 @@ $foo = comdat any

@bar = global ptr @foo, align 8

; CHECK: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; CHECK: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; CHECK-NOT: __profn__stdin__foo
; CHECK: @__profc__stdin__foo.[[#FOO_HASH]] = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", comdat, align 8
; CHECK: @__profd__stdin__foo.[[#FOO_HASH]] = private global { i64, i64, i64, ptr, ptr, i32, [2 x i16] } { i64 -5640069336071256030, i64 [[#FOO_HASH]], i64 sub (i64 ptrtoint (ptr @__profc__stdin__foo.742261418966908927 to i64), i64 ptrtoint (ptr @__profd__stdin__foo.742261418966908927 to i64)), ptr null
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/criticaledge.ll
Expand Up @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_criticalEdge = private constant [17 x i8] c"test_criticalEdge"
; GEN: @__profn__stdin__bar = private constant [11 x i8] c"<stdin>:bar"

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/instr_entry_bb.ll
Expand Up @@ -7,7 +7,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_br_2 = private constant [9 x i8] c"test_br_2"

define i32 @test_br_2(i32 %i) {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/landingpad.ll
Expand Up @@ -11,7 +11,7 @@ target triple = "x86_64-unknown-linux-gnu"
@val = global i32 0, align 4
@_ZTIi = external constant ptr
; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_bar = private constant [3 x i8] c"bar"
; GEN: @__profn_foo = private constant [3 x i8] c"foo"

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/loop1.ll
Expand Up @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_simple_for = private constant [15 x i8] c"test_simple_for"

define i32 @test_simple_for(i32 %n) {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/loop2.ll
Expand Up @@ -8,7 +8,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_nested_for = private constant [15 x i8] c"test_nested_for"

define i32 @test_nested_for(i32 %r, i32 %s) {
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/PGOProfile/lto_cspgo_gen.ll
Expand Up @@ -11,11 +11,11 @@
; RUN: llvm-dis %t.0.0.preopt.bc -o - | FileCheck %s --check-prefix=IRPGOBE

;; Before LTO, we should have the __llvm_profile_raw_version definition.
; IRPGOPRE: @__llvm_profile_raw_version = constant i64
; IRPGOPRE: @__llvm_profile_raw_version = hidden constant i64

;; Non-prevailing __llvm_profile_raw_version is discarded by LTO. Ensure the
;; declaration is retained.
; IRPGOBE: @__llvm_profile_raw_version = external constant i64
; IRPGOBE: @__llvm_profile_raw_version = external hidden constant i64

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/single_bb.ll
Expand Up @@ -3,7 +3,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_single_bb = private constant [9 x i8] c"single_bb"

define i32 @single_bb() {
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/PGOProfile/switch.ll
Expand Up @@ -8,7 +8,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

; GEN: $__llvm_profile_raw_version = comdat any
; GEN: @__llvm_profile_raw_version = constant i64 {{[0-9]+}}, comdat
; GEN: @__llvm_profile_raw_version = hidden constant i64 {{[0-9]+}}, comdat
; GEN: @__profn_test_switch = private constant [11 x i8] c"test_switch"

define void @test_switch(i32 %i) {
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/PGOProfile/thinlto_cspgo_gen.ll
Expand Up @@ -17,11 +17,11 @@
; RUN: llvm-dis %t.2.4.opt.bc -o - | FileCheck %s --check-prefixes=CSGEN,NOPREVAILING

;; Prevailing __llvm_profile_raw_version is kept by LTO.
; PREVAILING: @__llvm_profile_raw_version = constant i64
; PREVAILING: @__llvm_profile_raw_version = hidden constant i64

;; Non-prevailing __llvm_profile_raw_version is discarded by LTO. Ensure the
;; declaration is retained.
; NOPREVAILING: @__llvm_profile_raw_version = external constant i64
; NOPREVAILING: @__llvm_profile_raw_version = external hidden constant i64
; CSGEN: @__profc_
; CSGEN: @__profd_

Expand Down

0 comments on commit 0487728

Please sign in to comment.