This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
The future of __main (was Re: __main call for c++ on sparc-elftarget)
- From: Chris Lattner <sabre at nondot dot org>
- To: Jim Wilson <wilson at tuliptree dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: Thu, 26 Jun 2003 10:54:04 -0500 (CDT)
- Subject: The future of __main (was Re: __main call for c++ on sparc-elftarget)
Jim Wilson wrote:
> __main is archaic. ELF systems use the .init/.fini sections to run
> static construtors/destructors. crti.o defines function prologues for
> init/fini, crtn.o defines function epilogues, crt0.o branches to the
> init function at startup, and registers passes the fini function to
> atexit.
...
> Some of the older embedded ELF targets aren't using .init/.fini yet, but
> should be fixed to do so. Perhaps sparc-elf is one of them? It could be
> broken from lack of maintenance.
I just wanted to say that I hope that __main never goes away: it is a
great way to expose the information about static ctors and dtors to the
compiler, which the "magic" .init/.fini sections doen't do as well. In
particular, for most C programs (those which don't ctor or dtors), the
LLVM compiler is able to completely eliminate the overhead of the
_possibility_ of having ctors and dtors (general DCE algorithms just
delete the code automatically), which leaves __main empty for codes where
it is safe.
I don't see how to implement this important size optimization using crt0.o
and .init/.fini. Will support for __main stay around forever, or should I
be looking for alternatives? I would really like to avoid having to put
in special purpose code to handle this optimization.
Thanks,
-Chris
--
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/