This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC not calling __main()?


On Wed, Sep 12, 2007 at 02:43:32PM -0700, Rick Mann wrote:
> Hmm. It seems that I shouldn't need to modify GCC just to get this  
> support in there. Perhaps the default approach used by arm-elf is  
> sufficient, and I'm just side-stepping it by having my own start.S  
> file? I find it hard to believe that modifying GCC would be necessary  
> just to get C++ to behave for arm-elf...

   I think you _are_ side-stepping it with your start.S as well as probably
not using the correct linker command.

> To reiterate: I don't necessarily need to call __main(), I just want  
> my static objects to get constructed/destroyed.

   Grep for __USES_INITFINI__ in libgloss/arm/crt0.S (from newlib). It
registers a function _fini() with atexit() and then calls _init(). Look at
gcc/config/arm/crti.asm and gcc/config/arm/crtn.asm for the first and last
parts of _init() and _fini(). Assuming your GCC build produced crti.o,
crtn.o, crtbegin.o and crtend.o, the linker should be able to piece it all
together if with a linker command like the one from the manual (with your
start.o added somewhere):
http://gcc.gnu.org/onlinedocs/gccint/Initialization.html

Note that there are multilib version of those four crt*.o files:

$ size gcc/{*/,}crt*.o
   text    data     bss     dec     hex filename
    164      16      32     212      d4 gcc/thumb/crtbegin.o
     48      16       0      64      40 gcc/thumb/crtend.o
      8       0       0       8       8 gcc/thumb/crti.o
     16       0       0      16      10 gcc/thumb/crtn.o
    244      16      32     292     124 gcc/crtbegin.o
     68      16       0      84      54 gcc/crtend.o
     24       0       0      24      18 gcc/crti.o
     24       0       0      24      18 gcc/crtn.o

-- 
Rask Ingemann Lambertsen


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]