[comp.sys.apollo] help with Fortran bug

apollo@ecf.utoronto.ca (Vince Pugliese) (01/04/90)

one of the guys is developing a fairly large program and has
been experiencing some problems.

- running a FORTRAN program with large data memory requirements > 5Mb ram


- what does the following error mean ?

  `` unable to unwind stack because of invalid stack frame 




       (process manager/process fault manager) ''

                                                     
- is there any specific limits on memory usage with fortran ?


- it was suggested that using the ``-save'' option with the compiler
  might help, in fact it seemed to make things WORSE!

any ideas?? suggestions??
thanks in advance
vince 
apollo@ecf.toronto.edu

krowitz%richter@UMIX.CC.UMICH.EDU (David Krowitz) (01/04/90)

We write programs larger than 5MB all the time (actually, most of
the time!). The only limits are:

1) The virtual memory address space of your particular model of
   workstation. All Apollo nodes have at least 64MB of address
   space. Older DN3000 (prior to the DN3000 model 3010) were limited
   to 64MB; later model DN3000's (model 3010 and 3010A) have a larger
   address space (256MB, I think); and DN4000's, DN3500's and DN4500's
   have something like 1GB or more.

2) The amount of free disk space on the node (or, if it is a 
   diskless machine, it's partner's free disk space). There has to
   be at least enough free disk space to equal the amount of virtual
   memory (ie. the total size of all the arrays, variables, code, and
   I/O buffers) used by your program. Under SR9.7, the disk space was
   allocated as your program began to use it (ie. disk space for a
   particular array wasn't allocated until you first began to use the
   array). Under SR10, the entire amount of disk space is allocated
   as soon as the program is started. This guarantees that the program
   will not die from running out of disk space after hours of work. If
   you *need* to use SR9.7 style disk allocation, there is a rumor of
   an unsupported option to the SR10 binder (/com/bind) that will allow
   you to do this.

3) The size of the stack. The stack is part of a program's virtual memory
   will is used for the temporary storage of variables and subroutine
   call/return arguments. On Motorola 680x0 machines, the default stack
   size is something like 256Kb (or maybe 500Kb, I'm not so certain on
   this), and on PRISM machines (the DN10000) it's 5Mb. You can change
   the stack size with a switch to the binder. Fortran subroutines and
   functions allocate all of their variables and arrays, except for those
   passed in the subroutine call, those declared as COMMON, or those
   which are declared in a SAVE statement, in the stack array. When the
   subroutine/function returns, the stack space is reclaimed and can be
   used by the next subroutine/function call. The space used on the stack
   by a subroutine for its variables and the call/return information is
   a "stack frame". You can damage a subroutine's stack frame by over
   writing the bounds of an array, by passing subroutine arguments
   whose size does not match the expected size in the subroutine (or
   by passing too many or too few arguments), by accessing data via
   an invalid pointer, etc.


 -- David Krowitz

krowitz@richter.mit.edu   (18.83.0.109)
krowitz%richter.mit.edu@eddie.mit.edu
krowitz%richter.mit.edu@mitvma.bitnet
(in order of decreasing preference)

lampi@pnet02.gryphon.com (Michael Lampi) (01/05/90)

There are no specific limits on memory usage with FORTRAN. I suspect that an
error in array referencing is destroying your stack frame. Check your code
where you set   arrayname(index) = value, as opposed to just reading a value
from an array.

Michael Lampi               MDL Corporation   213/782-7888   fax 213/782-7927

UUCP: {ames!elroy, <routing site>}!gryphon!pnet02!lampi
INET: lampi@pnet02.gryphon.com
"My opinions are that of my corporation!"

lori@hacgate.scg.hac.com (Lori Barfield) (01/05/90)

In article <1990Jan3.212803.23896@ecf.utoronto.ca> apollo@ecf.utoronto.ca (Vince Pugliese) writes:
>- running a FORTRAN program with large data memory requirements > 5Mb ram
>- what does the following error mean ?
>  `` unable to unwind stack because of invalid stack frame 

I hope these suggestions aren't too simplistic, but before we cry BUG
here....Has your hacker 1) made sure all his modules are freshly compiled;
and 2) double-checked big-array equivalence alignments?  A framing error
could arise from subroutine declarations being out of kilter, or arrays
attempting to wander around your operating system.

You know the old FORTRAN saying:  "If all else fails, Throw It In Common."


...lori

max@bnr-rsc.UUCP (Max Feil) (01/11/90)

In article <1990Jan3.212803.23896@ecf.utoronto.ca> apollo@ecf.utoronto.ca (Vince Pugliese) writes:
>
>- what does the following error mean ?
>
>  `` unable to unwind stack because of invalid stack frame 
>       (process manager/process fault manager) ''
>                                                     

This may be too late, or too obvious, but if you haven't solved your
problem, make sure that all subroutine/function calls are using the
correct number of parameters. This will cause non-stack memory to be 
interpreted as stack.
-- 
Max Feil                 Usenet: max@bnr-rsc.UUCP  or uunet!bnrgate!bnr-rsc!max
Bell-Northern Research   Internet: bnr-vpa!bnr-rsc!max@gpu.utcs.toronto.edu
P.O Box 3511 Station C,
Ottawa, Ontario, Canada K1Y 4H7.  (613) 763-3093