Index: ELF/SymbolTable.cpp =================================================================== --- ELF/SymbolTable.cpp +++ ELF/SymbolTable.cpp @@ -492,22 +492,15 @@ if (Sym.getVisibility() == STV_DEFAULT) S->ExportDynamic = true; - // An undefined symbol with non default visibility must be satisfied - // in the same DSO. - if (WasInserted) { - replaceSymbol(S, File, Name, Sym.getBinding(), Sym.st_other, + if (WasInserted || + // An undefined/lazy symbol with non default visibility must be satisfied + // in the same DSO. + ((S->isUndefined() || S->isLazy()) && S->Visibility == STV_DEFAULT)) { + // Use the original binding if inserted before. + uint8_t Binding = WasInserted ? Sym.getBinding() : S->Binding; + replaceSymbol(S, File, Name, Binding, Sym.st_other, Sym.getType(), Sym.st_value, Sym.st_size, Alignment, VerdefIndex); - return; - } - - if ((S->isUndefined() || S->isLazy()) && S->Visibility == STV_DEFAULT) { - uint8_t Binding = S->Binding; - replaceSymbol(S, File, Name, Sym.getBinding(), Sym.st_other, - Sym.getType(), Sym.st_value, Sym.st_size, - Alignment, VerdefIndex); - - S->Binding = Binding; } }