Freeing __malloc_av and impure_data

Aras Vaichas
Fri Nov 26 13:18:00 GMT 2010

On 26 November 2010 21:40, Corinna Vinschen <> wrote:
> On Nov 26 15:42, Aras Vaichas wrote:
> > Hi, I'm building a binary for a non-Linux embedded AVR32 application
> > and I'm getting close to my 16K of SRAM limit.
> >
> > Looking at my elf file, I see that impure_data uses 1K of memory.
> >
> > 00000044 l     O .data   00000400 impure_data
> >
> > I understand that it is somehow used for rentrancy in newlib, but
> > AFAIK I don't need it.
> >
> > Is there a way to reduce this, or remove it completely?
> You can't just remove it since it's used for more than just reentrency.
> But you can shrink it for small targets.  The --enable-newlib-reent-small
> configure option will do that for you.

Excellent. I ran the debugger today and saw that about 8 bytes in the
1K area were being used, but everything else remained at zero.
Is --enable-newlib-reent-small a newlib build configuration?
Sorry, excuse my ignorance but I've been using the newlib crosstools
supplied by Atmel for use with their AVR32Studio so I haven't yet
built newlib from scratch.

> > There is also a whole load of malloc related data as well:
> >
> > 00000444 g     O .data   00000408 __malloc_av_
> >
> > Can I free that up as well?
> >
> You can get rid of it by overriding newlib's malloc with your own
> malloc.  Just define MALLOC_PROVIDED so the default malloc functionality
> will not be built into newlib.  Alternatively, make sure not to use
> functions which potentially allocate space dynamically.  printf is a
> good candidate.

Is MALLOC_PROVIDED intended for use in building newlib or for linking
against newlib?

Hmm, I'll have to take another look at which functions I use because
AFAIK I don't use anything which calls malloc.



More information about the Newlib mailing list