From 874214db624a8e6c5d2dbe47419fab126f330d68 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 9 Jan 2024 12:23:27 -0800 Subject: 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 --- sysdeps/i386/dl-machine.h | 11 ++----- sysdeps/i386/dl-trampoline.S | 69 -------------------------------------------- 2 files changed, 2 insertions(+), 78 deletions(-) (limited to 'sysdeps/i386') 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 -- cgit v1.2.3