aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2024-01-09 12:23:27 -0800
committerH.J. Lu <hjl.tools@gmail.com>2024-01-10 05:20:20 -0800
commit874214db624a8e6c5d2dbe47419fab126f330d68 (patch)
tree2fe3f54cb138d9046767f101643c8c14e931355a /sysdeps/i386
parent7d544dd049a2e3f1480b668f51b72dcc89e376ab (diff)
downloadglibc-874214db624a8e6c5d2dbe47419fab126f330d68.zip
glibc-874214db624a8e6c5d2dbe47419fab126f330d68.tar.gz
glibc-874214db624a8e6c5d2dbe47419fab126f330d68.tar.bz2
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.h11
-rw-r--r--sysdeps/i386/dl-trampoline.S69
2 files changed, 2 insertions, 78 deletions
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index c69ae16..fc1ef96 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 2632020..6c14d46 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