summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp66
1 files changed, 5 insertions, 61 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 2d2b5e56165..b3974b6de4b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -715,62 +715,6 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
GV->setVisibility(GetLLVMVisibility(LV.getVisibility()));
}
-static bool shouldAssumeDSOLocal(const CodeGenModule &CGM,
- llvm::GlobalValue *GV, const NamedDecl *D) {
- const llvm::Triple &TT = CGM.getTriple();
- // Only handle ELF for now.
- if (!TT.isOSBinFormatELF())
- return false;
-
- // If this is not an executable, don't assume anything is local.
- const auto &CGOpts = CGM.getCodeGenOpts();
- llvm::Reloc::Model RM = CGOpts.RelocationModel;
- const auto &LOpts = CGM.getLangOpts();
- if (RM != llvm::Reloc::Static && !LOpts.PIE)
- return false;
-
- // A definition cannot be preempted from an executable.
- if (!GV->isDeclarationForLinker())
- return true;
-
- // Most PIC code sequences that assume that a symbol is local cannot produce a
- // 0 if it turns out the symbol is undefined. While this is ABI and relocation
- // depended, it seems worth it to handle it here.
- if (RM == llvm::Reloc::PIC_ && GV->hasExternalWeakLinkage())
- return false;
-
- // PPC has no copy relocations and cannot use a plt entry as a symbol address.
- llvm::Triple::ArchType Arch = TT.getArch();
- if (Arch == llvm::Triple::ppc || Arch == llvm::Triple::ppc64 ||
- Arch == llvm::Triple::ppc64le)
- return false;
-
- // If we can use copy relocations we can assume it is local.
- if (isa<VarDecl>(D) &&
- (RM == llvm::Reloc::Static || CGOpts.PIECopyRelocations))
- return true;
-
- // If we can use a plt entry as the symbol address we can assume it
- // is local.
- if (isa<FunctionDecl>(D) && !CGOpts.NoPLT)
- return true;
-
- // Otherwise don't assue it is local.
- return false;
-}
-
-void CodeGenModule::setDSOLocal(llvm::GlobalValue *GV,
- const NamedDecl *D) const {
- if (shouldAssumeDSOLocal(*this, GV, D))
- GV->setDSOLocal(true);
-}
-
-void CodeGenModule::setGVProperties(llvm::GlobalValue *GV,
- const NamedDecl *D) const {
- setGlobalVisibility(GV, D);
- setDSOLocal(GV, D);
-}
-
static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
return llvm::StringSwitch<llvm::GlobalVariable::ThreadLocalMode>(S)
.Case("global-dynamic", llvm::GlobalVariable::GeneralDynamicTLSModel)
@@ -1228,7 +1172,7 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
void CodeGenModule::SetCommonAttributes(const Decl *D,
llvm::GlobalValue *GV) {
if (const auto *ND = dyn_cast_or_null<NamedDecl>(D))
- setGVProperties(GV, ND);
+ setGlobalVisibility(GV, ND);
else
GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
@@ -1368,7 +1312,7 @@ void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
// overridden by a definition.
setLinkageForGV(F, FD);
- setGVProperties(F, FD);
+ setGlobalVisibility(F, FD);
if (FD->getAttr<PragmaClangTextSectionAttr>()) {
F->addFnAttr("implicit-section-name");
@@ -2695,7 +2639,7 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
GV->setAlignment(getContext().getDeclAlign(D).getQuantity());
setLinkageForGV(GV, D);
- setGVProperties(GV, D);
+ setGlobalVisibility(GV, D);
if (D->getTLSKind()) {
if (D->getTLSKind() == VarDecl::TLS_Dynamic)
@@ -3514,7 +3458,7 @@ void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD,
setFunctionDLLStorageClass(GD, Fn);
// FIXME: this is redundant with part of setFunctionDefinitionAttributes
- setGVProperties(Fn, D);
+ setGlobalVisibility(Fn, D);
MaybeHandleStaticInExternC(D, Fn);
@@ -4110,7 +4054,7 @@ ConstantAddress CodeGenModule::GetAddrOfGlobalTemporary(
getModule(), Type, Constant, Linkage, InitialValue, Name.c_str(),
/*InsertBefore=*/nullptr, llvm::GlobalVariable::NotThreadLocal, TargetAS);
if (emitter) emitter->finalize(GV);
- setGVProperties(GV, VD);
+ setGlobalVisibility(GV, VD);
GV->setAlignment(Align.getQuantity());
if (supportsCOMDAT() && GV->isWeakForLinker())
GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
OpenPOWER on IntegriCloud