diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index c538e2dc1d8c..f9c3c3618e36 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -162,8 +162,6 @@ template void SymbolTable::addSymbolWrap(StringRef Name) { Symbol *Real = addUndefined(Saver.save("__real_" + Name)); Symbol *Wrap = addUndefined(Saver.save("__wrap_" + Name)); - // Tell LTO not to eliminate this symbol. - Wrap->IsUsedInRegularObj = true; defsym(Real, Sym); defsym(Sym, Wrap); } @@ -177,8 +175,6 @@ void SymbolTable::addSymbolAlias(StringRef Alias, StringRef Name) { return; } - // Tell LTO not to eliminate this symbol. - B->symbol()->IsUsedInRegularObj = true; defsym(addUndefined(Alias), B->symbol()); } @@ -529,6 +525,10 @@ void SymbolTable::defsym(Symbol *Dst, Symbol *Src) { // We want to tell LTO not to inline Dst symbol because LTO doesn't // know the final symbol contents after renaming. Dst->CanInline = false; + + // Tell LTO not to eliminate this symbol. + Src->IsUsedInRegularObj = true; + Defsyms.push_back({Dst, Src, Dst->Binding}); } diff --git a/lld/test/ELF/lto/wrap-1.ll b/lld/test/ELF/lto/wrap-1.ll index 1dd9139808b6..83e09493fb5d 100644 --- a/lld/test/ELF/lto/wrap-1.ll +++ b/lld/test/ELF/lto/wrap-1.ll @@ -19,7 +19,7 @@ ; Make sure that the 'r' (linker redefined) bit is set for bar and __wrap_bar ; in the resolutions file. -; RESOLS: ,bar,r +; RESOLS: ,bar,xr ; RESOLS: ,__wrap_bar,px ; RESOLS: ,__real_bar,pxr