Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions lld/ELF/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,9 @@ void LinkerDriver::addFile(StringRef path, bool withLOption) {

// Add a given library by searching it from input search paths.
void LinkerDriver::addLibrary(StringRef name) {
if (std::optional<std::string> path = searchLibrary(name))
if (name.size() > 0 && name[0] == '/')
addFile(saver().save(name), /*withLOption=*/true);
else if (std::optional<std::string> path = searchLibrary(name))
addFile(saver().save(*path), /*withLOption=*/true);
else
error("unable to find library -l" + name, ErrorTag::LibNotFound, {name});
Expand Down Expand Up @@ -2252,8 +2254,13 @@ static std::vector<WrappedSymbol> addWrappedSymbols(opt::InputArgList &args) {
if (!sym)
continue;

Symbol *wrap =
addUnusedUndefined(saver().save("__wrap_" + name), sym->binding);
// If __wrap_ is lazy force load it - its sym->binding might be
// weak, in which case the wrapped symbol will not get loaded.
StringRef wrapName = saver().save("__wrap_" + name);
Symbol *existingWrap = symtab.find(wrapName);
if (existingWrap && existingWrap->isLazy())
existingWrap->extract();
Symbol *wrap = addUnusedUndefined(wrapName, sym->binding);

// If __real_ is referenced, pull in the symbol if it is lazy. Do this after
// processing __wrap_ as that may have referenced __real_.
Expand Down
2 changes: 2 additions & 0 deletions lld/ELF/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,8 @@ def: F<"stats">;
def: F<"warn-execstack">;
def: F<"warn-once">;
def: F<"warn-shared-textrel">;
def: F<"no-keep-files-mapped">;
def: F<"no-warn-search-mismatch">;
def: JoinedOrSeparate<["-"], "G">;

// Hidden option used for testing MIPS multi-GOT implementation.
Expand Down