About main() in bootloader

Chris fj1200 at comcast.net
Fri Dec 3 20:40:01 EST 2004


Why can't you pass arguments to main, they are just stack variables, and
why can't you check the return value from main, ?

What CPU are you using?  if x86, then an int will be returned in (e)ax.
so just check the return value ny writing some assembler to check the
value in ax...

Chris

George Wong wrote:
> 
> I am studying bootloaders in embedded system.Generally speaking, there are two stages in a bootloader.
> 
> The first stage, which is usually written in assembler, does some necessary settings.
> 
> The second stage, which is usually written in C, provides more complex functions,such as setting specific devices, loading kernel image.
> 
> My questions occurs on the moment that bootloader jumps from stage 1 to the entrance of C of stage 2.
> The most comman method is to consider the address of main() function as the entrance of executable of code of stage2. It, however, may cause two problems:
> the one is that we cannot pass arguments by main() fuction and the other is that we cannot deal with the situation which main function return value.
> But the problem can be fixed by a skillful method that is using a "trampoline" which is usually a piece of assembler. Following is an example:
> 
> .text
> 
> .globl _trampoline
> _trampoline:
>         bl      main
>         /* if main ever returns we just call it again */
>         b       _trampoline
> 
> I want to know that why the most comman method can cause the problems? I don't think it is a question which is special for embedded system. It, I think, is about the structure of main fuction in memory. Could anybody give me some clues?
> And another question is that why a "trampoline" can fix the problems?
> 
> _______________________________________________
> gnhlug-discuss mailing list
> gnhlug-discuss at mail.gnhlug.org
> http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss

-- 
IBA #15631



More information about the gnhlug-discuss mailing list