comp.lang.ada
 help / color / mirror / Atom feed
From: "Kevin K" <kevink4@gmail.com>
Subject: Re: GNAT GPL for Mac OSX stack checking problem
Date: Sat, 08 Oct 2005 00:05:36 GMT
Date: 2005-10-08T00:05:36+00:00	[thread overview]
Message-ID: <KIRoJuEXw9g9-pn2-cj4DdE94w0I0@ecs> (raw)
In-Reply-To: cNmdnVejVKal7NveRVn-qg@comcast.com

On Fri, 7 Oct 2005 13:00:10 UTC, Jeff Creem <jcreem@yahoo.com> wrote:

> Kevin K wrote:
> > The compiler and GPS seem to work, it is the generated test driver 
> > that I'm having problems with.
> > 
> > I saw 10.3 referenced when I downloaded it, but I have a history with 
> > the Linux versions where you can, at times, run the compiler on a 
> > different version than they built on.  For instance, the versions 
> > build for Redhat 7.1 could run on 7.2, 7.3, 8, EL 2.1, but GLIBC 
> > differences essentially required a new version from Adacore for RH9, 
> > EL3, etc.  (The change to the new threading library).
> > 
> > I just took a look at the ulimit command.  I would have to look at the
> > documentation to increase it under macos, but traditionally, the stack
> > you are changing with this command is the Environment stack, which is 
> > the stack for the actual main procedure, NOT the tasks for individual 
> > tasks.  If GNAT, on the Mac, is putting all the tasks I declared in 
> > the procedure declare section into the environment stack, that is 
> > different behavior than any other Ada compiler I've used, since the 
> > Linux GNAT uses the heap, Rational Apex uses the heap, the VADs Ada83 
> > compiler used the heap, and Alsys on Unix used the heap.
> > 
> > Essentially, my test procedure was
> > 
> > procedure test_tasks is
> > 
> >   task type task_type is
> >     pragma storage_size(10000000);
> > 
> >     entry start;
> >   end;
> > 
> >   task body test_tasks is
> >    
> >   begin
> > 
> >     accept start;
> > 
> >     loop
> >       putline("task num");
> >       delay 10.0;
> >       stack_user;
> >     end loop;
> >   end;
> > 
> >   procedure stack_user is
> >     buffer:string(1..2048);
> > 
> >   begin
> >       buffer(1):=' ';
> >       stack_user;
> >   exception
> >      when storage_error=> text_io.put_line("Storage_Error");
> >   end;
> > 
> >   the_tasks : array(1..10) of task_type;
> > 
> > begin
> > 
> >    --Call Start on all tasks
> > 
> > end;
> > 
> > 
> 
> It is not clear that one should expect to see 100 Megs actually used on 
> all OS's if the stack check logic is flawed. Some OSs do not actually 
> commit usage of the memory until it is accessed. Given the way this is 
> written, it seems like it would be perfectly valid for the first task to 
> take off and run into that infinite recusion and blow its stack before 
> any other task gets any CPU time. Now if they each did this before the 
> program  terminated I guess one would see the 100 Meg usage.. So it 
> sounds like the problem is not really that you are running into an early 
> stack limit but rather that the stack checking is not operating properly 
> resulting in the program terminating instead of each tasking running one 
> after another.
> 
> Sounds to me like the interaction of gcc and macos is not doing proper 
> stack checking.


I'll stick in a small delay statement in the recursive procedure that 
will slow down the tasks, in case, for some reason, the Macos version 
of the runtime doesn't timeslice.

Regardless, I would have thought that the memory usage according to 
top would have shown at least 10 meg if only 1 task was running.



  reply	other threads:[~2005-10-08  0:05 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-06 22:47 GNAT GPL for Mac OSX stack checking problem Kevin K
2005-10-07  1:27 ` jim hopper
2005-10-07 12:10   ` Kevin K
2005-10-07  2:48 ` John B. Matthews
2005-10-07 12:25   ` Kevin K
2005-10-07 13:00     ` Jeff Creem
2005-10-08  0:05       ` Kevin K [this message]
2005-10-08  6:27   ` Simon Wright
2005-10-08 18:01   ` jim hopper
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox