]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
x86: Add tls check in gas
authorCui, Lili <lili.cui@intel.com>
Thu, 19 Sep 2024 06:38:16 +0000 (14:38 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Sep 2024 21:19:16 +0000 (05:19 +0800)
commitd774bf9b3623239a1cfa729afcf048a15da657d3
tree847634d920f3df46b1872fa558bff2adbef01bb6
parentae6a4c3f1d5caeba962d2c1748a8d2b3bebb1007
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.
36 files changed:
gas/config.in
gas/config/tc-i386.c
gas/configure
gas/configure.ac
gas/doc/c-i386.texi
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/ilp32/ilp32.exp
gas/testsuite/gas/i386/ilp32/reloc64.d
gas/testsuite/gas/i386/ilp32/x32-inval-tls.l [new file with mode: 0644]
gas/testsuite/gas/i386/ilp32/x32-inval-tls.s [new file with mode: 0644]
gas/testsuite/gas/i386/ilp32/x32-tls.d
gas/testsuite/gas/i386/ilp32/x86-64-tls.d [new file with mode: 0644]
gas/testsuite/gas/i386/inval-tls.l
gas/testsuite/gas/i386/inval-tls.s
gas/testsuite/gas/i386/reloc32.d
gas/testsuite/gas/i386/reloc64.d
gas/testsuite/gas/i386/tls.d [new file with mode: 0644]
gas/testsuite/gas/i386/tls.s [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-inval-tls.l
gas/testsuite/gas/i386/x86-64-inval-tls.s
gas/testsuite/gas/i386/x86-64-tls.d [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-tls.s [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64.exp
ld/testsuite/ld-i386/tlsgdesc1.d
ld/testsuite/ld-i386/tlsgdesc2.d
ld/testsuite/ld-i386/tlsgdesc3.d
ld/testsuite/ld-i386/tlsie2.d
ld/testsuite/ld-i386/tlsie3.d
ld/testsuite/ld-i386/tlsie4.d
ld/testsuite/ld-i386/tlsie5.d
ld/testsuite/ld-x86-64/tlsdesc3.d
ld/testsuite/ld-x86-64/tlsdesc4.d
ld/testsuite/ld-x86-64/tlsdesc5.d
ld/testsuite/ld-x86-64/tlsie2.d
ld/testsuite/ld-x86-64/tlsie3.d
ld/testsuite/ld-x86-64/tlsie5.d