[ECOS] finding out what's taking space in .bss

Jonathan Larmour jifl@eCosCentric.com
Fri Feb 20 04:26:00 GMT 2004


heinricg@esiee.fr wrote:
> 
>>for the HAL to link in a function that is called in the idle
>>thread. This could for example change the power saving of the
>>processor. Such a function needs some stack space. For "normal"
>>systems 1k does not count, so 1k seems a reasonable default.
>>
> 
> 
> the funny thing is CYGNUM_THREADS_IDLE_STACK_SIZE is set to 512 in the
> configuration tool, I have SMP support turned off, and there are 1120
> bytes between idle_thread_stack and the next symbol. Did I read the
> map incorrectly?

No, there is some jiggery pokery in kernel/current/src/common/thread.cxx 
which makes sure the stack size is at least CYGNUM_HAL_STACK_SIZE_MINIMUM. 
This figure is meant to be the absolute minimum a thread (like the idle 
thread) could get away with, due to potentially needing to handle 
interrupts on that stack or not.

In the ARM HAL for example:
// A minimal, optimized stack frame, rounded up - no autos
#define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 20)

// Space for the maximum number of nested interrupts, plus room to call 
functions
#define CYGNUM_HAL_MAX_INTERRUPT_NESTING 4

// Interrupt + call to ISR, interrupt_end() and the DSR
#define CYGNUM_HAL_STACK_INTERRUPT_SIZE \
     ((4 * 20) + 2 * CYGNUM_HAL_STACK_FRAME_SIZE)

#define CYGNUM_HAL_STACK_SIZE_MINIMUM \
         (CYGNUM_HAL_MAX_INTERRUPT_NESTING * 
CYGNUM_HAL_STACK_INTERRUPT_SIZE + \
          2 * CYGNUM_HAL_STACK_FRAME_SIZE)

If you could guarantee that interrupts will never nest in practice in an 
application, you could reduce this, but eCos in general can't make such an 
assumption. That's where that space is going anyway.

One bit of known wastage in the ARM HAL is the startup stack - 512 bytes. 
It probably shouldn't be used and instead an interrupt stack should always 
be defined and used for startup, irrespective of 
CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK which would instead 
determine the size of the interrupt stack in the ARM HAL rather than its 
presence or absence.

One regression we've had as well is that virtual vectors, and therefore 
hal_virtual_vector_table (272 bytes), are meant to be optional but many 
platform ports make them compulsory. On the plus side, it isn't difficult 
to make them optional.

eCos is designed to be small, but sometimes there are little things like 
this that linger for a while because no-one seems to be bothered about the 
last few bytes. I'd love to spend time clearing up stuff like this, but 
there's always something more important...

Jifl
-- 
eCosCentric    http://www.eCosCentric.com/    The eCos and RedBoot experts
 >>>>> Visit us in booth 2527 at the Embedded Systems Conference 2004 <<<<<
March 30 - April 1, San Francisco http://www.esconline.com/electronicaUSA/
--["No sense being pessimistic, it wouldn't work anyway"]-- Opinions==mine


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list