mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
x86/boot/compressed: Avoid touching ECX in startup32_set_idt_entry()
commit 6aac80a8da upstream.
Avoid touching register %ecx in startup32_set_idt_entry(), by folding
the MOV, SHL and ORL instructions into a single ORL which no longer
requires a temp register.
This permits ECX to be used as a function argument in a subsequent
patch.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/20221122161017.2426828-10-ardb@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
88035744b9
commit
530a4271b7
@@ -749,7 +749,6 @@ SYM_DATA_END_LABEL(boot32_idt, SYM_L_GLOBAL, boot32_idt_end)
|
||||
*/
|
||||
SYM_FUNC_START(startup32_set_idt_entry)
|
||||
push %ebx
|
||||
push %ecx
|
||||
|
||||
/* IDT entry address to %ebx */
|
||||
leal rva(boot32_idt)(%ebp), %ebx
|
||||
@@ -758,10 +757,8 @@ SYM_FUNC_START(startup32_set_idt_entry)
|
||||
|
||||
/* Build IDT entry, lower 4 bytes */
|
||||
movl %eax, %edx
|
||||
andl $0x0000ffff, %edx # Target code segment offset [15:0]
|
||||
movl $__KERNEL32_CS, %ecx # Target code segment selector
|
||||
shl $16, %ecx
|
||||
orl %ecx, %edx
|
||||
andl $0x0000ffff, %edx # Target code segment offset [15:0]
|
||||
orl $(__KERNEL32_CS << 16), %edx # Target code segment selector
|
||||
|
||||
/* Store lower 4 bytes to IDT */
|
||||
movl %edx, (%ebx)
|
||||
@@ -774,7 +771,6 @@ SYM_FUNC_START(startup32_set_idt_entry)
|
||||
/* Store upper 4 bytes to IDT */
|
||||
movl %edx, 4(%ebx)
|
||||
|
||||
pop %ecx
|
||||
pop %ebx
|
||||
RET
|
||||
SYM_FUNC_END(startup32_set_idt_entry)
|
||||
|
||||
Reference in New Issue
Block a user