230cc40104707c1bd4f4fc65152fc1ec1f221b00
[people/xl0/gpxe.git] / src / arch / i386 / core / hooks.c
1 #include "registers.h"
2 #include "main.h"
3 #include "etherboot.h"
4 #include "hooks.h"
5
6 /* Symbols defined by the linker */
7 extern char _bss[], _ebss[];
8
9 /*
10  * This file provides the basic entry points from assembly code.  See
11  * README.i386 for a description of the entry code path.
12  *
13  */
14
15 /*
16  * arch_main() : call main() and then exit via whatever exit mechanism
17  * the prefix requested.
18  *
19  */
20 void arch_main ( struct i386_all_regs *regs ) {
21         void (*exit_path) ( struct i386_all_regs *regs );
22
23         /* Determine exit path requested by prefix */
24         exit_path = ( typeof ( exit_path ) ) regs->eax;
25
26         /* Call to main() */
27         regs->eax = main();
28
29         if ( exit_path ) {
30                 /* Prefix requested that we use a particular function
31                  * as the exit path, so we call this function, which
32                  * must not return.
33                  */
34                 exit_path ( regs );
35         }
36 }