]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
x86: Check invalid TLS descriptor call
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 29 Aug 2024 15:47:00 +0000 (08:47 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 30 Aug 2024 12:18:10 +0000 (05:18 -0700)
commit67e30b15212adc1502b898a1ca224fdf65dc110d
treeb5a4bd115a06aa54c301944401772e58d0ab0122
parentca6f0a61e78dd3b7f26dcffa3ec21eb81b6c525c
x86: Check invalid TLS descriptor call

TLS descriptor call,

call *x@tlsdesc(%rax)

or

call *x@tlsdesc(%eax)

calls _dl_tlsdesc_return which expects that RAX/EAX points to the TLS
descriptor.  Update x86 linker to issue an error with or without TLS
transition.

bfd/

PR ld/32123
* elf32-i386.c (elf_i386_check_tls_transition): Move
R_386_TLS_DESC_CALL to ...
(elf_i386_tls_transition): Here.
* elf64-x86-64.c (elf_x86_64_check_tls_transition): Move.
R_X86_64_TLSDESC_CALL check to ...
(elf_x86_64_tls_transition): Here.

ld/

PR ld/32123
* testsuite/ld-i386/i386.exp: Run tlsgdesc3.
* testsuite/ld-i386/tlsgdesc3.d: New file.
* testsuite/ld-x86-64/tlsdesc5.d: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run tlsdesc5.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
bfd/elf32-i386.c
bfd/elf64-x86-64.c
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/tlsgdesc3.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/tlsdesc5.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp