<div dir="ltr">On Mon, Jul 8, 2013 at 8:10 PM, Bill Wendling <span dir="ltr"><<a href="mailto:isanbard@gmail.com" target="_blank">isanbard@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Jul 8, 2013, at 4:54 PM, Chris Lattner <<a href="mailto:clattner@apple.com">clattner@apple.com</a>> wrote:<br>

<br>
> On Jul 8, 2013, at 4:23 PM, Bill Wendling <<a href="mailto:isanbard@gmail.com">isanbard@gmail.com</a>> wrote:<br>
><br>
>> Author: void<br>
>> Date: Mon Jul  8 18:23:03 2013<br>
>> New Revision: 185882<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=185882&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=185882&view=rev</a><br>
>> Log:<br>
>> Don't run internalize if we're outputing bit-code and not an object file.<br>
>><br>
>> The problem with running internalize before we're ready to output an object file<br>
>> is that it may change a 'weak' symbol into an internal one, but that symbol<br>
>> could be needed by an external object file --- e.g. with arclite.<br>
><br>
> I don't understand: how does output format affect symbol visibility?<br>
><br>
</div>If it changes a symbol from 'weak' to 'non-weak', then that symbol may be optimized away if the compiler thinks that it's no longer used. But if it's running 'ld -r', it doesn't know if the symbol can be optimized away because it doesn't have all of the source code available for it. Given this, it doesn't really make sense to run internalize before outputting a .bc file. That code hasn't gone through code generation yet, so the linker doesn't really know which of its symbols can be changed from 'weak' to 'non-weak'.<br>
</blockquote><div><br></div><div style>ld -r seems really, really different from normal LTO.  Is there some other flag to detect that?  Are there any other passes that LTO uses that assume it has all the code in the final image? </div>
</div></div></div>