[lld] r329092 - Make fetchIfLazy only fetch an object file. NFC.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 3 11:56:32 PDT 2018


I'm on it. Sorry for the breakage.

On Tue, Apr 3, 2018 at 11:51 AM Chandler Carruth <chandlerc at gmail.com>
wrote:

> On Tue, Apr 3, 2018 at 11:04 AM Rui Ueyama via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: ruiu
>> Date: Tue Apr  3 11:01:18 2018
>> New Revision: 329092
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=329092&view=rev
>> Log:
>> Make fetchIfLazy only fetch an object file. NFC.
>>
>> Previously, fetchIfLazy did more than the name says. Now, setting
>> to UsedInRegularObj is moved to another function.
>>
>> Modified:
>>     lld/trunk/ELF/Driver.cpp
>>     lld/trunk/ELF/SymbolTable.cpp
>>     lld/trunk/ELF/SymbolTable.h
>>
>> Modified: lld/trunk/ELF/Driver.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=329092&r1=329091&r2=329092&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/ELF/Driver.cpp (original)
>> +++ lld/trunk/ELF/Driver.cpp Tue Apr  3 11:01:18 2018
>> @@ -1017,6 +1017,20 @@ static void excludeLibs(opt::InputArgLis
>>              Sym->VersionId = VER_NDX_LOCAL;
>>  }
>>
>> +// Force Sym to be entered in the output. Used for -u or equivalent.
>> +template <class ELFT> static void handleUndefined(StringRef Name) {
>> +  Symbol *Sym = Symtab->find(Name);
>> +  if (!Sym)
>> +    return;
>> +
>> +  // Since symbol S may not be used inside the program, LTO may
>> +  // eliminate it. Mark the symbol as "used" to prevent it.
>> +  Sym->IsUsedInRegularObj = true;
>> +
>> +  if (Sym->isLazy())
>> +    Symtab->fetchLazy<ELFT>(Sym);
>>
>
> Because this template is only defined in the other .cpp file, we can't
> actually instantiate it here. As a consequence, I'm seeing link failures of
> lld after this commit.
>
>
>> +}
>> +
>>  // Do actual linking. Note that when this function is called,
>>  // all linker scripts have already been parsed.
>>  template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
>> @@ -1081,16 +1095,12 @@ template <class ELFT> void LinkerDriver:
>>
>>    // Handle the `--undefined <sym>` options.
>>    for (StringRef S : Config->Undefined)
>> -    if (Symbol *Sym = Symtab->find(S))
>> -      if (InputFile *F = Symtab->fetchIfLazy(Sym))
>> -        Symtab->addFile<ELFT>(F);
>> +    handleUndefined<ELFT>(S);
>>
>>    // If an entry symbol is in a static archive, pull out that file now
>>    // to complete the symbol table. After this, no new names except a
>>    // few linker-synthesized ones will be added to the symbol table.
>> -  if (Symbol *Sym = Symtab->find(Config->Entry))
>> -    if (InputFile *F = Symtab->fetchIfLazy(Sym))
>> -      Symtab->addFile<ELFT>(F);
>> +  handleUndefined<ELFT>(Config->Entry);
>>
>>    // Return if there were name resolution errors.
>>    if (errorCount())
>>
>> Modified: lld/trunk/ELF/SymbolTable.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=329092&r1=329091&r2=329092&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/ELF/SymbolTable.cpp (original)
>> +++ lld/trunk/ELF/SymbolTable.cpp Tue Apr  3 11:01:18 2018
>> @@ -314,8 +314,8 @@ Symbol *SymbolTable::addUndefined(String
>>      // Symbols.h for the details.
>>      if (Binding == STB_WEAK)
>>        S->Type = Type;
>> -    else if (InputFile *F = Symtab->fetchIfLazy(S))
>> -      addFile<ELFT>(F);
>> +    else
>> +      fetchLazy<ELFT>(S);
>>    }
>>    return S;
>>  }
>> @@ -574,15 +574,16 @@ void SymbolTable::addLazyObject(StringRe
>>      addFile<ELFT>(F);
>>  }
>>
>> -InputFile *SymbolTable::fetchIfLazy(Symbol *Sym) {
>> -  // Mark the symbol not to be eliminated by LTO
>> -  // even if it is a bitcode symbol.
>> -  Sym->IsUsedInRegularObj = true;
>> -  if (LazyArchive *L = dyn_cast<LazyArchive>(Sym))
>> -    return L->fetch();
>> -  if (LazyObject *L = dyn_cast<LazyObject>(Sym))
>> -    return cast<LazyObjFile>(L->File)->fetch();
>> -  return nullptr;
>> +template <class ELFT> void SymbolTable::fetchLazy(Symbol *Sym) {
>> +  if (auto *S = dyn_cast<LazyArchive>(Sym)) {
>> +    if (InputFile *File = S->fetch())
>> +      addFile<ELFT>(File);
>> +    return;
>> +  }
>> +
>> +  auto *S = cast<LazyObject>(Sym);
>> +  if (InputFile *File = cast<LazyObjFile>(S->File)->fetch())
>> +    addFile<ELFT>(File);
>>  }
>>
>>  // Initialize DemangledSyms with a map from demangled symbols to symbol
>>
>> Modified: lld/trunk/ELF/SymbolTable.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.h?rev=329092&r1=329091&r2=329092&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/ELF/SymbolTable.h (original)
>> +++ lld/trunk/ELF/SymbolTable.h Tue Apr  3 11:01:18 2018
>> @@ -77,7 +77,7 @@ public:
>>                                     uint8_t Visibility, bool
>> CanOmitFromDynSym,
>>                                     InputFile *File);
>>
>> -  InputFile *fetchIfLazy(Symbol *Sym);
>> +  template <class ELFT> void fetchLazy(Symbol *Sym);
>>
>>    void scanVersionScript();
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180403/22138667/attachment.html>


More information about the llvm-commits mailing list