[M3devel] RTOS.Crash

Tony Hosking hosking at cs.purdue.edu
Fri Dec 11 16:10:10 CET 2009


OK, cool.

On 11 Dec 2009, at 10:07, Jay K wrote:

>  > We should do the same for POSIX too I think.
>  
> Posix just calls abort.
>  
> Posix:
> PROCEDURE Crash () =
>   BEGIN
>     Cstdlib.abort ();
>     LOOP END; (* wait *)
>   END Crash;
> 
>  
> Win32:
>  
> 
> PROCEDURE Crash () =
>   CONST Magic = 1 * ADRSIZE (INTEGER);  (* == offset of "fp" in this frame *)
>   VAR fp: ADDRESS := ADR (fp) + Magic;  (* == my frame pointer *)
>   BEGIN
>     IF WinBase.IsDebuggerPresent () # 0 THEN  (* I moved these three lines up. *) 
>       WinBase.DebugBreak ();
>     END;
>     RTThread.SuspendOthers ();
>     RTMachInfo.DumpStack (LOOPHOLE (Crash, ADDRESS), fp);
>     RTSignal.RestoreHandlers (); (* so we really do crash... *)
>     Exit (-1);
>   END Crash;
> 
>  
> That said..I'm missing something and I should review the code.
> Obviously there are calls elsewhere to DumpStack, and they or may not be similarly crufty.
>  
>  
> /Actually/ one thing I'd like is for the m3core to be able to dump better callstacks.
> Like, the ability to carry more debuginfo of its own custom format in itself.
> Like, to get line numbers.
>  
>  
>  - Jay
>  
> From: hosking at cs.purdue.edu
> Date: Fri, 11 Dec 2009 10:00:35 -0500
> To: jkrell at elego.de
> CC: m3commit at elegosoft.com
> Subject: Re: [M3commit] CVS Update: cm3
> 
> We should do the same for POSIX too I think.
> 
> On 11 Dec 2009, at 12:42, Jay Krell wrote:
> 
> CVSROOT: /usr/cvs
> Changes by: jkrell at birch. 09/12/11 12:42:57
> 
> Modified files:
> cm3/m3-libs/m3core/src/runtime/WIN32/: Tag: 
>                                       release_branch_cm3_5_8 
>                                       RTOS.m3 
> 
> Log message:
> port from head: very small change that makes debugging sometimes much better
> (break right into debugger, don't waste time trying to suspend threads
> and dump stacks, the debugger does a much better job of suspending
> threads and usually (if you have symbols) of dumping stacks)
> If you aren't using a debugger, then no change.
> 
> The thing about RestoreHandlers can probably just be removed since
> in my brief experience the DebugBreak works fine before it.
> 
> Really it can probably just go like this:
> If debugger
> debugbreak
> ELSE
> suspend others, maybe
> dumpstack one of the important parts
> restore handlers probably can be removed
> Exit(-1) also important though maybe should be TerminateProcess which is much quicker/cleaner
> doesn't run all the dllmains
> 
> though currently I just made the small change of moving the debugbreak much earlier

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20091211/918adf76/attachment-0002.html>


More information about the M3devel mailing list