Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

About main() in bootloader



 
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?  







BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org