diff --git a/ChangeLog b/ChangeLog index 6ee59001f..dd5d28063 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-10-25 Vladimir Serbinenko + + * conf/Makefile.common (CPPFLAGS_KERNEL): Add -DGRUB_KERNEL=1. + * include/grub/dl.h (GRUB_MOD_INIT), (GRUB_MOD_FINI): Define + functions when compiling for kernel. + 2013-10-25 Vladimir Serbinenko * grub-core/lib/progress.c (grub_file_progress_hook_real): Cast to diff --git a/conf/Makefile.common b/conf/Makefile.common index 91e313dc9..3877b0b93 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -74,7 +74,7 @@ endif CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -static-libgcc -CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) if COND_CYGWIN STRIPFLAGS_KERNEL = -F elf32-i386 -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version diff --git a/grub-core/commands/boot.c b/grub-core/commands/boot.c index 91ec87d80..e0148c7f6 100644 --- a/grub-core/commands/boot.c +++ b/grub-core/commands/boot.c @@ -183,22 +183,14 @@ grub_cmd_boot (struct grub_command *cmd __attribute__ ((unused)), static grub_command_t cmd_boot; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_boot_init (void) -#else GRUB_MOD_INIT(boot) -#endif { cmd_boot = grub_register_command ("boot", grub_cmd_boot, 0, N_("Boot an operating system.")); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_boot_fini (void) -#else GRUB_MOD_FINI(boot) -#endif { grub_unregister_command (cmd_boot); } diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c index b93ddf164..da04389e3 100644 --- a/grub-core/commands/keylayouts.c +++ b/grub-core/commands/keylayouts.c @@ -293,21 +293,13 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)), static grub_command_t cmd; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_keylayouts_init (void) -#else GRUB_MOD_INIT(keylayouts) -#endif { cmd = grub_register_command ("keymap", grub_cmd_keymap, 0, N_("Load a keyboard layout.")); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_keylayouts_fini (void) -#else GRUB_MOD_FINI(keylayouts) -#endif { grub_unregister_command (cmd); } diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c index 2bfa5c815..822ca7477 100644 --- a/grub-core/term/at_keyboard.c +++ b/grub-core/term/at_keyboard.c @@ -646,22 +646,14 @@ static struct grub_term_input grub_at_keyboard_term = .getkey = grub_at_keyboard_getkey }; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_at_keyboard_init (void) -#else GRUB_MOD_INIT(at_keyboard) -#endif { grub_term_register_input ("at_keyboard", &grub_at_keyboard_term); grub_loader_register_preboot_hook (grub_at_fini_hw, grub_at_restore_hw, GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_at_keyboard_fini (void) -#else GRUB_MOD_FINI(at_keyboard) -#endif { grub_keyboard_controller_fini (NULL); grub_term_unregister_input (&grub_at_keyboard_term); diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index ce0bce705..de5479a51 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -1132,20 +1132,12 @@ grub_gfxterm_get_dimensions (unsigned *width, unsigned *height) *height = window.height; } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) -void grub_gfxterm_init (void) -#else GRUB_MOD_INIT(gfxterm) -#endif { grub_term_register_output ("gfxterm", &grub_video_term); } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COEBOOT) -void grub_gfxterm_fini (void) -#else GRUB_MOD_FINI(gfxterm) -#endif { grub_term_unregister_output (&grub_video_term); } diff --git a/grub-core/term/i386/pc/vga_text.c b/grub-core/term/i386/pc/vga_text.c index 1234e6100..88fecc5ea 100644 --- a/grub-core/term/i386/pc/vga_text.c +++ b/grub-core/term/i386/pc/vga_text.c @@ -270,15 +270,9 @@ static struct grub_term_output grub_vga_text_term = .progress_update_divisor = GRUB_PROGRESS_FAST }; -/* FIXME: this is was too spaghetti. */ - #ifndef MODE_MDA -#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) -void grub_vga_text_init (void) -#else GRUB_MOD_INIT(vga_text) -#endif { #ifdef GRUB_MACHINE_COREBOOT if (!grub_video_coreboot_fbtable) @@ -286,11 +280,7 @@ GRUB_MOD_INIT(vga_text) grub_term_register_output ("vga_text", &grub_vga_text_term); } -#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_MULTIBOOT) -void grub_vga_text_fini (void) -#else GRUB_MOD_FINI(vga_text) -#endif { grub_term_unregister_output (&grub_vga_text_term); } diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c index 1c928fe78..69596404b 100644 --- a/grub-core/term/serial.c +++ b/grub-core/term/serial.c @@ -379,11 +379,7 @@ grub_serial_unregister_driver (struct grub_serial_driver *driver) static grub_extcmd_t cmd; -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_serial_init (void) -#else GRUB_MOD_INIT(serial) -#endif { cmd = grub_register_extcmd ("serial", grub_cmd_serial, 0, N_("[OPTIONS...]"), @@ -410,11 +406,7 @@ GRUB_MOD_INIT(serial) #endif } -#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) -void grub_serial_fini (void) -#else GRUB_MOD_FINI(serial) -#endif { while (grub_serial_ports) grub_serial_unregister (grub_serial_ports); diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c index 001f24008..d83afdc9d 100644 --- a/grub-core/term/terminfo.c +++ b/grub-core/term/terminfo.c @@ -763,13 +763,7 @@ grub_cmd_terminfo (grub_extcmd_context_t ctxt, int argc, char **args) static grub_extcmd_t cmd; -#if defined (GRUB_MACHINE_IEEE1275) || defined (GRUB_MACHINE_MIPS_LOONGSON) \ - || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_ARC) \ - || defined (GRUB_MACHINE_UBOOT) -void grub_terminfo_init (void) -#else GRUB_MOD_INIT(terminfo) -#endif { cmd = grub_register_extcmd ("terminfo", grub_cmd_terminfo, 0, N_("[[-a|-u|-v] [-g WxH] TERM [TYPE]]"), @@ -777,11 +771,7 @@ GRUB_MOD_INIT(terminfo) options); } -#if defined (GRUB_MACHINE_IEEE1275) || defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_ARC) -void grub_terminfo_fini (void) -#else GRUB_MOD_FINI(terminfo) -#endif { grub_unregister_extcmd (cmd); } diff --git a/grub-core/video/radeon_fuloong2e.c b/grub-core/video/radeon_fuloong2e.c index c3d65f10e..ddcf9a39e 100644 --- a/grub-core/video/radeon_fuloong2e.c +++ b/grub-core/video/radeon_fuloong2e.c @@ -224,20 +224,12 @@ static struct grub_video_adapter grub_video_radeon_fuloong2e_adapter = .next = 0 }; -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_radeon_fuloong2e_init (void) -#else GRUB_MOD_INIT(video_radeon_fuloong2e) -#endif { grub_video_register (&grub_video_radeon_fuloong2e_adapter); } -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_radeon_fuloong2e_fini (void) -#else GRUB_MOD_FINI(video_radeon_fuloong2e) -#endif { grub_video_unregister (&grub_video_radeon_fuloong2e_adapter); } diff --git a/grub-core/video/sis315pro.c b/grub-core/video/sis315pro.c index cf45493a6..c1ae27019 100644 --- a/grub-core/video/sis315pro.c +++ b/grub-core/video/sis315pro.c @@ -437,20 +437,12 @@ static struct grub_video_adapter grub_video_sis315pro_adapter = .next = 0 }; -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_sis315pro_init (void) -#else GRUB_MOD_INIT(video_sis315pro) -#endif { grub_video_register (&grub_video_sis315pro_adapter); } -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_sis315pro_fini (void) -#else GRUB_MOD_FINI(video_sis315pro) -#endif { grub_video_unregister (&grub_video_sis315pro_adapter); } diff --git a/grub-core/video/sm712.c b/grub-core/video/sm712.c index fb40d6427..441faabd3 100644 --- a/grub-core/video/sm712.c +++ b/grub-core/video/sm712.c @@ -796,20 +796,12 @@ static struct grub_video_adapter grub_video_sm712_adapter = .next = 0 }; -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_sm712_init (void) -#else GRUB_MOD_INIT(video_sm712) -#endif { grub_video_register (&grub_video_sm712_adapter); } -#ifdef GRUB_MACHINE_MIPS_LOONGSON -void grub_video_sm712_fini (void) -#else GRUB_MOD_FINI(video_sm712) -#endif { grub_video_unregister (&grub_video_sm712_adapter); } diff --git a/include/grub/dl.h b/include/grub/dl.h index 80aac4979..3dc88c75c 100644 --- a/include/grub/dl.h +++ b/include/grub/dl.h @@ -35,25 +35,38 @@ */ #ifndef ASM_FILE -#if !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) - #ifndef GRUB_MOD_INIT + +#if !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_KERNEL) + #define GRUB_MOD_INIT(name) \ static void grub_mod_init (grub_dl_t mod __attribute__ ((unused))) __attribute__ ((used)); \ static void \ grub_mod_init (grub_dl_t mod __attribute__ ((unused))) -#endif -#ifndef GRUB_MOD_FINI #define GRUB_MOD_FINI(name) \ static void grub_mod_fini (void) __attribute__ ((used)); \ static void \ grub_mod_fini (void) -#endif + +#elif defined (GRUB_KERNEL) + +#define GRUB_MOD_INIT(name) \ +static void grub_mod_init (grub_dl_t mod __attribute__ ((unused))) __attribute__ ((used)); \ +void \ +grub_##name##_init (void) { grub_mod_init (0); } \ +static void \ +grub_mod_init (grub_dl_t mod __attribute__ ((unused))) + +#define GRUB_MOD_FINI(name) \ +static void grub_mod_fini (void) __attribute__ ((used)); \ +void \ +grub_##name##_fini (void) { grub_mod_fini (); } \ +static void \ +grub_mod_fini (void) #else -#ifndef GRUB_MOD_INIT #define GRUB_MOD_INIT(name) \ static void grub_mod_init (grub_dl_t mod __attribute__ ((unused))) __attribute__ ((used)); \ void grub_##name##_init (void); \ @@ -61,9 +74,7 @@ void \ grub_##name##_init (void) { grub_mod_init (0); } \ static void \ grub_mod_init (grub_dl_t mod __attribute__ ((unused))) -#endif -#ifndef GRUB_MOD_FINI #define GRUB_MOD_FINI(name) \ static void grub_mod_fini (void) __attribute__ ((used)); \ void grub_##name##_fini (void); \ @@ -71,6 +82,7 @@ void \ grub_##name##_fini (void) { grub_mod_fini (); } \ static void \ grub_mod_fini (void) + #endif #endif