"pushl %0\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addw $4, %%sp\n\t"
+ "clc\n\t"
"call patch_cf\n\t"
"iret\n\t" )
: : "i" ( int20 ) );
"pushl %0\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addw $4, %%sp\n\t"
+ "clc\n\t"
"call patch_cf\n\t"
"iret\n\t" )
: : "i" ( int21 ) );
"pushl %0\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addw $4, %%sp\n\t"
+ "clc\n\t"
"call patch_cf\n\t"
"iret\n\t" )
: : "i" ( int22) );
"pushl $_dump_regs\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addr32 leal 4(%%esp), %%esp\n\t"
"ret\n\t" ) : : );
printf ( "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n"
"pushl %0\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addw $4, %%sp\n\t"
"\n1:\n\t"
"popfw\n\t"
"ljmp *%%cs:int16_vector\n\t" )
pushl $pxe_api_call
pushw %cs
call prot_call
- addl $4, %esp
lret
.size pxenv_entry, . - pxenv_entry
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
movw %ax, (prot_call_vector+2)
pushl $relocate
lcall *prot_call_vector
- popl %edx /* discard */
/* Copy code to new location */
progress " copy\n"
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
pushl $main
pushw %cs
call prot_call
- popl %ecx /* discard */
/* Uninstall iPXE */
call uninstall
pushl $main
pushw %cs
call prot_call
- popl %eax /* discard */
/* Set up flat real mode for return to BIOS */
call flatten_real_mode
pushw %ax
pushw $prot_call
lret
-1: popw %bx /* discard */
- popw %bx /* discard */
- /* Restore registers and return */
+1: /* Restore registers and return */
popw %bx
popw %es
popw %ds
pushl $init_idt
pushw %cs
call prot_call
- popl %eax /* discard */
/* Restore registers */
negl %edi
*
* Example usage:
* pushl $pxe_api_call
+ * pushw %cs
* call prot_call
- * addw $4, %sp
* to call in to the C function
* void pxe_api_call ( struct i386_all_regs *ix86 );
****************************************************************************
*/
addr32 movl -20(%esp), %esp
popfl
- lret
+ lret $4
/****************************************************************************
* real_call (protected-mode near call, 32-bit virtual return address)
pushl $flatten_dummy
pushw %cs
call prot_call
- addw $4, %sp
/* Restore GDT */
movb $0x00, real_cs + 6
movb $0x00, real_ds + 6
"pushl %k3\n\t"
"pushw %%cs\n\t"
"call prot_call\n\t"
- "addw $4, %%sp\n\t"
"rdtsc\n\t" )
: "=a" ( stopped ), "=d" ( discard_d ),
"=R" ( started )