48 lines
1.5 KiB
Plaintext
48 lines
1.5 KiB
Plaintext
--- msdos/dpmi.c.orig 1999-02-25 18:32:56.000000000 +0100
|
|
+++ msdos/dpmi.c 2003-12-31 04:57:46.000000000 +0100
|
|
@@ -20,6 +20,7 @@
|
|
#include "process.h"
|
|
#include "callback.h"
|
|
#include "debug.h"
|
|
+#include "stackframe.h"
|
|
|
|
#define DOS_GET_DRIVE(reg) ((reg) ? (reg) - 1 : DRIVE_GetCurrentDrive())
|
|
|
|
@@ -211,22 +212,24 @@ static void DPMI_CallRMCBProc( CONTEXT *
|
|
* real-mode call structure. */
|
|
if (flag & 1) {
|
|
/* 32-bit DPMI client */
|
|
- __asm__ __volatile__("
|
|
- pushl %%es
|
|
- pushl %%ds
|
|
- pushfl
|
|
- movl %4,%%es
|
|
- movl %3,%%ds
|
|
- lcall %2
|
|
- popl %%ds
|
|
- movl %%es,%0
|
|
- popl %%es
|
|
- "
|
|
+ __asm__ __volatile__("\n"
|
|
+" pushl %%si\n"
|
|
+" pushl %%es\n"
|
|
+" pushl %%ds\n"
|
|
+" pushfl\n"
|
|
+" movl %4,%%es\n"
|
|
+" movl %3,%%ds\n"
|
|
+" lcall %2\n"
|
|
+" popl %%ds\n"
|
|
+" movl %%es,%0\n"
|
|
+" popl %%es\n"
|
|
+" popl %%si\n"
|
|
+" "
|
|
: "=g" (es), "=D" (edi)
|
|
: "m" (rmcb->proc_ofs),
|
|
"g" (ss), "g" (rmcb->regs_sel),
|
|
"S" (ESP_reg(context)), "D" (rmcb->regs_ofs)
|
|
- : "eax", "ecx", "edx", "esi", "ebp" );
|
|
+ : "eax", "ecx", "edx", "ebp" );
|
|
} else {
|
|
/* 16-bit DPMI client */
|
|
CONTEXT ctx = *context;
|