summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Driver.cpp
diff options
context:
space:
mode:
authorDmitry Mikulin <dmitry.mikulin@sony.com>2017-06-05 16:24:25 +0000
committerDmitry Mikulin <dmitry.mikulin@sony.com>2017-06-05 16:24:25 +0000
commitdb3b87b2c0b8f238c470e7c007fee0586c1d9a8e (patch)
treedfcd229de2f5896b40659d4389c27819c2cbd40e /lld/ELF/Driver.cpp
parentb2ef94862843e7f52ac873f86af041eac0a18d69 (diff)
downloadbcm5719-llvm-db3b87b2c0b8f238c470e7c007fee0586c1d9a8e.tar.gz
bcm5719-llvm-db3b87b2c0b8f238c470e7c007fee0586c1d9a8e.zip
Symbols re-defined with -wrap and -defsym need to be excluded from inter-
procedural optimizations to prevent dropping symbols and allow the linker to process re-directs. PR33145: --wrap doesn't work with lto. Differential Revision: https://reviews.llvm.org/D33621 llvm-svn: 304719
Diffstat (limited to 'lld/ELF/Driver.cpp')
-rw-r--r--lld/ELF/Driver.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 325404447b2..4e72f799234 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -970,6 +970,14 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
Symtab.scanShlibUndefined();
Symtab.scanVersionScript();
+ // Create wrapped symbols for -wrap option.
+ for (auto *Arg : Args.filtered(OPT_wrap))
+ Symtab.addSymbolWrap(Arg->getValue());
+
+ // Create alias symbols for -defsym option.
+ for (std::pair<StringRef, StringRef> &Def : getDefsym(Args))
+ Symtab.addSymbolAlias(Def.first, Def.second);
+
Symtab.addCombinedLTOObject();
if (ErrorCount)
return;
@@ -979,12 +987,8 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
for (StringRef Sym : Script->Opt.ReferencedSymbols)
Symtab.addUndefined(Sym);
- for (auto *Arg : Args.filtered(OPT_wrap))
- Symtab.wrap(Arg->getValue());
-
- // Handle --defsym=sym=alias option.
- for (std::pair<StringRef, StringRef> &Def : getDefsym(Args))
- Symtab.alias(Def.first, Def.second);
+ // Apply symbol renames for -wrap and -defsym
+ Symtab.applySymbolRenames();
// Now that we have a complete list of input files.
// Beyond this point, no new files are added.
OpenPOWER on IntegriCloud