diff options
author | Cui, Lili <lili.cui@intel.com> | 2024-09-19 14:38:16 +0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2024-09-21 05:19:16 +0800 |
commit | d774bf9b3623239a1cfa729afcf048a15da657d3 (patch) | |
tree | 847634d920f3df46b1872fa558bff2adbef01bb6 /gas/configure | |
parent | ae6a4c3f1d5caeba962d2c1748a8d2b3bebb1007 (diff) | |
download | fsf-binutils-gdb-d774bf9b3623239a1cfa729afcf048a15da657d3.zip fsf-binutils-gdb-d774bf9b3623239a1cfa729afcf048a15da657d3.tar.gz fsf-binutils-gdb-d774bf9b3623239a1cfa729afcf048a15da657d3.tar.bz2 |
x86: Add tls check in gas
Assembler shouldn't accept invalid TLS instructions, TLS relocations
can only be used with specific instructions as specified in TLS psABI
and linker issues an error when TLS relocations are used with wrong
instructions or format. Since it is inconvenient for gcc to rely on
linker to report errors, adding TLS check in the assembler stage so
that gcc can know TLS errors earlier.
gas/ChangeLog:
PR gas/32022
* config.in: Regenerate.
* config/tc-i386.c
*(enum x86_tls_error_type): New.
*(struct _i386_insn): Added has_gotrel to indicate whether TLS
relocations need to be checked.
(x86_check_tls_relocation): Added a new function to check TLS
relocation.
(x86_report_tls_error): Created a new function to report TLS error.
(i386_assemble): Handle x86_check_tls_relocation.
(lex_got): Set i.has_gotrel.
(OPTION_MTLS_CHECK): Added a new option to contrl TLS check.
(struct option): Ditto.
(md_parse_option): Ditto.
(md_show_usage): Ditto.
* configure.ac: Added a new option to check TLS relocation by
default.
* configure: Regenerated.
* doc/c-i386.texi: Document -mtls-check=.
* testsuite/gas/i386/i386.exp: Added new tests.
* testsuite/gas/i386/ilp32/ilp32.exp: Ditto.
* testsuite/gas/i386/ilp32/reloc64.d: Disable TLS check for it.
* testsuite/gas/i386/ilp32/x32-tls.d: Ditto.
* testsuite/gas/i386/inval-tls.l: Added more test cases.
* testsuite/gas/i386/inval-tls.s: Ditto.
* testsuite/gas/i386/reloc32.d: Disable TLS check for it.
* testsuite/gas/i386/reloc64.d: Ditto.
* testsuite/gas/i386/x86-64-inval-tls.l: Added more test cases.
* testsuite/gas/i386/x86-64-inval-tls.s: Ditto.
* testsuite/gas/i386/x86-64.exp: Added new tests.
* testsuite/gas/i386/ilp32/x32-inval-tls.l: New test.
* testsuite/gas/i386/ilp32/x32-inval-tls.s: Ditto.
* testsuite/gas/i386/ilp32/x86-64-tls.d: Ditto.
* testsuite/gas/i386/tls.d: Ditto.
* testsuite/gas/i386/tls.s: Ditto.
* testsuite/gas/i386/x86-64-tls.d: Ditto.
* testsuite/gas/i386/x86-64-tls.s: Ditto.
ld/ChangeLog:
PR gas/32022
* testsuite/ld-i386/tlsgdesc1.d: Disable TLS check for it.
* testsuite/ld-i386/tlsgdesc2.d: Ditto.
* testsuite/ld-i386/tlsie2.d: Ditto.
* testsuite/ld-i386/tlsie3.d: Ditto.
* testsuite/ld-i386/tlsie4.d: Ditto.
* testsuite/ld-i386/tlsie5.d: Ditto.
* testsuite/ld-i386/tlsgdesc3.d: Ditto.
* testsuite/ld-x86-64/tlsdesc3.d: Ditto.
* testsuite/ld-x86-64/tlsdesc4.d: Ditto.
* testsuite/ld-x86-64/tlsie2.d: Ditto.
* testsuite/ld-x86-64/tlsie3.d: Ditto.
* testsuite/ld-x86-64/tlsie5.d: Ditto.
* testsuite/ld-x86-64/tlsdesc5.d: Ditto.
Diffstat (limited to 'gas/configure')
-rwxr-xr-x | gas/configure | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/gas/configure b/gas/configure index 6b96d3a..be37f31 100755 --- a/gas/configure +++ b/gas/configure @@ -818,6 +818,7 @@ enable_checking enable_compressed_debug_sections enable_default_compressed_debug_sections_algorithm enable_x86_relax_relocations +enable_x86_tls_check enable_elf_stt_common enable_generate_build_notes enable_mips_fix_loongson3_llsc @@ -1493,6 +1494,7 @@ Optional Features: --enable-compressed-debug-sections. --enable-x86-relax-relocations generate x86 relax relocations by default + --enable-x86-tls-check check x86 TLS relocation by default --enable-elf-stt-common generate ELF common symbols with STT_COMMON type by default --enable-generate-build-notes @@ -10775,7 +10777,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10778 "configure" +#line 10780 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10881,7 +10883,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10884 "configure" +#line 10886 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11575,6 +11577,17 @@ if test "${enable_x86_relax_relocations+set}" = set; then : esac fi +# PR gas/32022 +# Decide if x86 assembler should check TLS relocation. +ac_default_x86_tls_check=unset +# Provide a configure time option to override our default. +# Check whether --enable-x86_tls_check was given. +if test "${enable_x86_tls_check+set}" = set; then : + enableval=$enable_x86_tls_check; case "${enableval}" in + no) ac_default_x86_tls_check=0 ;; +esac +fi + # Decide if ELF assembler should generate common symbols with the # STT_COMMON type. ac_default_elf_stt_common=unset @@ -12698,6 +12711,15 @@ cat >>confdefs.h <<_ACEOF _ACEOF +if test ${ac_default_x86_tls_check} = unset; then + ac_default_x86_tls_check=1 +fi + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_X86_TLS_CHECK $ac_default_x86_tls_check +_ACEOF + + if test ${ac_default_elf_stt_common} = unset; then ac_default_elf_stt_common=0 fi |