Skip to content

Commit 1a3d347

Browse files
bugfix: don't modify saved SP in PSP:2Eh if saved SS isn't the debugger's.
1 parent 7b72cd6 commit 1a3d347

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

HISTORY.TXT

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,12 @@
226226
- if InDOS flag is set, a '!' is preceding the debugger prompt.
227227
- BIOS used when waiting for a key in help msg display.
228228
- 'e' cmd uses BIOS if InDOS flag set.
229-
1.28 [14 Februar 2021]
230-
- bugfix 'e' cmd: used wrong offset when reading from 32-bit segments.
231-
- bugfix 'd' cmd: hiword(ecx) wasn't cleared, resulting in a "default"
232-
length for 32-bit segment dump > 128.
229+
1.28 [16 Februar 2021]
230+
- DEBUGX bugfix e-cmd: used wrong offset when reading from 32-bit
231+
segments.
232+
- DEBUGX bugfix d-cmd: hiword(ecx) wasn't cleared, resulting in a
233+
"default" length for 32-bit segment dump > 128.
234+
- DEBUGX bugfix g/t/p-cmd: if debuggee is stopped in protected-mode,
235+
saved stack at debugger's PSP:[2Eh] must not be "adjusted".
233236
- added debug displays (created if _DEBUG is defined)
234237

src/DEBUG.ASM

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ sym db text,10,0
157157
CONST ends
158158
pushcontext cpu
159159
.386
160+
ifb <args>
161+
invoke dprintf, offset sym
162+
else
160163
invoke dprintf, offset sym, args
164+
endif
161165
popcontext cpu
162166
endm
163167
else
@@ -4822,6 +4826,8 @@ back_after_switch:
48224826
xor [regs.msw],-1
48234827
retn
48244828

4829+
;--- save/restore task state in ES:(E)DI
4830+
48254831
sr_state::
48264832
sizeprf ;xor edi,edi
48274833
xor di,di ;clears hiword EDI if cpu >= 386
@@ -4884,6 +4890,7 @@ if ?PM
48844890
push [regs.msw] ;save old MSW
48854891
endif
48864892
call run ;run the program
4893+
@dprintf "g_cmd: run returned, ds=%X, spadjust=%X, spsav=%lX", ds, spadjust, dword ptr ds:[SPSAV]
48874894
if ?PM
48884895
call getcsattr
48894896
mov [bCSAttr],al
@@ -7893,8 +7900,17 @@ run proc
78937900

78947901
mov [run_sp],sp ;save stack position
78957902
if DRIVER eq 0
7903+
if 1
7904+
; 16.2.2021: check if saved SS is debugger's SS. If no, don't adjust saved SP.
7905+
; SS may be != saved SS if debugger is stopped in protected-mode - then the
7906+
; current DPMI real-mode stack may be stored in SPSAV.
7907+
mov ax,ss
7908+
cmp ax,ds:[SPSAV+2]
7909+
jnz @F
7910+
endif
78967911
sub sp,[spadjust]
78977912
mov ds:[SPSAV],sp
7913+
@@:
78987914
endif
78997915
cli
79007916
mov sp,offset regs
@@ -7952,10 +7968,14 @@ int22:
79527968
cli
79537969
mov cs:[run_int],offset progtrm ;remember interrupt type
79547970
mov cs:[lastcmd],offset dmycmd
7971+
if 0
79557972
mov ax,cs
79567973
mov ss,ax
79577974
mov ds,ax
79587975
jmp intrtn1 ;jump to register saving routine (sort of)
7976+
else
7977+
jmp intrtn_progtrm
7978+
endif
79597979

79607980
;--- Interrupt 0 (divide error) handler.
79617981

@@ -8047,6 +8067,7 @@ intrtn proc
80478067
pop cs:[regs.rIP] ;recover things from stack
80488068
pop cs:[regs.rCS]
80498069
pop cs:[regs.rFL]
8070+
intrtn_progtrm::
80508071
mov cs:[regs.rSS],ss ;save stack position
80518072
sizeprf
80528073
mov cs:[regs.rSP],sp
@@ -11511,6 +11532,13 @@ nooutput:
1151111532
ret
1151211533
stdout endp
1151311534

11535+
ifdef _DEBUG
11536+
pushcontext cpu
11537+
.386
11538+
include dprintf.inc
11539+
popcontext cpu
11540+
endif
11541+
1151411542
if DRIVER eq 0
1151511543
createdummytask proc
1151611544

@@ -11655,13 +11683,6 @@ hook2f endp
1165511683

1165611684
endif
1165711685

11658-
ifdef _DEBUG
11659-
pushcontext cpu
11660-
.386
11661-
include dprintf.inc
11662-
popcontext cpu
11663-
endif
11664-
1166511686
_TEXT ends
1166611687

1166711688
_DATA segment

src/DPRINTF.INC

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ handle_char proc
99
call @F
1010
mov al,10
1111
@@:
12+
push bx
13+
xor bx,bx
1214
mov ah,0Eh
1315
int 10h
16+
pop bx
1417
ret
1518

1619
handle_char endp

0 commit comments

Comments
 (0)