<div dir="auto">Thanks!</div><div class="gmail_extra"><br><div class="gmail_quote">On Apr 4, 2017 1:24 PM, "Rafael EspĂ­ndola" <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">OK, I finally had time to take a look. The issue was just us not<br>
realizing that a hidden undef and a definition in a .so should not be<br>
treated like the same symbol.<br>
<br>
Fixed in r299464.<br>
<br>
Cheers,<br>
Rafael<br>
<br>
On 13 March 2017 at 22:04, Sean Silva <<a href="mailto:chisophugis@gmail.com">chisophugis@gmail.com</a>> wrote:<br>
> Rafael, did you ever get a chance to look at this?<br>
><br>
> -- Sean Silva<br>
><br>
> On Thu, Feb 23, 2017 at 1:14 AM, Sean Silva <<a href="mailto:chisophugis@gmail.com">chisophugis@gmail.com</a>> wrote:<br>
>><br>
>><br>
>><br>
>> On Wed, Feb 22, 2017 at 6:14 AM, Rafael Avila de Espindola<br>
>> <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
>>><br>
>>> Sean Silva <<a href="mailto:chisophugis@gmail.com">chisophugis@gmail.com</a>> writes:<br>
>>> >> When __libc_start_main is hidden, it doesn't end up in the dynamic<br>
>>> >> symbol<br>
>>> >> table and so we use the default DynsymIndex of 0.<br>
>>> >><br>
>>> ><br>
>>> ><br>
>>> > I think BFD is doing the right thing. The `extern_weak hidden` is<br>
>>> > resolved<br>
>>> > to null since by virtue of being hidden it doesn't refer to the<br>
>>> > function in<br>
>>> > libc.so (and there is no definition in the executable). For some<br>
>>> > reason,<br>
>>> > LLD thinks that it needs to resolve __libc_start_main dynamically and<br>
>>> > things go horribly wrong. Rafael, what do you think?<br>
>>><br>
>>> If it is hidden it should really not end up in the dynamic symbol<br>
>>> table. I will try to take a look at your reproducible latter in the day.<br>
>><br>
>><br>
>><br>
>> FWIW, gold issues an error:<br>
>><br>
>> /usr/bin/ld.gold: error: hidden symbol '__libc_start_main' is not defined<br>
>> locally<br>
>> /usr/bin/ld.gold: error: hidden symbol '__libc_start_main' is not defined<br>
>> locally<br>
>><br>
>> In theory `extern_weak hidden` could still fail to have a local definition<br>
>> and then it would resolve to 0 due to being weak, which is what BFD does.<br>
>> But `extern_weak hidden` is still pretty questionable. E.g. in the original<br>
>> case that Carlo ran into, this was not the expected behavior (and this error<br>
>> may have saved him some time actually).<br>
>><br>
>> -- Sean Silva<br>
>><br>
>>><br>
>>><br>
>>> Cheers,<br>
>>> Rafael<br>
>><br>
>><br>
><br>
</blockquote></div></div>