x86-64: Add ENDBR64 to the TLSDESC PLT entry
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 25 Mar 2018 12:02:17 +0000 (05:02 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 25 Mar 2018 12:02:32 +0000 (05:02 -0700)
commitbf54968b128a2133174d81c438d402ecfaf83042
treefadfbd0205867e75b54346add9cb3e22eef3df4b
parentb3ee71e749f3c93c51cd6fb3fed51ffd54243117
x86-64: Add ENDBR64 to the TLSDESC PLT entry

The TLSDESC entry in a lazy procedure linkage table is called indirectly
with "callq *(%rax)".  This patch adds an ENDBR64 to support indirect
branch tracking in Intel CET.  The TLSDESC PLT entry now looks like:

0xf3, 0x0f, 0x1e, 0xfa,  /* endbr64             */
0xff, 0x35, 8, 0, 0, 0,  /* pushq GOT+8(%rip)   */
0xff, 0x25, 16, 0, 0, 0  /* jmpq *GOT+TDG(%rip)  */

The BND prefix isn't needed since MPX isn't used for TLSDESC.

bfd/

PR ld/23000
* elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Add
ENDBR64 to the TLSDESC PLT entry.

ld/

PR ld/23000
* testsuite/ld-x86-64/tlsdesc.pd: Updated.
bfd/ChangeLog
bfd/elf64-x86-64.c
ld/ChangeLog
ld/testsuite/ld-x86-64/tlsdesc.pd