]> git.ipfire.org Git - thirdparty/glibc.git/commit
arm: Update _dl_tlsdesc_dynamic to preserve caller-saved registers (BZ 31372)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 12 Mar 2024 16:21:19 +0000 (13:21 -0300)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 1 Apr 2024 18:16:27 +0000 (11:16 -0700)
commita8ba52bde58c69f2b31da62ad2311f119adf6cb9
tree8a7e5c1406a1b848b798c18a1b0cda15521b210d
parent15aebdbada54098787715448c94701f17033fc92
arm: Update _dl_tlsdesc_dynamic to preserve caller-saved registers (BZ 31372)

ARM _dl_tlsdesc_dynamic slow path has two issues:

  * The ip/r12 is defined by AAPCS as a scratch register, and gcc is
    used to save the stack pointer before on some function calls.  So it
    should also be saved/restored as well.  It fixes the tst-gnu2-tls2.

  * None of the possible VFP registers are saved/restored.  ARM has the
    additional complexity to have different VFP bank sizes (depending of
    VFP support by the chip).

The tst-gnu2-tls2 test is extended to check for VFP registers, although
only for hardfp builds.  Different than setcontext, _dl_tlsdesc_dynamic
does not have  HWCAP_ARM_IWMMXT (I don't have a way to properly test
it and it is almost a decade since newer hardware was released).

With this patch there is no need to mark tst-gnu2-tls2 as XFAIL.

Checked on arm-linux-gnueabihf.
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
(cherry picked from commit 64c7e344289ed085517c2227d8e3b06388242c13)
config.h.in
elf/Makefile
elf/tst-gnu2-tls2.h
elf/tst-gnu2-tls2mod0.c
elf/tst-gnu2-tls2mod1.c
elf/tst-gnu2-tls2mod2.c
sysdeps/arm/configure
sysdeps/arm/configure.ac
sysdeps/arm/dl-tlsdesc.S
sysdeps/arm/tst-gnu2-tls2.h [new file with mode: 0644]