[LLVMdev] [lld] Implementing the aliasing feature

Shankar Easwaran shankare at codeaurora.org
Fri Sep 13 14:50:47 PDT 2013


Ping ?

On 9/12/2013 5:02 PM, Shankar Easwaran wrote:
> Hi Nick,
>
> In addition to what you mentioned, I think there needs a special 
> *AliasReference* that need to be created which the DefinedAtom points to.
>
> Thanks
>
> Shankar Easwaran
>
>
> -------- Original Message --------
> Subject:     Re: [PATCH] Add a fallback mechanism for undefined atom.
> Date:     Thu, 29 Aug 2013 15:15:49 -0700
> From:     kledzik at apple.com <kledzik at apple.com>
> Reply-To: 
> reviews+D1550+public+25c98da67f89e22f at llvm-reviews.chandlerc.com
> To:     shankarke at gmail.com, kledzik at apple.com, bigcheesegs at gmail.com, 
> ruiu at google.com
> CC:     llvm-commits at cs.uiuc.edu
>
>
>
>   Interesting feature.
>
>   What happens if a.o has an undefine foo which says its fallback is 
> bar, but in b.o an undefine for foo says its fallback is baz? Is that 
> an error, or does each fallback apply to its original usage.  The 
> problem is that the Resolver is currently coalescing UndefinedAtoms 
> based on their name. I does not know that fallbacks need to match too.
>
>   Another variant is to have Undefined return a alternate name as a 
> string, rather than returning a new UndefinedAtom object.
>
>   Another approach is to use weak aliases.  That is if a.o has an 
> undefine for foo with a fallback of bar, that when parsing that .o 
> file into atoms produces an UndefinedAtom for foo, but also a 
> DefinedAtom with name=foo, weak (mergeAsWeak), hidden 
> (scopeLinkageUnit), size=0, isAlias=true which aliases to bar. So, it 
> any definition of foo does show up, it will override the weak alias.  
> If not the weak alias will be used and change the reference to bar.
>
>   I don't think the isAlias support is all wired up in lld.  But weak 
> aliases are something common in ELF. So would should  get it working, 
> and doing so may provide a way to implement this COFF feature.
>
>   One issue is how this interacts with static libraries.  The weak 
> alias for foo make look like there is a definition, so any static 
> archives will not be searched for foo.  That seems different than what 
> you want.  I'm not sure what the gnu linker does about this with weak 
> aliases.  We may need a new resolver option as to how to handle this.
>
>
> ================
> Comment at: lib/Core/Resolver.cpp:214
> @@ +213,3 @@
> +      // for COFF "weak external" symbol.
> +      const UndefinedAtom *fallbackUndefAtom = undefAtom->fallback();
> +      if (fallbackUndefAtom) {
> ----------------
> You need to re-test:
>   if (!_symbolTable.isDefined(undefName)
> because searchLibraries() may have already found a definition.
>
>
> http://llvm-reviews.chandlerc.com/D1550
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>
>


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation




More information about the llvm-dev mailing list