diff options
Diffstat (limited to 'sysdeps/i386/dl-tlsdesc.S')
-rw-r--r-- | sysdeps/i386/dl-tlsdesc.S | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sysdeps/i386/dl-tlsdesc.S b/sysdeps/i386/dl-tlsdesc.S index 7c189ab93d..128f0af318 100644 --- a/sysdeps/i386/dl-tlsdesc.S +++ b/sysdeps/i386/dl-tlsdesc.S @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. i386 version. - Copyright (C) 2004-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -37,6 +37,7 @@ cfi_startproc .align 16 _dl_tlsdesc_return: + _CET_ENDBR movl 4(%eax), %eax ret cfi_endproc @@ -58,6 +59,7 @@ _dl_tlsdesc_return: cfi_startproc .align 16 _dl_tlsdesc_undefweak: + _CET_ENDBR movl 4(%eax), %eax subl %gs:0, %eax ret @@ -99,6 +101,7 @@ _dl_tlsdesc_dynamic (struct tlsdesc *tdp) cfi_startproc .align 16 _dl_tlsdesc_dynamic: + _CET_ENDBR /* Like all TLS resolvers, preserve call-clobbered registers. We need two scratch regs anyway. */ subl $28, %esp @@ -126,7 +129,11 @@ _dl_tlsdesc_dynamic: .p2align 4,,7 .Lslow: cfi_adjust_cfa_offset (28) +#ifdef NO_RTLD_HIDDEN + call JUMPTARGET (___tls_get_addr) +#else call HIDDEN_JUMPTARGET (___tls_get_addr) +#endif jmp .Lret cfi_endproc .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic @@ -150,6 +157,7 @@ _dl_tlsdesc_dynamic: .align 16 _dl_tlsdesc_resolve_abs_plus_addend: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -188,6 +196,7 @@ _dl_tlsdesc_resolve_abs_plus_addend: .align 16 _dl_tlsdesc_resolve_rel: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -226,6 +235,7 @@ _dl_tlsdesc_resolve_rel: .align 16 _dl_tlsdesc_resolve_rela: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx @@ -264,6 +274,7 @@ _dl_tlsdesc_resolve_rela: .align 16 _dl_tlsdesc_resolve_hold: 0: + _CET_ENDBR pushl %eax cfi_adjust_cfa_offset (4) pushl %ecx |