This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Memory allocation failure
- From: David Brennan <eCos at brennanhome dot com>
- To: Andrew Lunn <andrew at lunn dot ch>
- Cc: eCos Discussion List <ecos-discuss at sources dot redhat dot com>
- Date: Fri, 06 May 2005 19:36:48 -0700
- Subject: Re: [ECOS] Memory allocation failure
- References: <427B77BF.5010302@brennanhome.com> <20050506201207.GJ31731@lunn.ch>
Andrew Lunn wrote:
On Fri, May 06, 2005 at 06:57:19AM -0700, David Brennan wrote:
I have created two different applications with the same eCos
configuration and essentially the same code base. One trivial
application which is missing most of the meat of the main application.
The trivial application runs fine. However when I try and start the real
application, it dies during my static constructors. I have traced the
problem down to a malloc call, but GDB eventually hangs while trying to
single step through there. It always hangs at this one particular
malloc, when constructing one particular instantiation of a class. Any
ideas? Is there a fixed number of pool elements which can be allocated
using dlmalloc?
Target is i386 VME based PC.
A total guess.....
You say this is a constructor. When is the constructor called? Is it a
static constructor which will be called early during startup?
It is a static constructor, using the default constructor init priority.
However, the application has already run a lot of other static
constructors by the time this happens. (Our application actually has its
own heap manager, which says that we have allocated over 10Meg of heap
around the time of the crash.)
Another engineer posed the question to me, "Whose stack are the
constructors using, and how big is it?" A question which I cannot
answer. Is there a configuration option for that stack space? We had a
problem with VxWorks, which tried to run all of the constructors with
too small of a stack.
Have you
checked that malloc's constructor has already been called so that
malloc itself is read to be called?
Based on the population of the mypool variable, it looks like the
constructor ran. I did not specifically test that. But I would assume
that would be a problem for all of eCos if the malloc is not one of the
first things constructed.
Dave
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss