diff --git a/ChangeLog b/ChangeLog index 004996dd3..eed31714f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2008-04-18 Robert Millan + + Restructures early code path on ieee1275 to unify grub_main() as + the first C function that is executed in every platform. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_init): New prototype. + * kern/i386/ieee1275/startup.S (_start): Jump to grub_main() instead of + cmain(). + * kern/powerpc/ieee1275/crt0.S (_start): Likewise. + * kern/ieee1275/cmain.c (cmain): Rename to ... + * kern/ieee1275/cmain.c (grub_ieee1275_init): ... this. + * kern/ieee1275/init.c (grub_machine_init): Call grub_ieee1275_init() + at the beginning. + 2008-04-18 Robert Millan * util/update-grub.in: Fix syntax error when setting diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h index 463180dca..eef08c395 100644 --- a/include/grub/ieee1275/ieee1275.h +++ b/include/grub/ieee1275/ieee1275.h @@ -97,6 +97,7 @@ extern void EXPORT_FUNC(grub_ieee1275_set_flag) (enum grub_ieee1275_flag flag); +void EXPORT_FUNC(grub_ieee1275_init) (void); int EXPORT_FUNC(grub_ieee1275_finddevice) (char *name, grub_ieee1275_phandle_t *phandlep); int EXPORT_FUNC(grub_ieee1275_get_property) (grub_ieee1275_phandle_t phandle, diff --git a/kern/i386/ieee1275/startup.S b/kern/i386/ieee1275/startup.S index 792642fb9..8bb731bc3 100644 --- a/kern/i386/ieee1275/startup.S +++ b/kern/i386/ieee1275/startup.S @@ -39,7 +39,7 @@ start: _start: movl %eax, EXT_C(grub_ieee1275_entry_fn) - jmp EXT_C(cmain) + jmp EXT_C(grub_main) /* * This call is special... it never returns... in fact it should simply diff --git a/kern/ieee1275/cmain.c b/kern/ieee1275/cmain.c index 31947ccb4..54a52b694 100644 --- a/kern/ieee1275/cmain.c +++ b/kern/ieee1275/cmain.c @@ -151,9 +151,8 @@ grub_ieee1275_find_options (void) #undef SF #undef OHW -void cmain (void); void -cmain (void) +grub_ieee1275_init (void) { grub_ieee1275_finddevice ("/chosen", &grub_ieee1275_chosen); @@ -162,9 +161,4 @@ cmain (void) grub_ieee1275_mmu = 0; grub_ieee1275_find_options (); - - /* Now invoke the main function. */ - grub_main (); - - /* Never reached. */ } diff --git a/kern/ieee1275/init.c b/kern/ieee1275/init.c index 6d08140f0..94a40b2eb 100644 --- a/kern/ieee1275/init.c +++ b/kern/ieee1275/init.c @@ -180,6 +180,8 @@ grub_machine_init (void) char args[256]; int actual; + grub_ieee1275_init (); + grub_console_init (); #ifdef __i386__ grub_keyboard_controller_init (); diff --git a/kern/powerpc/ieee1275/crt0.S b/kern/powerpc/ieee1275/crt0.S index 28130aa0c..fac99d6b0 100644 --- a/kern/powerpc/ieee1275/crt0.S +++ b/kern/powerpc/ieee1275/crt0.S @@ -42,5 +42,5 @@ _start: lis 9, grub_ieee1275_entry_fn@ha stw 5, grub_ieee1275_entry_fn@l(9) - bl cmain + bl grub_main 1: b 1b