diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2024-01-09 12:23:27 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2024-01-10 05:20:20 -0800 |
commit | 874214db624a8e6c5d2dbe47419fab126f330d68 (patch) | |
tree | 2fe3f54cb138d9046767f101643c8c14e931355a /sysdeps/i386 | |
parent | 7d544dd049a2e3f1480b668f51b72dcc89e376ab (diff) | |
download | glibc-874214db624a8e6c5d2dbe47419fab126f330d68.tar glibc-874214db624a8e6c5d2dbe47419fab126f330d68.tar.gz glibc-874214db624a8e6c5d2dbe47419fab126f330d68.tar.bz2 glibc-874214db624a8e6c5d2dbe47419fab126f330d68.zip |
i386: Remove CET support bits
1. Remove _dl_runtime_resolve_shstk and _dl_runtime_profile_shstk.
2. Move CET offsets from x86 cpu-features-offsets.sym to x86-64
features-offsets.sym.
3. Rename x86 cet-control.h to x86-64 feature-control.h since it is only
for x86-64 and also used for PLT rewrite.
4. Add x86-64 ldsodefs.h to include feature-control.h.
5. Change TUNABLE_CALLBACK (set_plt_rewrite) to x86-64 only.
6. Move x86 dl-procruntime.c to x86-64.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/i386')
-rw-r--r-- | sysdeps/i386/dl-machine.h | 11 | ||||
-rw-r--r-- | sysdeps/i386/dl-trampoline.S | 69 |
2 files changed, 2 insertions, 78 deletions
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index c69ae165ac..fc1ef96587 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -65,9 +65,6 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], extern void _dl_runtime_profile (Elf32_Word) attribute_hidden; extern void _dl_runtime_resolve_shstk (Elf32_Word) attribute_hidden; extern void _dl_runtime_profile_shstk (Elf32_Word) attribute_hidden; - /* Check if SHSTK is enabled by kernel. */ - bool shstk_enabled - = (GL(dl_x86_feature_1) & GNU_PROPERTY_X86_FEATURE_1_SHSTK) != 0; if (l->l_info[DT_JMPREL] && lazy) { @@ -95,9 +92,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], #ifdef SHARED if (__glibc_unlikely (profile)) { - got[2] = (shstk_enabled - ? (Elf32_Addr) &_dl_runtime_profile_shstk - : (Elf32_Addr) &_dl_runtime_profile); + got[2] = (Elf32_Addr) &_dl_runtime_profile; if (GLRO(dl_profile) != NULL && _dl_name_match_p (GLRO(dl_profile), l)) @@ -109,9 +104,7 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], #endif /* This function will get called to fix up the GOT entry indicated by the offset on the stack, and then jump to the resolved address. */ - got[2] = (shstk_enabled - ? (Elf32_Addr) &_dl_runtime_resolve_shstk - : (Elf32_Addr) &_dl_runtime_resolve); + got[2] = (Elf32_Addr) &_dl_runtime_resolve; } return lazy; diff --git a/sysdeps/i386/dl-trampoline.S b/sysdeps/i386/dl-trampoline.S index 2632020145..6c14d463b6 100644 --- a/sysdeps/i386/dl-trampoline.S +++ b/sysdeps/i386/dl-trampoline.S @@ -44,76 +44,7 @@ _dl_runtime_resolve: cfi_endproc .size _dl_runtime_resolve, .-_dl_runtime_resolve -# The SHSTK compatible version. - .text - .globl _dl_runtime_resolve_shstk - .type _dl_runtime_resolve_shstk, @function - cfi_startproc - .align 16 -_dl_runtime_resolve_shstk: - cfi_adjust_cfa_offset (8) - pushl %eax # Preserve registers otherwise clobbered. - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl 12(%esp), %edx # Copy args pushed by PLT in register. Note - movl 8(%esp), %eax # that `fixup' takes its parameters in regs. - call _dl_fixup # Call resolver. - movl (%esp), %edx # Get register content back. - movl %eax, %ecx # Store the function address. - movl 4(%esp), %eax # Get register content back. - addl $16, %esp # Adjust stack: PLT1 + PLT2 + %eax + %edx - cfi_adjust_cfa_offset (-16) - jmp *%ecx # Jump to function address. - cfi_endproc - .size _dl_runtime_resolve_shstk, .-_dl_runtime_resolve_shstk - #if !defined PROF && defined SHARED -# The SHSTK compatible version. - .globl _dl_runtime_profile_shstk - .type _dl_runtime_profile_shstk, @function - cfi_startproc - .align 16 -_dl_runtime_profile_shstk: - cfi_adjust_cfa_offset (8) - pushl %esp - cfi_adjust_cfa_offset (4) - addl $8, (%esp) # Account for the pushed PLT data - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %eax # Preserve registers otherwise clobbered. - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - pushl %edx - cfi_adjust_cfa_offset (4) - movl %esp, %ecx - subl $8, %esp - cfi_adjust_cfa_offset (8) - movl $-1, 4(%esp) - leal 4(%esp), %edx - movl %edx, (%esp) - pushl %ecx # Address of the register structure - cfi_adjust_cfa_offset (4) - movl 40(%esp), %ecx # Load return address - movl 36(%esp), %edx # Copy args pushed by PLT in register. Note - movl 32(%esp), %eax # that `fixup' takes its parameters in regs. - call _dl_profile_fixup # Call resolver. - cfi_adjust_cfa_offset (-8) - movl (%esp), %edx - testl %edx, %edx - jns 1f - movl 4(%esp), %edx # Get register content back. - movl %eax, %ecx # Store the function address. - movl 12(%esp), %eax # Get register content back. - # Adjust stack: PLT1 + PLT2 + %esp + %ebp + %eax + %ecx + %edx - # + free. - addl $32, %esp - cfi_adjust_cfa_offset (-32) - jmp *%ecx # Jump to function address. - cfi_endproc - .size _dl_runtime_profile_shstk, .-_dl_runtime_profile_shstk - .globl _dl_runtime_profile .type _dl_runtime_profile, @function cfi_startproc |