-
Notifications
You must be signed in to change notification settings - Fork 44
Open
Labels
bugSomething isn't workingSomething isn't working
Description
This is XMScopy, a varargs function that's called with the contents for an XMS move structure:
Lines 97 to 125 in e24bd7e
| #ifdef __GNUC__ | |
| __attribute__((noinline)) | |
| #endif | |
| static int XMScopy( | |
| long length, ... | |
| /* short shandle, | |
| long soffset, | |
| short dhandle, | |
| long doffset */ | |
| ) | |
| { | |
| assert(XMSdriverAdress); | |
| /* asm push si; | |
| asm lea si,length | |
| asm mov ah,0bh; */ | |
| #if defined(__TURBOC__) | |
| _SI = (unsigned)&length; | |
| _AH = 0xb; | |
| XMSrequest(); | |
| /* asm pop si; */ | |
| return _AX; /* shut up warning */ | |
| #elif defined(__GNUC__) | |
| return XMSrequest(0xb00, 0, &length); | |
| #else | |
| return XMSdriverAdress(0xb00, 0, &length); | |
| #endif | |
| } |
However, in my gcc build this doesn't work. Here's an excerpt from debugging:
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A72 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B67 NV UP EI PL NZ AC PO NC
C00F:0B67 36C706D00F0100 mov word [ss:0FD0], 0001 SS:0FD0=0000
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A72 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B6E NV UP EI PL NZ AC PO NC
C00F:0B6E 36C606C60F02 mov byte [ss:0FC6], 02 SS:0FC6=01
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A72 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B74 NV UP EI PL NZ AC PO NC
C00F:0B74 837EE600 cmp word [bp-1A], +00 SS:3A76=0622
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A72 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B78 NV UP EI PL NZ NA PE NC
C00F:0B78 7421 jz 0B9B not jumping
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A72 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B7A NV UP EI PL NZ NA PE NC
C00F:0B7A 06 push es
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A70 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B7B NV UP EI PL NZ NA PE NC
C00F:0B7B 06 push es
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A6E BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B7C NV UP EI PL NZ NA PE NC
C00F:0B7C FF76EA push word [bp-16] SS:3A7A=0001
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A6C BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B7F NV UP EI PL NZ NA PE NC
C00F:0B7F FF76E4 push word [bp-1C] SS:3A74=F34C
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A6A BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B82 NV UP EI PL NZ NA PE NC
C00F:0B82 06 push es
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A68 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B83 NV UP EI PL NZ NA PE NC
C00F:0B83 06 push es
-
AX=0001 BX=C001 CX=6220 DX=0000 SP=3A66 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B84 NV UP EI PL NZ NA PE NC
C00F:0B84 91 xchg ax, cx
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A66 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B85 NV UP EI PL NZ NA PE NC
C00F:0B85 16 push ss
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A64 BP=3A90 SI=C00F DI=1D60
DS=C00F ES=0000 SS=CE18 CS=C00F IP=0B86 NV UP EI PL NZ NA PE NC
C00F:0B86 1F pop ds
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A66 BP=3A90 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=0B87 NV UP EI PL NZ NA PE NC
C00F:0B87 E86BFE call 09F5
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A64 BP=3A90 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09F5 NV UP EI PL NZ NA PE NC
C00F:09F5 56 push si
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A62 BP=3A90 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09F6 NV UP EI PL NZ NA PE NC
C00F:09F6 55 push bp
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A60 BP=3A90 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09F7 NV UP EI PL NZ NA PE NC
C00F:09F7 89E5 mov bp, sp
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A60 BP=3A60 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09F9 NV UP EI PL NZ NA PE NC
C00F:09F9 52 push dx
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A5E BP=3A60 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09FA NV UP EI PL NZ NA PE NC
C00F:09FA 50 push ax
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A5C BP=3A60 SI=C00F DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09FB NV UP EI PL NZ NA PE NC
C00F:09FB 8D76FC lea si, [bp-04]
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A5C BP=3A60 SI=3A5C DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=09FE NV UP EI PL NZ NA PE NC
C00F:09FE 31D2 xor dx, dx
-
AX=6220 BX=C001 CX=0001 DX=0000 SP=3A5C BP=3A60 SI=3A5C DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=0A00 NV UP EI PL ZR NA PE NC
C00F:0A00 B8000B mov ax, 0B00
-
AX=0B00 BX=C001 CX=0001 DX=0000 SP=3A5C BP=3A60 SI=3A5C DI=1D60
DS=CE18 ES=0000 SS=CE18 CS=C00F IP=0A03 NV UP EI PL ZR NA PE NC
C00F:0A03 2EFF1EC008 call far [cs:08C0] CS:08C0=F000:F685
-dw ds:si l 10
header 0 2 4 6 8 A C E 0123456789ABCDEF
CE18:3A50 - 6220 0000 b..
CE18:3A60 3A90 C00F 0B8A 0000-0000 F34C .:........L.
-
Note the lea si, [bp-04] which points not at the function parameters on the stack but rather at a local variable initialised from the length parameter.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working