<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 22, 2016 at 12:52 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>><br>
> Ok, I wasn't sure (and because this handling is for COFF not ELF). It might be worth adding a comment to this effect where you are doing the alias conversion to a declaration. Especially since the new test case has exactly this situation: e.g. @alias, @func and @var etc are in one comdat but not the selected one.<br>
><br>
> Then it sounds like normally we would expect that any alias which is dropped would also have to be defined in the source module comdat group, so the declaration created here would be replaced by the def from the selected imported group from the source copy? If it isn't replaced with a def, then if the comdat members are linkonce the defs might be dropped from the source module when it is compiled.<br>
><br>
<br>
</span>Note that this is not a new problem. The patch just makes us handle<br>
the case of the files being seen in the opposite order. If currently<br>
you run<br>
<br>
llvm-link a.ll b.ll -o c.ll<br>
<br>
and we pick a group from a, it is possible that you will end up with<br>
an undefined reference from something being dropped from b.ll. This<br>
patch just implements us selecting the group from b.ll (which only<br>
happens in COFF).<br></blockquote><div><br></div><div>Ok, applied this patch and modified the test case to have the same comdat members and aliases in second module (with largest) and confirmed that the defs do get pulled in when linked as expected (aliases end up as aliases not decls). So that looks good to me. What is the remaining problem?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span><br>
<br>
>> -------------------------------------------------<br>
>> A symbol table entry with STB_GLOBAL or STB_WEAK binding that is<br>
>> defined relative to one of a group's sections, and that is contained<br>
>> in a symbol table section that is not part of the group, must be<br>
>> converted to an undefined symbol (its section index must be changed to<br>
>> SHN_UNDEF) if the group members are discarded. References to this<br>
>> symbol table entry from outside the group are allowed.<br>
>> -------------------------------------------------<br>
><br>
><br>
> Does "A symbol table entry ... defined relative to one of a group's sections" refer to any alias to a member of a comdat group?<br>
<br>
</span>It can. At the ELF level there are no aliases. Just symbols that<br>
happen to have the same value.<br>
<span><br>
> So you are saying that this will produce a declaration that the compiler/linker is ok with, even if the aliasee is a function?<br>
<br>
</span>Correct.<br>
<span><br>
> That seems a bit funky to do regardless. I see another place where we drop symbols that creates the right kind of object type for the new declaration based on the aliasee here: See the alias handling in  runOnModule() in lib/Transforms/IPO/ExtractGV.cpp. Maybe that handling can be refactored into a helper that could be invoked here...<br>
<br>
</span>I don't think it is that funky, it is inherent on llvm being type<br>
unsafe, which is why I would prefer to be just one way to declare an<br>
undefined symbol in the IR.<br>
<br>
But in any case. It is a simple case. I will upload a new patch with<br>
it. Adding the test for it I also noticed that aliases had to be<br>
processed first.<br></blockquote><div><br></div><div>Ok, thanks. This just looks cleaner to me. Would be nice to have a single generic way to create a declaration as you note.</div><div><br></div><div>Teresa</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers,<br>
Rafael<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Teresa Johnson |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> <a href="tel:408-460-2413" value="+14084602413" target="_blank">408-460-2413</a></td></tr></tbody></table></span></div>
</div></div>