diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-02-04 04:30:33 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-02-04 04:30:33 +0000 |
commit | 2dc36535319f4c7218ca5725ee51bd12d72e8368 (patch) | |
tree | de07914a2ed3d6d533e147c36edd39b9609f3128 /llvm/lib/Linker/LinkModules.cpp | |
parent | 90246aa71ec9fb88e912e2211c2d25b7913443e0 (diff) | |
download | bcm5719-llvm-2dc36535319f4c7218ca5725ee51bd12d72e8368.tar.gz bcm5719-llvm-2dc36535319f4c7218ca5725ee51bd12d72e8368.zip |
Ensure that visibility and section are properly propagated.
llvm-svn: 33872
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 8b1a06d4c69..ba303125eb5 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -476,11 +476,10 @@ static bool LinkGlobals(Module *Dest, Module *Src, new GlobalVariable(SGV->getType()->getElementType(), SGV->isConstant(), SGV->getLinkage(), /*init*/0, SGV->getName(), Dest); - // Propagate alignment info. + // Propagate alignment, visibility and section info. NewDGV->setAlignment(SGV->getAlignment()); - - // Propagate section info. NewDGV->setSection(SGV->getSection()); + NewDGV->setVisibility(SGV->getVisibility()); // If the LLVM runtime renamed the global, but it is an externally visible // symbol, DGV must be an existing global with internal linkage. Rename @@ -503,11 +502,10 @@ static bool LinkGlobals(Module *Dest, Module *Src, SGV->isConstant(), SGV->getLinkage(), /*init*/0, "", Dest); - // Propagate alignment info. + // Propagate alignment, section and visibility info. NewDGV->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment())); - - // Propagate section info. NewDGV->setSection(SGV->getSection()); + NewDGV->setVisibility(SGV->getVisibility()); // Make sure to remember this mapping... ValueMap.insert(std::make_pair(SGV, NewDGV)); @@ -515,11 +513,10 @@ static bool LinkGlobals(Module *Dest, Module *Src, // Keep track that this is an appending variable... AppendingVars.insert(std::make_pair(SGV->getName(), NewDGV)); } else { - // Propagate alignment info. + // Propagate alignment, section, and visibility info. DGV->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment())); - - // Propagate section info. DGV->setSection(SGV->getSection()); + DGV->setVisibility(SGV->getVisibility()); // Otherwise, perform the mapping as instructed by GetLinkageResult. If // the types don't match, and if we are to link from the source, nuke DGV @@ -529,6 +526,8 @@ static bool LinkGlobals(Module *Dest, Module *Src, new GlobalVariable(SGV->getType()->getElementType(), DGV->isConstant(), DGV->getLinkage()); NewDGV->setAlignment(DGV->getAlignment()); + NewDGV->setSection(DGV->getSection()); + NewDGV->setVisibility(DGV->getVisibility()); Dest->getGlobalList().insert(DGV, NewDGV); DGV->replaceAllUsesWith( ConstantExpr::getBitCast(NewDGV, DGV->getType())); |