[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjump
From: |
Marek Michalkiewicz |
Subject: |
Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it |
Date: |
Tue, 13 Feb 2007 22:21:29 +0100 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
Hello,
On Tue, Feb 13, 2007 at 10:35:41AM -0700, Eric Weddington wrote:
> > 1. Loss of two bytes of RAM for storing 'main' return address
> > in stack.
True, but probably no big deal anymore - today, most interesting
devices have more RAM than the ones at the time when the original
decision was made. If main() never returns, and you are really
out of RAM, the two bytes could still be used to store something.
> > 3. If in 'main' function 'call-saved' registers (r2..r17)
> > will be used, then
> > they will be saved in a stack.
This can be worked around by making sure main() never returns, and
adding the "noreturn" attribute - then no registers should be saved.
Some time ago I suggested to implement a new attribute, meaning "this
function doesn't need to save any registers". The h8300 target calls
it "OS_Task", and you can see it as "__C_task" in IAR C code examples
in some of the Atmel's app notes. The difference from "noreturn" is
that the funcion can return - return value from main() will be passed
to exit() as usual, and gcrt1.S doesn't care about saving registers.
> Can someone remember what was the reasoning behind making main() a normal
> function? Is the reason still valid?
Keeping things simpler and more maintainable - the logic was already
quite complicated, and it affects AVR-GDB which (last time I looked
into it - not sure about the current status) did some scanning of
function prologues, and had to handle main() specially, too.
For similar reasons, I'd suggest to consider dropping -mcall-prologues
which saved a little code size at the cost of speed, and made a lot of
sense a few years ago, when flash sizes were much smaller than today.
And, it probably wouldn't work with the new 3-byte PC devices anyway.
(The option probably should still be accepted as a no-op, to avoid
breaking existing Makefiles - it was only a hint, and the different
prologues were not guaranteed, only used when they saved code size).
Hope this helps,
Marek
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, (continued)
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Eric Weddington, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Joerg Wunsch, 2007/02/13
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Eric Weddington, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Anatoly Sokolov, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Björn Haase, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Joerg Wunsch, 2007/02/13
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call main ratherthanjumping to it, Eric Weddington, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main ratherthanjumping to it, Joerg Wunsch, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Bob Paddock, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Alexey Boyko, 2007/02/14
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it,
Marek Michalkiewicz <=
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main rather thanjumping to it, Björn Haase, 2007/02/13
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call main ratherthanjumping to it, Eric Weddington, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main ratherthanjumping to it, Marek Michalkiewicz, 2007/02/13
- Re: [avr-libc-dev] [bug #19050] gcrt1.S should call main ratherthanjumping to it, David Brown, 2007/02/14
- RE: [avr-libc-dev] [bug #19050] gcrt1.S should call mainratherthanjumping to it, Eric Weddington, 2007/02/14
- [avr-libc-dev] [bug #19050] gcrt1.S should call main rather than jumping to it, Anatoly Sokolov, 2007/02/13
- [avr-libc-dev] Re: [bug #19050] gcrt1.S should call main rather than jumping to it, Joerg Wunsch, 2007/02/13
- Re: [avr-libc-dev] Re: [bug #19050] gcrt1.S should call main ratherthan jumping to it, Anatoly Sokolov, 2007/02/13
- RE: [avr-libc-dev] Re: [bug #19050] gcrt1.S should call mainratherthan jumping to it, Eric Weddington, 2007/02/14
- Re: [avr-libc-dev] Re: [bug #19050] gcrt1.S should call mainratherthan jumping to it, Anatoly Sokolov, 2007/02/15