[PATCH] S/390: Fix two issues with the IFUNC optimized mem* routines

H.J. Lu hjl.tools@gmail.com
Sun Sep 2 20:06:00 GMT 2012


On Sun, Sep 2, 2012 at 12:41 PM, Richard Henderson <rth@twiddle.net> wrote:
> On 2012-09-02 07:50, H.J. Lu wrote:
>> A relax pass won't work properly for x86 without some surgery
>> since lang_relax_sections is called after bfd_elf_size_dynamic_sections
>> which calls elf_x86_64_allocate_dynrelocs to allocate GOT entries
>> and dynamic relocations. After it is done, it is not to easy to undo
>> the damage.
>
> Other targets keep usage counts of GOT entries live throughout relaxation.
> It becomes easy to adjust the GOT *after* bfd_elf_size_dynamic_sections
> has been called.  Indeed, many targets require this ordering since some
> of the optimizations applied are true relaxations, and require knowledge
> of true displacements.  And indeed, the reduction in GOT size may enable
> another relaxation pass, enabling further optimizations to succeed.

That is true.  IA64 needs more than one pass to do it properly.

>> This is a separate issue.  X86 backends also optimize
>> TLS relocations.  Some compilers generate bad TLS
>> sequences which lead to corrupted output:
>>
>> http://sourceware.org/bugzilla/show_bug.cgi?id=4928
>>
>> But there is no way to turn off the TLS optimization.
>
> ... because it was done in the wrong place.  An excellent opportunity
> to move the TLS relaxations to a relaxation pass, wouldn't you agree?
>

I think it is overkill for x86 since all relocations targets can be reached.
I don't want to make big changes in relaxation codes for this.


-- 
H.J.



More information about the Libc-alpha mailing list