Message ID | 59EF4CEC.8020301@arm.com |
---|---|
Headers | show |
Series | Disable lazy tlsdesc on aarch64 and arm | expand |
On Tue, Oct 24, 2017 at 7:23 AM, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > Reorganized the aarch64 patches a bit and added patches for arm too. > > The reason behind this change is the data race BZ #18034 on aarch64 > and equivalent BZ #18572 on arm. The aarch64 bug was fixed by adding > synchronization but that causes significant performance regression > of tls access. Lazy initialization of tlsdesc was never justified, > so i'm proposing to remove it on weakly ordered memory architectures. > (For consistency i think it should be removed on x86 too, but i don't > have patches for that.) > > Szabolcs Nagy (7): > Mark lazy tlsdesc helper functions unused to avoid warnings > aarch64: Disable lazy symbol binding of TLSDESC > aarch64: Remove barriers from TLS descriptor functions > [BZ #17078] arm: remove prelinker support for R_ARM_TLS_DESC > [BZ #18572] arm: Disable lazy initialization of tlsdesc entries > arm: Remove unnecessary volatile qualifier > arm: Remove lazy tlsdesc initialization related code > > TLSDESC is very rarely used/tested. Should we remove lazy binding TLSDESC for all targets? It will simplify TLSDESC code.
On 24/10/17 15:54, H.J. Lu wrote: > On Tue, Oct 24, 2017 at 7:23 AM, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: >> Reorganized the aarch64 patches a bit and added patches for arm too. >> >> The reason behind this change is the data race BZ #18034 on aarch64 >> and equivalent BZ #18572 on arm. The aarch64 bug was fixed by adding >> synchronization but that causes significant performance regression >> of tls access. Lazy initialization of tlsdesc was never justified, >> so i'm proposing to remove it on weakly ordered memory architectures. >> (For consistency i think it should be removed on x86 too, but i don't >> have patches for that.) >> >> Szabolcs Nagy (7): >> Mark lazy tlsdesc helper functions unused to avoid warnings >> aarch64: Disable lazy symbol binding of TLSDESC >> aarch64: Remove barriers from TLS descriptor functions >> [BZ #17078] arm: remove prelinker support for R_ARM_TLS_DESC >> [BZ #18572] arm: Disable lazy initialization of tlsdesc entries >> arm: Remove unnecessary volatile qualifier >> arm: Remove lazy tlsdesc initialization related code >> >> > > TLSDESC is very rarely used/tested. Should we remove lazy binding > TLSDESC for all targets? It will simplify TLSDESC code. > i think removing it for all targets makes sense. i think in glibc a small bit of generic code and a big chunk of target specific asm + c can be removed. with the approach in this patch, targets can do the cleanup independently (by doing symbol binding for R_*_TLSDESC in their elf_machine_lazy_rel) another approach is to do the non-lazy code path for for R_*_TLSDESC in the generic elf/do-rel.h code, however that seems more messy given how that code is structured. i haven't yet looked into the bfd linker, i suspect if tlsdesc relocs are moved to the non-lazy reloc list then the tlsdesc plt sequence and some related code in the linker may be removed. (but i dont know if that is valid to do or if it is abi).
The ARM patches are OK.