Mail Archives: djgpp-workers/1997/01/05/18:06:15
This is a multi-part message in MIME format.
--------------47F41D8348E7
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Salvador Eduardo Tropea (SET) wrote:
>
> Hi All:
>
> Bill (I) wrote:
> > I'm having some problems with v2.01 debuggers locking up with my
> > editor and I would like some advice on what mods were made to
> > dbgcom.c so I can work out what's going on (the story is below).
> Amazing, I have a similar problem with my editor (the one inside of
> RHIDE)!
>
> debuggee, if I use Win3.1 all works OK (puaj, puaj and puaj).
Eh? Is the english printable? :) Nice to know I wasn't the only one
with
the problem.
[massive snip of SET and myself comparing our problems and code]
> P.S. The first time that I saw that was in machine with low memory (8
> Mb), but when I tried at home (20Mb) I got the same problem. My
> workaround was using Win3.1 but that sucks!.
MAJOR suck!
However, I found and FIXED the problem!!!!!!!!!
The debugger's (in 2.01) don't preserve the flags register properly.
ALL of the return flags are set from within the isr (rather than just
the
carry flag). This also explains why it worked under windows: in
windows,
the isr is called with interrupts enabled but cwsdpmi calls the isr with
them disabled, and so the interrupts were being disabled!
There was aslo some other problems with register preservation with some
of the
intercepted functions, so I fixed those whils I was at it.
Bill
--
Leave others their otherness.
--------------47F41D8348E7
Content-Type: text/plain; charset=us-ascii; name="DBGCOM.DIF"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="DBGCOM.DIF"
diff -r -c3 src/debug/common/dbgcom.c new/debug/common/dbgcom.c
*** src/debug/common/dbgcom.c Tue Aug 13 00:08:04 1996
--- new/debug/common/dbgcom.c Sun Dec 29 19:25:04 1996
***************
*** 193,199 ****
.align 2,0x90 \n\
_change_descriptor: \n\
pushl %ecx \n\
- pushl %eax \n\
xorl %ecx,%ecx \n\
CL3: \n\
.byte 0x2e \n\
--- 193,198 ----
***************
*** 205,218 ****
movw %ax,%ds \n\
movw %dx,_descriptors(,%ecx,2) \n\
pop %ds \n\
- popl %eax \n\
popl %ecx \n\
ret \n\
CL4: \n\
incl %ecx \n\
cmpl $128,%ecx /* DESCRIPTOR_COUNT */ \n\
jl CL3 \n\
- popl %eax \n\
popl %ecx \n\
ret \n"
);
--- 204,215 ----
***************
*** 252,258 ****
.text \n\
.align 2,0x90 \n\
_change_dos_descriptor: \n\
- pushl %eax \n\
pushl %ecx \n\
xorl %ecx,%ecx \n\
CL6: \n\
--- 249,254 ----
***************
*** 266,279 ****
movw %dx,_dos_descriptors(,%ecx,2) \n\
pop %ds \n\
popl %ecx \n\
- popl %eax \n\
ret \n\
CL7: \n\
incl %ecx \n\
cmpl $128,%ecx /* DOS_DESCRIPTOR_COUNT */ \n\
jl CL6 \n\
popl %ecx \n\
- popl %eax \n\
ret \n"
);
--- 262,273 ----
***************
*** 331,337 ****
Lc31a_: pushl %eax \n\
pushf \n\
popl %eax /* store the right flags for iret */ \n\
! movl %eax,12(%esp) \n\
popl %eax \n\
Lc31a: iret \n\
Lc31b: .byte 0x2e \n\
--- 325,332 ----
Lc31a_: pushl %eax \n\
pushf \n\
popl %eax /* store the right flags for iret */ \n\
! andl $1,%eax /* we only want the carry flag */ \n\
! orl %eax,12(%esp) \n\
popl %eax \n\
Lc31a: iret \n\
Lc31b: .byte 0x2e \n\
***************
*** 358,363 ****
--- 353,359 ----
lcall _old_i31 \n\
jc Lc31a_ \n\
pushf \n\
+ pushl %eax \n\
pushl %edx \n\
pushw %si \n\
pushw %di \n\
***************
*** 365,370 ****
--- 361,367 ----
xorl %eax,%eax \n\
call _change_handle \n\
popl %edx \n\
+ popl %eax \n\
popf \n\
clc \n\
jmp Lc31a_ \n\
***************
*** 375,384 ****
.byte 0x2e \n\
lcall _old_i31 \n\
jc Lc31_resize_mem_error \n\
! popl %eax \n\
xorl %edx,%edx \n\
call _change_handle \n\
! xorl %eax,%eax \n\
jmp Lc31a_ \n\
Lc31_resize_mem: \n\
pushw %si \n\
--- 372,383 ----
.byte 0x2e \n\
lcall _old_i31 \n\
jc Lc31_resize_mem_error \n\
! xchgl %eax,(%esp) \n\
! pushl %edx \n\
xorl %edx,%edx \n\
call _change_handle \n\
! popl %edx \n\
! popl %eax \n\
jmp Lc31a_ \n\
Lc31_resize_mem: \n\
pushw %si \n\
***************
*** 388,403 ****
lcall _old_i31 \n\
jnc Lc31_resize_mem_ok \n\
Lc31_resize_mem_error: \n\
! addl $4,%esp \n\
stc \n\
jmp Lc31a_ \n\
Lc31_resize_mem_ok: \n\
! popl %eax \n\
pushw %si \n\
pushw %di \n\
popl %edx \n\
call _change_handle \n\
! xorl %eax,%eax \n\
jmp Lc31a_ \n\
Lc31_alloc_descriptors: \n\
pushl %ecx \n\
--- 387,405 ----
lcall _old_i31 \n\
jnc Lc31_resize_mem_ok \n\
Lc31_resize_mem_error: \n\
! xchgl %eax,(%esp) \n\
! popl %eax \n\
stc \n\
jmp Lc31a_ \n\
Lc31_resize_mem_ok: \n\
! xchgl %eax,(%esp) \n\
! pushl %edx \n\
pushw %si \n\
pushw %di \n\
popl %edx \n\
call _change_handle \n\
! popl %edx \n\
! popl %eax \n\
jmp Lc31a_ \n\
Lc31_alloc_descriptors: \n\
pushl %ecx \n\
***************
*** 414,434 ****
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! popl %edx \n\
! jc Lc31a_ \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
clc \n\
jmp Lc31a_ \n\
Lc31_create_alias_descriptor: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
jc Lc31a_ \n\
pushl %eax \n\
movw %ax,%dx \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
popl %eax \n\
clc \n\
jmp Lc31a_ \n\
--- 416,445 ----
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31a_free_descriptor_error \n\
! xchgl %eax,(%esp) \n\
! pushl %edx \n\
! movl %eax,%edx \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
+ popl %edx \n\
+ popl %eax \n\
clc \n\
jmp Lc31a_ \n\
+ Lc31_free_descriptor_error: \n\
+ popl %ebx \n\
+ jmp Lc31a_ \n\
Lc31_create_alias_descriptor: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
jc Lc31a_ \n\
pushl %eax \n\
+ pushl %edx \n\
movw %ax,%dx \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
+ popl %edx \n\
popl %eax \n\
clc \n\
jmp Lc31a_ \n\
***************
*** 448,458 ****
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! popl %eax \n\
! jc Lc31a_ \n\
xorw %dx,%dx \n\
call _change_dos_descriptor \n\
clc \n\
jmp Lc31a_ \n\
.align 2,0x90 \n\
_i21_hook: \n\
--- 459,475 ----
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31_free_dos_memory_error \n\
! xchgl %eax,(%esp) \n\
! pushl %edx \n\
xorw %dx,%dx \n\
call _change_dos_descriptor \n\
+ popl %edx \n\
+ popl %eax \n\
clc \n\
+ jmp Lc31a_ \n\
+ Lc31_free_dos_memory_error: \n\
+ popl %edx \n\
jmp Lc31a_ \n\
.align 2,0x90 \n\
_i21_hook: \n\
--------------47F41D8348E7--
- Raw text -