mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
7c6dd961d0
With 'GNU assembler (GNU Binutils for Debian) 2.39.90.20221231' the
build now reports:
arch/x86/realmode/rm/../../boot/bioscall.S: Assembler messages:
arch/x86/realmode/rm/../../boot/bioscall.S:35: Warning: found `movsd'; assuming `movsl' was meant
arch/x86/realmode/rm/../../boot/bioscall.S:70: Warning: found `movsd'; assuming `movsl' was meant
arch/x86/boot/bioscall.S: Assembler messages:
arch/x86/boot/bioscall.S:35: Warning: found `movsd'; assuming `movsl' was meant
arch/x86/boot/bioscall.S:70: Warning: found `movsd'; assuming `movsl' was meant
Which is due to:
PR gas/29525
Note that with the dropped CMPSD and MOVSD Intel Syntax string insn
templates taking operands, mixed IsString/non-IsString template groups
(with memory operands) cannot occur anymore. With that
maybe_adjust_templates() becomes unnecessary (and is hence being
removed).
More details: https://sourceware.org/bugzilla/show_bug.cgi?id=29525
Borislav Petkov further explains:
" the particular problem here is is that the 'd' suffix is
"conflicting" in the sense that you can have SSE mnemonics like movsD %xmm...
and the same thing also for string ops (which is the case here) so apparently
the agreement in binutils land is to use the always accepted suffixes 'l' or 'q'
and phase out 'd' slowly... "
Fixes: 7a734e7dd9
("x86, setup: "glove box" BIOS calls -- infrastructure")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/Y71I3Ex2pvIxMpsP@hirez.programming.kicks-ass.net
80 lines
1.4 KiB
ArmAsm
80 lines
1.4 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/* -----------------------------------------------------------------------
|
|
*
|
|
* Copyright 2009-2014 Intel Corporation; author H. Peter Anvin
|
|
*
|
|
* ----------------------------------------------------------------------- */
|
|
|
|
/*
|
|
* "Glove box" for BIOS calls. Avoids the constant problems with BIOSes
|
|
* touching registers they shouldn't be.
|
|
*/
|
|
|
|
.code16
|
|
.section ".inittext","ax"
|
|
.globl intcall
|
|
.type intcall, @function
|
|
intcall:
|
|
/* Self-modify the INT instruction. Ugly, but works. */
|
|
cmpb %al, 3f
|
|
je 1f
|
|
movb %al, 3f
|
|
jmp 1f /* Synchronize pipeline */
|
|
1:
|
|
/* Save state */
|
|
pushfl
|
|
pushw %fs
|
|
pushw %gs
|
|
pushal
|
|
|
|
/* Copy input state to stack frame */
|
|
subw $44, %sp
|
|
movw %dx, %si
|
|
movw %sp, %di
|
|
movw $11, %cx
|
|
rep; movsl
|
|
|
|
/* Pop full state from the stack */
|
|
popal
|
|
popw %gs
|
|
popw %fs
|
|
popw %es
|
|
popw %ds
|
|
popfl
|
|
|
|
/* Actual INT */
|
|
.byte 0xcd /* INT opcode */
|
|
3: .byte 0
|
|
|
|
/* Push full state to the stack */
|
|
pushfl
|
|
pushw %ds
|
|
pushw %es
|
|
pushw %fs
|
|
pushw %gs
|
|
pushal
|
|
|
|
/* Re-establish C environment invariants */
|
|
cld
|
|
movzwl %sp, %esp
|
|
movw %cs, %ax
|
|
movw %ax, %ds
|
|
movw %ax, %es
|
|
|
|
/* Copy output state from stack frame */
|
|
movw 68(%esp), %di /* Original %cx == 3rd argument */
|
|
andw %di, %di
|
|
jz 4f
|
|
movw %sp, %si
|
|
movw $11, %cx
|
|
rep; movsl
|
|
4: addw $44, %sp
|
|
|
|
/* Restore state and return */
|
|
popal
|
|
popw %gs
|
|
popw %fs
|
|
popfl
|
|
retl
|
|
.size intcall, .-intcall
|