delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2002/07/20/12:24:31

From: sandmann AT clio DOT rice DOT edu (Charles Sandmann)
Message-Id: <10207201605.AA21517@clio.rice.edu>
Subject: Re: Emacs CVS and Windows NT 4
To: djgpp-workers AT delorie DOT com
Date: Sat, 20 Jul 2002 11:05:38 -0500 (CDT)
Cc: rich AT phekda DOT freeserve DOT co DOT uk
In-Reply-To: <3D396624.53AE0ADE@phekda.freeserve.co.uk> from "Richard Dawe" at Jul 20, 2002 02:31:16 PM
X-Mailer: ELM [version 2.5 PL2]
Mime-Version: 1.0
Reply-To: djgpp-workers AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp-workers AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

> As I've said in another mail, it was crashing on a cli instruction in
> brk_common. 

Which was the fix which worked for me under Windows 2000 on a small
test program.  Didn't have time to test on NT4.

> I discovered that I wasn't running a "pure" copy of CVS. So I've
> reverted the changes to src/libc/crt0 and rebuilt. 

What changes were those?

> Now it looks like the crash is in crt0.S here:
> 
> 	LCALL(sbrk16_api_ofs) <--- CRASHES HERE

This is a wrapper around the DPMI resize call.  Crashing here usually
means a hardware interrupt happened while the memory was being moved;
but you need to be careful since you can't step into this call.  You
shouldn't ever get a hardware interrupt since we disabled them, but
this call doesn't work on NT4 or Win2K (seems OK on XP).  At least
on Win2K adding the CLI as mentioned above fixed it (not running
under a debugger).  This usually makes the entire NTVDM go away.

> This is with the same patten of calls to __default_morecore. I get backtraces
> like this, when I hit the crash in brk_common under gdb:
> 
> "Exiting due to signal SIGTRAP
> Debug at eip=00000012
> eax=005e0901 ebx=0000005e ecx=005e0000 edx=005b8000 esi=00590176 edi=01761da0
> ebp=0056ad28 esp=0056acf0 program=C:\DEVELOP\EMACS\BIN\EMACS.EXE
> cs: sel=02cf  base=000221c0  limit=0000026f

CS:EIP is based in DOS memory with a selector of limit of 623 bytes.  This
looks like the sbrk16 helper to me.  EIP=12 is the first exectuable
instruction (if I count right) - which should never fail.  This looks
like a debugger caused crash (inability to handle multi-selector code
debugging?)

> It seems to be sensitive to how much keyboard activity there is. I haven't
> worked out the relation between keypresses and crashes yet.

Right - it needs to be a hardware interrupt, and happen between the time
we resize/move the memory area and the selector is updated with the new
memory base.

Try the program I provided in email dated 19 May 2002 15:36 - small and
easy to debug.  The upstroke keyboard interrupt is very easy to cause an
interrupt in the sbrk and cause a crash.

> Has anyone got any ideas what's going on? Is there any more information I can
> provide?

See if you can make the simple test program crash under NT 4 with and without
the CLI change in crt0.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019