[buug] About main() in bootloader

George Wong crazylion at vip.sina.com
Tue Nov 30 05:18:23 PST 2004


 
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?  






More information about the buug mailing list