[PATCH] Reload undefined atoms to use possibly new undefines.
Rui Ueyama
ruiu at google.com
Mon Nov 18 09:33:43 PST 2013
Ping?
On Thu, Nov 14, 2013 at 4:35 PM, Rui Ueyama <ruiu at google.com> wrote:
> PIng.
>
>
> On Tue, Nov 12, 2013 at 10:22 PM, Rui Ueyama <ruiu at google.com> wrote:
>
>> As Resolver tries to resolve all undefined atoms, it loads new files. The
>> new
>> files can contain any kind of atoms, namely, defined, undefined and
>> shared. It's
>> possible that there's a file that contains the same undefined atom that's
>> being
>> resolved now in the Resolver's for-loop.
>>
>> A new undefined atom may have different fallback atom from the previous
>> one.
>> Currently, such new fallback atom definitions are ignored because although
>> the new atom is stored to the symbol table, it's not used by Resolver.
>> This
>> patch fixes that issue by reloading undefined atoms, so that Resolver will
>> always do based on the most recent state of the symbol table.
>>
>> There's no performance penalty introduced by this patch -- just in case
>> if you
>> are wondering. isDefined() uses findByName internally, so the cost is the
>> same.
>>
>> http://llvm-reviews.chandlerc.com/D2162
>>
>> Files:
>> lib/Core/Resolver.cpp
>>
>> Index: lib/Core/Resolver.cpp
>> ===================================================================
>> --- lib/Core/Resolver.cpp
>> +++ lib/Core/Resolver.cpp
>> @@ -166,7 +166,10 @@
>> // If the undefined symbol has an alternative name, try to resolve
>> the
>> // symbol with the name to give it a second chance. This feature
>> is used
>> // for COFF "weak external" symbol.
>> - if (!_symbolTable.isDefined(undefName)) {
>> + const Atom *maybeUndefAtom = _symbolTable.findByName(undefName);
>> + assert(maybeUndefAtom);
>> + if (const UndefinedAtom *undefAtom = dyn_cast<const UndefinedAtom>(
>> + maybeUndefAtom)) {
>> if (const UndefinedAtom *fallbackUndefAtom =
>> undefAtom->fallback()) {
>> _symbolTable.addReplacement(undefAtom, fallbackUndefAtom);
>> _symbolTable.add(*fallbackUndefAtom);
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131118/429ac659/attachment.html>
More information about the llvm-commits
mailing list