binutils-gdb/ld/testsuite
Matthew Malcomson 976f16630b ld: aarch64: Adjust TLS relaxation condition
In aarch64_tls_transition_without_check and elfNN_aarch64_tls_relax we
choose whether to perform a relaxation to an IE access model or an LE
access model based on whether the symbol itself is marked as local (i.e.
`h == NULL`).

This is problematic in two ways.  The first is that sometimes a global
dynamic access can be relaxed to an initial exec access when creating a
shared library, and if that happens on a local symbol then we currently
relax it to a local exec access instead.  This usually does not happen
since we only relax an access if aarch64_can_relax_tls returns true and
aarch64_can_relax_tls does not have the same problem.  However, it can
happen when we have seen both an IE and GD access on the same symbol.
This case is exercised in the newly added testcase tls-relax-gd-ie-2.

The second problem is that deciding based on whether the symbol is local
misses the case when the symbol is global but is still non-interposable
and known to be located in the executable.  This happens on all global
symbols in executables.
This case is exercised in the newly added testcase tls-relax-ie-le-4.

Here we adjust the condition we base our relaxation on so that we relax
to local-exec if we are creating an executable and the relevant symbol
we're accessing is stored inside that executable.

-- Updating tests for new relaxation criteria

Many of the tests added to check our relaxation to IE were implemented
by taking advantage of the fact that we did not relax a global symbol
defined in an executable.

Since a global symbol defined in an executable is still not
interposable, we know that a TLS version of such a symbol will be in the
main TLS block.  This means that we can perform a stronger relaxation on
such symbols and relax their accesses to a local-exec access.

Hence we have to update all tests that relied on the older suboptimal
decision making.

The two cases when we still would want to relax a general dynamic access
to an initial exec one are:
1) When in a shared library and accessing a symbol which we have already
   seen accessed with an initial exec access sequence.
2) When in an executable and accessing a symbol defined in a shared
   library.

Both of these require shared library support, which means that these
tests are now only available on targets with that.

I have chosen to switch the existing testcases from a plain executable
to one dynamically linked to a shared object as that doesn't require
changing the testcases quite so much (just requires accessing a
different variable rather than requiring adding another code sequence).

The tls-relax-all testcase was an outlier to the above approach, since
it included a general dynamic access to both a local and global symbol
and inspected for the difference accordingly.
2022-08-02 12:10:01 +01:00
..
config Enable "size" as a dumpprog in ld 2022-02-05 17:37:19 +10:30
ld-aarch64 ld: aarch64: Adjust TLS relaxation condition 2022-08-02 12:10:01 +01:00
ld-alpha Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-arc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-arm arm: Define elf_backend_extern_protected_data to 0 [PR 18705] 2022-06-25 10:27:49 -07:00
ld-auto-import Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-avr Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-bootstrap ld: add --package-metadata 2022-05-26 12:56:12 +09:30
ld-bpf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-cdtest Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-checks Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-cris Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-crx Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-csky Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-ctf ld: Compile 2 CTF tests with -O2 2022-07-25 09:59:47 -07:00
ld-cygwin Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-d10v Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-discard Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-dynamic Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-elf LoongArch: Set defaults to exec stack 0. 2022-08-01 09:05:00 +08:00
ld-elfcomm Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-elfvers Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-elfweak Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-fastcall Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-frv Add linker warning for when it creates an executable stack. 2022-04-20 13:39:05 +01:00
ld-gc Add linker warning for when it creates an executable stack. 2022-04-20 13:39:05 +01:00
ld-h8300 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-i386 i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC 2022-07-21 11:40:27 -07:00
ld-ia64 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-ifunc i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC 2022-07-21 11:40:27 -07:00
ld-libs Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-linkonce Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-loongarch-elf opcodes: LoongArch: add "ret" instruction to reduce typing 2022-08-01 15:57:32 +08:00
ld-m68hc11 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-m68k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mep Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-metag Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-mips-elf BFD_RELOC_MIPS_16 2022-06-14 10:03:55 +09:30
ld-misc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mmix Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-mn10300 Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-msp430-elf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-nds32 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-nios2 Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-or1k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-pdp11 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-pe ld: Support the -exclude-symbols option via COFF def files, with the EXCLUDE_SYMBOLS keyword 2022-08-01 23:18:00 +03:00
ld-pie Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-plugin LTO: Handle __real_SYM reference in IR 2022-05-04 16:26:51 -07:00
ld-powerpc PowerPC32 ld test fails with --enable-targets=all 2022-07-26 22:14:20 +09:30
ld-pru Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-riscv-elf RISC-V: Stop reporting warnings for mismatched extension versions 2022-02-08 08:23:28 -08:00
ld-s12z Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-s390 Revert "elf: Remove the 1-page gap before the RELRO segment" 2022-02-07 13:42:41 +10:30
ld-scripts ld testsuite xcoff XPASS 2022-04-21 15:30:50 +09:30
ld-selective Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-sh Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-shared Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-size Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-sparc Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-spu Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-srec Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-tic6x Trailing spaces in objdump -r header 2022-05-31 11:25:09 +09:30
ld-tilegx Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-tilepro Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-undefined Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-unique Add linker warning for when it creates an executable stack. 2022-04-20 13:39:05 +01:00
ld-v850 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-vax-elf Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-visium Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-vsb ld: add hidden and internal visibility support for XCOFF 2022-01-12 09:08:25 +01:00
ld-vxworks Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-x86-64 x86: Disallow invalid relocations against protected symbols 2022-07-19 08:41:52 -07:00
ld-xstormy16 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-xtensa Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-z8k Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
ld-z80 Update year range in copyright notice of binutils files 2022-01-02 12:04:28 +10:30
lib ld, testsuite: improve CTF-availability test 2022-03-23 13:38:16 +00:00
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-9303