Subject: Re: kernel bug in NetBSD/Amiga? Help!
To: Jake Hamby <jehamby@lightside.com>
From: Calvin <diavolo@azure.engin.umich.edu>
List: amiga
Date: 12/17/1995 07:10:07
On Sat, 16 Dec 1995, Jake Hamby wrote:

> I've still been having trouble trying to compile GCC 2.7.2 with 
> NetBSD/Amiga due to what I am now certain is a subtle VM problem with the 
> Amiga kernel!  Please take the time to test this simple program on your 
> system and report to me (no need to copy to the NetBSD list) whether or 
> not it crashes).  Beware that it will eat up a certain amount of swap 
> space, 16MB should be adequate.  Thanks!
> 
> This test program which will reliably segfault with i=174687, which
> you can verify with gdb on the core.  It creates 500,000 nodes in a chain,
> then traverses the chain, then recursively traverses the chain and frees
> the nodes in reverse order (it is when traversing the second time,
> searching for the end node, that it segfaults).  Considering the large
> number of nodes, it should give a good workout to the VM subsystem as well
> as malloc/free/sbrk.  It consistently crashes on my NetBSD/Amiga system.

The keyword here is recursive.  Recursive programs require a large 
amount of space to maintain each stack frame.  The reason why this 
program works for a smaller number of nodes is because there are very 
few stack frames involved--but increase to half a million nodes, then a 
recursive program requires such a staggering amount of stack compared to 
an iterative program doing the same thing.  So instead of giving the VM 
subsystem a workout, this is a stack exercise :-).  The problem has 
nothing to do with virtual memory.... or at least it shouldn't.  I 
havn't tested it on my system but how about this... if you're running CSH:

limit stackspace 65535

this will increase your stack from 8K to 64K.  This should solve your 
problem.  If this doesn't work, try:

unlimit stackspace

and run your program again.  The default stackspace csh gives to a 
program is 8K and with an application like yours, it seems like you're 
using up all your stack quite quickly.  When a program runs out of 
stack space, your program will try to read across a memory boundary, and 
this generates an error (segfault).... this can occur at any time the 
stack runs out so your program will segfault, and your counter i will 
contain the value at the time your program got the fault, but it won't 
TELL you anything because the memory bounds read occured in the stack...

Sometimes I dunno why they teach recursion in CS classes.  :*)

--
 o/ \o/  o  <o   o  o   o    She walks in  beauty, like the night
<|   |  /|\  |> <|><|> <|\       Of cloudless climes and starry skies;
/|  / \  /| / \ //  \\ / \   And all that's best of dark and bright
""""""""""""""""""""""""""""     Meet in her aspect and her eyes.  (Byron)