On Mon, Sep 11, 2017 at 01:18:16PM +0200, Gerd Hoffmann wrote: [...]
--- a/src/romlayout.S +++ b/src/romlayout.S @@ -434,7 +434,7 @@ entry_sercon: pushl $1f retl 1: cmpl %esp, %eax
jne 4f
jne 5f cmpb $0, sercon_enable // Test that sercon is enabled je 3f
@@ -449,15 +449,17 @@ entry_sercon:
// sercon disabled - verify not 0x03 modeset and otherwise exit
3: popl %eax
cmpw $0x0007, %ax
je 4f cmpw $0x0003, %ax
jne 5f
pushl %eax
jg 6f
+4: pushl %eax jmp 2b
// Running on broken x86emu - restore stack and exit
-4: movl %eax, %esp +5: movl %eax, %esp popl %eax -5: popw %ds +6: popw %ds iretw
The asm could be simplified a bit:
// Serial console "hooked vga" entry point DECLFUNC entry_sercon entry_sercon: // Setup for chain loading to real vga handler pushfw pushl %cs:sercon_real_vga_handler
// Set %ds to zonelow segment cli cld pushw %ds pushl %eax movl $_zonelow_seg, %eax movl %eax, %ds
// Test if the sercon handler can be called movl %esp, %eax // Test for broken x86emu pushl $1f retl 1: cmpl %esp, %eax jne 4f cmpb $0, sercon_enable // Test that sercon is enabled je 3f
// Call handle_sercon() popl %eax popw %ds 2: pushl $handle_sercon #if CONFIG_ENTRY_EXTRASTACK jmp irqentry_arg_extrastack #else jmp irqentry_arg #endif
// sercon disabled - check for legacy text modeset and otherwise exit 3: popl %eax popw %ds cmpw $0x0007, %ax jle 2b iretw
// Running on broken x86emu - restore stack and exit 4: movl %eax, %esp popl %eax popw %ds iretw