[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