[gccsdk] Using Dynamic Areas

John Tytgat John.Tytgat at aaug.net
Sat Jul 19 07:10:52 PDT 2008


In message <d6715ac14f.admin at snowstone.org.uk>
          Adam <lists at snowstone.org.uk> wrote:

> On 19 Jul, Lee Noar  wrote:
> 
> > Adam wrote:
> > > Hi,
> > > 
> > > How do I enable the use of dynamic areas for my app, rather than the
> > > default use of the wimpslot (GCC3.4.6)?
> > 
> > You set a system variable with a name based on that of your binary,
> > eg,  for gcc you would use:
> > 
> > Set gcc$heap ""
> 
> OK, thanks. Does <appname$heap> have to be active at compile time, or
> just run time?

At run time.  Just curious: why would you like specifically set it ? We had
an older suggestion to actually change the default (when appname$heap is
not set) based on whether we're running on RISC OS 5 or not (i.e. whether
the WimpSlot size is limited to 28 MByte or not) as this is probably the
biggest reason to explicitly set it.

> Anyway, I guess that means I have to give my binary a name
> somehow...

I don't think so.  Suppose you have a !RunImage built which is hardly
unique in its name and being part of real Wimp application, I think you can
actually use your application name and use appname$heap while setting this
too as __program_name string to "appname".

> Looking at the Usage file[1] and the UnixLib header files, I think I need
> to do:
> 
>   #include <unixlib/features.h>

#include <features.h>, no ?

>   const char * const * const ___program_name = "BayTrader";

Two leading underscores.

> Unfortunately I'm still flumoxed:
>  - How many "_"s should there be? The comments seem to say 2, but the
>    actual definition uses 3.

The 3 leading underscore variants are internal to UnixLib and is actually
the pointer to the __program_name variable supplied by the user or NULL
when not.  This is how WEAK AOF symbols work (and that's different compared
to ELF).

>  - My #include line doesn't work. What's the correct way to refer to the
>    unixlib headers?
>  - I'm completely lost about the series of three "const" declarations
>    and the compiler says "initialization from incompatible pointer type".
> 
> Sorry - I'm sure I'm making this more complicated than it should be!

No I don't think so.  I think just a little bit more documentation is
needed.  I *think* you just need to add:

  const char *__program_name = "BayTrader";

John.
-- 
John Tytgat, in his comfy chair at home                                 BASS
John.Tytgat at aaug.net                             ARM powered, RISC OS driven




More information about the gcc mailing list