From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1EZcjX-0007B7-Aa for mharc-grub-devel@gnu.org; Tue, 08 Nov 2005 18:18:31 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EZcjU-0007Ar-3G for grub-devel@gnu.org; Tue, 08 Nov 2005 18:18:28 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EZcjQ-0007AQ-6f for grub-devel@gnu.org; Tue, 08 Nov 2005 18:18:27 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EZcjP-0007AN-2P for grub-devel@gnu.org; Tue, 08 Nov 2005 18:18:24 -0500 Received: from [145.74.66.11] (helo=mail-cn.han.nl) by monty-python.gnu.org with esmtp (Exim 4.34) id 1EZcjL-0008I8-O0 for grub-devel@gnu.org; Tue, 08 Nov 2005 18:18:22 -0500 Received: from vscan-cn.han.nl (venus.han.nl [145.74.65.6]) by mail-cn.han.nl (Postfix) with ESMTP id 167038CC9 for ; Wed, 9 Nov 2005 00:18:12 +0100 (CET) Received: from mail-cn.han.nl ([145.74.66.11]) by vscan-cn.han.nl (venus.han.nl [145.74.65.6]) (amavisd-new, port 10024) with ESMTP id 01414-02 for ; Wed, 9 Nov 2005 00:18:09 +0100 (CET) Received: from mail1.han.nl (mail1.han.nl [145.74.103.11]) by mail-cn.han.nl (Postfix) with ESMTP id B73548C5E for ; Wed, 9 Nov 2005 00:18:09 +0100 (CET) Received: from localhost.localdomain (mgerards.xs4all.nl [82.92.27.129]) by mail1.han.nl (Postfix) with ESMTP id 5FFF7C047 for ; Wed, 9 Nov 2005 00:18:08 +0100 (CET) Mail-Copies-To: metgerards@student.han.nl To: grub-devel@gnu.org From: Marco Gerards Date: Wed, 09 Nov 2005 00:18:09 +0100 Message-ID: <87wtjibufi.fsf@student.han.nl> User-Agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: by amavisd-new (2.2.0) at vscan-cn.han.nl Subject: Generating init and fini functions X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Nov 2005 23:18:28 -0000 Hi, At the moment I am working on things that irritate me while I am working on GRUB. One thing is writing a duplicate _init and _fini function (duplicate because it already is added in GRUB_MOD_INIT). And another thing that irritates me is that I have to add a init line to grub-emu. Here is a patch that solves that. First I removed all the init and fini functions and let GRUB_MOD_INIT and GRUB_MOD_FINI generate these functions. I have added a script that creates a header file with all the function prototypes for these generated functions. And finally I have added a script that can generate a C file with the functions `grub_init_all' and `grub_fini_all'. Example: grub_emu_SOURCES = commands/ls.c fs/ext2.c When you pass grub_emu_SOURCES to the script, it will generate: void grub_init_all (void) { grub_ls_init (); grub_ext2_init (); } void grub_fini_all (void) { grub_ls_fini (); grub_ext2_fini (); } So the routines generated depend on the files you add to the _SOURCES. In grub-emu.c I removed all the calls to the init functions and added grub_init_all. The same can be done for grub-fsprobe, etc. In that way it will be less work to add a new module and a lot easier. And important for me: less to forget. :-) Please have a close look at my shellscripts. As you can see I never use shellscripting. :-) If I don't hear any comments, I'll commit this patch on Saturday or so. It should be an easy patch to proofread since most stuff is just removing things that are not relevant anymore. Thanks, Marco 2005-11-09 Marco Gerards * geninit.sh: New file. * geninitheader.sh: Likewise. * commands/boot.c (grub_boot_init, grub_boot_fini): Removed. * commands/cat.c (grub_cat_init, grub_cat_fini): Likewise. * commands/cmp.c (grub_cmp_init, grub_cmp_fini): Likewise. * commands/configfile.c (grub_configfile_init) (grub_configfile_fini): Likewise. * commands/default.c (grub_default_init, grub_default_fini): Likewise. * commands/help.c (grub_help_init, grub_help_fini): Likewise. * commands/ls.c (grub_ls_init, grub_ls_fini): Likewise. * commands/search.c (grub_search_init, grub_search_fini): Likewise. * commands/terminal.c (grub_terminal_init, grub_terminal_fini): Likewise. * commands/test.c (grub_test_init, grub_test_fini): Likewise. * commands/timeout.c (grub_timeout_init, grub_timeout_fini): Likewise. * commands/i386/pc/halt.c (grub_halt_init, grub_halt_fini): Likewise. * commands/i386/pc/reboot.c (grub_reboot_init, grub_reboot_fini): Likewise. * disk/loopback.c (grub_loop_init, grub_loop_fini): Likewise. * fs/affs.c (grub_affs_init, grub_affs_fini): Likewise. * fs/ext2.c (grub_ext2_init, grub_ext2_fini): Likewise. * fs/fat.c (grub_fat_init, grub_fat_fini): Likewise. * fs/hfs.c (grub_hfs_init, grub_hfs_fini): Likewise. * fs/iso9660.c (grub_iso9660_init, grub_iso9660_fini): Likewise. * fs/jfs.c (grub_jfs_init, grub_jfs_fini): Likewise. * fs/minix.c (grub_minix_init, grub_minix_fini): Likewise. * fs/sfs.c (grub_sfs_init, grub_sfs_fini): Likewise. * fs/ufs.c (grub_ufs_init, grub_ufs_fini): Likewise. * fs/xfs.c (grub_xfs_init, grub_xfs_fini): Likewise. * normal/main.c (grub_normal_init, grub_normal_fini): Likewise. * partmap/amiga.c (grub_amiga_partition_map_init) (grub_amiga_partition_map_fini): Likewise. * partmap/apple.c (grub_apple_partition_map_init) (grub_apple_partition_map_fini): Likewise. * partmap/pc.c (grub_pc_partition_map_init) (grub_pc_partition_map_fini): Likewise. * partmap/sun.c (grub_sun_partition_map_init, grub_sun_partition_map_fini): Likewise. * term/terminfo.c (grub_terminal_init, grub_terminal_fini): Likewise. * util/grub-emu.c: Include . (main): Don't initialize and de-initialize any modules directly, use `grub_init_all' and `grub_fini_all' instead. * term/i386/pc/vesafb.c (grub_vesafb_init): Renamed to `grub_vesafb_mod_init'. (grub_vesafb_fini): Renamed to `grub_vesafb_mod_fini'. Updated all users. * term/i386/pc/vga.c (grub_vga_init): Renamed to `grub_vga_mod_init'. Updated all users. (grub_vga_fini): Renamed to `grub_vga_mod_fini'. * conf/i386-pc.rmk (grub_emu_SOURCES): Add `grub_emu_init.c'. (grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c): New rules. * include/grub/dl.h (GRUB_MOD_INIT): Add argument `name'. Generate a function to initialize the module in utilities. Updated all callers. (GRUB_MOD_FINI): Add argument `name'. Generate a function to initialize the module in utilities. Updated all callers. Index: geninit.sh =================================================================== RCS file: geninit.sh diff -N geninit.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ geninit.sh 8 Nov 2005 22:35:59 -0000 @@ -0,0 +1,70 @@ +#! /bin/sh +# +# Copyright (C) 2002, 2005 Free Software Foundation, Inc. +# +# This gensymlist.sh is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +cat < + +EOF + +cat < $@ + +grub_modules_init.h: $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninitheader.sh grub_modules_init.lst + sh $(srcdir)/geninitheader.sh > $@ + +grub_emu_init.c: $(filter-out grub_emu_init.c,$(grub_emu_SOURCES)) geninit.sh grub_modules_init.lst + sh $(srcdir)/geninit.sh $(filter %.c,$^) > $@ # For genmoddep. genmoddep_SOURCES = util/genmoddep.c Index: disk/loopback.c =================================================================== RCS file: /cvsroot/grub/grub2/disk/loopback.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 loopback.c --- disk/loopback.c 17 Jul 2005 20:26:07 -0000 1.2 +++ disk/loopback.c 8 Nov 2005 22:35:59 -0000 @@ -240,24 +240,8 @@ static struct grub_disk_dev grub_loopbac }; -#ifdef GRUB_UTIL -void -grub_loop_init (void) -{ - grub_register_command ("loopback", grub_cmd_loopback, GRUB_COMMAND_FLAG_BOTH, - "loopback [-d|-p] DEVICENAME FILE", - "Make a device of a file.", options); - grub_disk_dev_register (&grub_loopback_dev); -} -void -grub_loop_fini (void) -{ - grub_unregister_command ("loopback"); - grub_disk_dev_unregister (&grub_loopback_dev); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(loop) { (void)mod; /* To stop warning. */ grub_register_command ("loopback", grub_cmd_loopback, GRUB_COMMAND_FLAG_BOTH, @@ -266,9 +250,9 @@ GRUB_MOD_INIT grub_disk_dev_register (&grub_loopback_dev); } -GRUB_MOD_FINI +GRUB_MOD_FINI(loop) { grub_unregister_command ("loopback"); grub_disk_dev_unregister (&grub_loopback_dev); } -#endif /* ! GRUB_UTIL */ + Index: font/manager.c =================================================================== RCS file: /cvsroot/grub/grub2/font/manager.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 manager.c --- font/manager.c 17 Jul 2005 20:26:07 -0000 1.5 +++ font/manager.c 8 Nov 2005 22:35:59 -0000 @@ -232,7 +232,7 @@ font_command (struct grub_arg_list *stat return 0; } -GRUB_MOD_INIT +GRUB_MOD_INIT(fontmanager) { (void) mod; /* Stop warning. */ grub_register_command ("font", font_command, GRUB_COMMAND_FLAG_BOTH, @@ -240,7 +240,7 @@ GRUB_MOD_INIT "Specify one or more font files to display.", 0); } -GRUB_MOD_FINI +GRUB_MOD_FINI(fontmanager) { grub_unregister_command ("font"); } Index: fs/affs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/affs.c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 affs.c --- fs/affs.c 7 Oct 2005 19:25:46 -0000 1.1 +++ fs/affs.c 8 Nov 2005 22:35:59 -0000 @@ -553,27 +553,16 @@ static struct grub_fs grub_affs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_affs_init (void) -{ - grub_fs_register (&grub_affs_fs); -} - -void -grub_affs_fini (void) -{ - grub_fs_unregister (&grub_affs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(affs) { grub_fs_register (&grub_affs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(affs) { grub_fs_unregister (&grub_affs_fs); } -#endif /* ! GRUB_UTIL */ + Index: fs/ext2.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/ext2.c,v retrieving revision 1.11 diff -u -p -u -p -r1.11 ext2.c --- fs/ext2.c 13 Dec 2004 17:26:17 -0000 1.11 +++ fs/ext2.c 8 Nov 2005 22:35:59 -0000 @@ -633,27 +633,15 @@ static struct grub_fs grub_ext2_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_ext2_init (void) -{ - grub_fs_register (&grub_ext2_fs); -} - -void -grub_ext2_fini (void) -{ - grub_fs_unregister (&grub_ext2_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(ext2) { grub_fs_register (&grub_ext2_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(ext2) { grub_fs_unregister (&grub_ext2_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/fat.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/fat.c,v retrieving revision 1.12 diff -u -p -u -p -r1.12 fat.c --- fs/fat.c 31 Jul 2005 16:12:29 -0000 1.12 +++ fs/fat.c 8 Nov 2005 22:35:59 -0000 @@ -808,27 +808,16 @@ static struct grub_fs grub_fat_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_fat_init (void) -{ - grub_fs_register (&grub_fat_fs); -} - -void -grub_fat_fini (void) -{ - grub_fs_unregister (&grub_fat_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(fat) { grub_fs_register (&grub_fat_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(fat) { grub_fs_unregister (&grub_fat_fs); } -#endif /* ! GRUB_UTIL */ + Index: fs/hfs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/hfs.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 hfs.c --- fs/hfs.c 1 Nov 2004 16:14:16 -0000 1.3 +++ fs/hfs.c 8 Nov 2005 22:36:00 -0000 @@ -875,27 +875,15 @@ static struct grub_fs grub_hfs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_hfs_init (void) -{ - grub_fs_register (&grub_hfs_fs); -} - -void -grub_hfs_fini (void) -{ - grub_fs_unregister (&grub_hfs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(hfs) { grub_fs_register (&grub_hfs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(hfs) { grub_fs_unregister (&grub_hfs_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/iso9660.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/iso9660.c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 iso9660.c --- fs/iso9660.c 1 Nov 2004 16:14:16 -0000 1.1 +++ fs/iso9660.c 8 Nov 2005 22:36:00 -0000 @@ -764,27 +764,15 @@ static struct grub_fs grub_iso9660_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_iso9660_init (void) -{ - grub_fs_register (&grub_iso9660_fs); -} - -void -grub_iso9660_fini (void) -{ - grub_fs_unregister (&grub_iso9660_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(iso9660) { grub_fs_register (&grub_iso9660_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(iso9660) { grub_fs_unregister (&grub_iso9660_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/jfs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/jfs.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 jfs.c --- fs/jfs.c 1 Nov 2004 16:14:16 -0000 1.2 +++ fs/jfs.c 8 Nov 2005 22:36:00 -0000 @@ -870,27 +870,15 @@ static struct grub_fs grub_jfs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_jfs_init (void) -{ - grub_fs_register (&grub_jfs_fs); -} - -void -grub_jfs_fini (void) -{ - grub_fs_unregister (&grub_jfs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(jfs) { grub_fs_register (&grub_jfs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(jfs) { grub_fs_unregister (&grub_jfs_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/minix.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/minix.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 minix.c --- fs/minix.c 21 Jan 2005 22:34:18 -0000 1.3 +++ fs/minix.c 8 Nov 2005 22:36:00 -0000 @@ -597,27 +597,15 @@ static struct grub_fs grub_minix_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_minix_init (void) -{ - grub_fs_register (&grub_minix_fs); -} - -void -grub_minix_fini (void) -{ - grub_fs_unregister (&grub_minix_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(minix) { grub_fs_register (&grub_minix_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(minix) { grub_fs_unregister (&grub_minix_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/sfs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/sfs.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 sfs.c --- fs/sfs.c 11 Oct 2005 16:42:32 -0000 1.2 +++ fs/sfs.c 8 Nov 2005 22:36:00 -0000 @@ -605,27 +605,15 @@ static struct grub_fs grub_sfs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_sfs_init (void) -{ - grub_fs_register (&grub_sfs_fs); -} - -void -grub_sfs_fini (void) -{ - grub_fs_unregister (&grub_sfs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(sfs) { grub_fs_register (&grub_sfs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(sfs) { grub_fs_unregister (&grub_sfs_fs); } -#endif /* ! GRUB_UTIL */ Index: fs/ufs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/ufs.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 ufs.c --- fs/ufs.c 1 Nov 2004 16:14:16 -0000 1.2 +++ fs/ufs.c 8 Nov 2005 22:36:00 -0000 @@ -668,27 +668,16 @@ static struct grub_fs grub_ufs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_ufs_init (void) -{ - grub_fs_register (&grub_ufs_fs); -} - -void -grub_ufs_fini (void) -{ - grub_fs_unregister (&grub_ufs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(ufs) { grub_fs_register (&grub_ufs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(ufs) { grub_fs_unregister (&grub_ufs_fs); } -#endif /* ! GRUB_UTIL */ + Index: fs/xfs.c =================================================================== RCS file: /cvsroot/grub/grub2/fs/xfs.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 xfs.c --- fs/xfs.c 15 Oct 2005 21:33:38 -0000 1.5 +++ fs/xfs.c 8 Nov 2005 22:36:00 -0000 @@ -689,27 +689,16 @@ static struct grub_fs grub_xfs_fs = .next = 0 }; -#ifdef GRUB_UTIL -void -grub_xfs_init (void) -{ - grub_fs_register (&grub_xfs_fs); -} - -void -grub_xfs_fini (void) -{ - grub_fs_unregister (&grub_xfs_fs); -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(xfs) { grub_fs_register (&grub_xfs_fs); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(xfs) { grub_fs_unregister (&grub_xfs_fs); } -#endif /* ! GRUB_UTIL */ + Index: hello/hello.c =================================================================== RCS file: /cvsroot/grub/grub2/hello/hello.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 hello.c --- hello/hello.c 4 Apr 2004 13:46:00 -0000 1.3 +++ hello/hello.c 8 Nov 2005 22:36:00 -0000 @@ -35,14 +35,14 @@ grub_cmd_hello (struct grub_arg_list *st return 0; } -GRUB_MOD_INIT +GRUB_MOD_INIT(hello) { (void)mod; /* To stop warning. */ grub_register_command ("hello", grub_cmd_hello, GRUB_COMMAND_FLAG_BOTH, "hello", "Say hello", 0); } -GRUB_MOD_FINI +GRUB_MOD_FINI(hello) { grub_unregister_command ("hello"); } Index: include/grub/dl.h =================================================================== RCS file: /cvsroot/grub/grub2/include/grub/dl.h,v retrieving revision 1.9 diff -u -p -u -p -r1.9 dl.h --- include/grub/dl.h 14 Feb 2005 18:41:33 -0000 1.9 +++ include/grub/dl.h 8 Nov 2005 22:36:00 -0000 @@ -25,13 +25,19 @@ #include #include -#define GRUB_MOD_INIT \ +#define GRUB_MOD_INIT(name) \ static void grub_mod_init (grub_dl_t mod) __attribute__ ((used)); \ +void grub_##name##_init (void); \ +void \ +grub_##name##_init (void) { grub_mod_init (0); } \ static void \ grub_mod_init (grub_dl_t mod) -#define GRUB_MOD_FINI \ +#define GRUB_MOD_FINI(name) \ static void grub_mod_fini (void) __attribute__ ((used)); \ +void grub_##name##_fini (void); \ +void \ +grub_##name##_fini (void) { grub_mod_fini (); } \ static void \ grub_mod_fini (void) Index: loader/i386/pc/chainloader.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/chainloader.c,v retrieving revision 1.8 diff -u -p -u -p -r1.8 chainloader.c --- loader/i386/pc/chainloader.c 4 Dec 2004 18:45:45 -0000 1.8 +++ loader/i386/pc/chainloader.c 8 Nov 2005 22:36:00 -0000 @@ -145,7 +145,7 @@ grub_rescue_cmd_chainloader (int argc, c static const char loader_name[] = "chainloader"; -GRUB_MOD_INIT +GRUB_MOD_INIT(chainloader) { grub_rescue_register_command (loader_name, grub_rescue_cmd_chainloader, @@ -153,7 +153,7 @@ GRUB_MOD_INIT my_mod = mod; } -GRUB_MOD_FINI +GRUB_MOD_FINI(chainloader) { grub_rescue_unregister_command (loader_name); } Index: loader/i386/pc/chainloader_normal.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/chainloader_normal.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 chainloader_normal.c --- loader/i386/pc/chainloader_normal.c 17 Jul 2005 20:26:07 -0000 1.2 +++ loader/i386/pc/chainloader_normal.c 8 Nov 2005 22:36:00 -0000 @@ -42,7 +42,7 @@ chainloader_command (struct grub_arg_lis return grub_errno; } -GRUB_MOD_INIT +GRUB_MOD_INIT(chainloader_normal) { (void) mod; /* To stop warning. */ grub_register_command ("chainloader", chainloader_command, @@ -51,7 +51,7 @@ GRUB_MOD_INIT "Prepare to boot another boot loader.", options); } -GRUB_MOD_FINI +GRUB_MOD_FINI(chainloader_normal) { grub_unregister_command ("chainloader"); } Index: loader/i386/pc/linux.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/linux.c,v retrieving revision 1.8 diff -u -p -u -p -r1.8 linux.c --- loader/i386/pc/linux.c 20 Aug 2005 08:25:51 -0000 1.8 +++ loader/i386/pc/linux.c 8 Nov 2005 22:36:00 -0000 @@ -368,7 +368,7 @@ grub_rescue_cmd_initrd (int argc, char * } -GRUB_MOD_INIT +GRUB_MOD_INIT(linux) { grub_rescue_register_command ("linux", grub_rescue_cmd_linux, @@ -379,7 +379,7 @@ GRUB_MOD_INIT my_mod = mod; } -GRUB_MOD_FINI +GRUB_MOD_FINI(linux) { grub_rescue_unregister_command ("linux"); grub_rescue_unregister_command ("initrd"); Index: loader/i386/pc/linux_normal.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/linux_normal.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 linux_normal.c --- loader/i386/pc/linux_normal.c 17 Jul 2005 20:26:07 -0000 1.2 +++ loader/i386/pc/linux_normal.c 8 Nov 2005 22:36:00 -0000 @@ -40,7 +40,7 @@ grub_normal_initrd_command (struct grub_ return grub_errno; } -GRUB_MOD_INIT +GRUB_MOD_INIT(linux_normal) { (void) mod; /* To stop warning. */ grub_register_command ("linux", grub_normal_linux_command, @@ -54,7 +54,7 @@ GRUB_MOD_INIT "Load an initrd.", 0); } -GRUB_MOD_FINI +GRUB_MOD_FINI(linux_normal) { grub_unregister_command ("linux"); grub_unregister_command ("initrd"); Index: loader/i386/pc/multiboot.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/multiboot.c,v retrieving revision 1.8 diff -u -p -u -p -r1.8 multiboot.c --- loader/i386/pc/multiboot.c 22 Aug 2005 17:28:59 -0000 1.8 +++ loader/i386/pc/multiboot.c 8 Nov 2005 22:36:00 -0000 @@ -435,7 +435,7 @@ grub_rescue_cmd_module (int argc, char } -GRUB_MOD_INIT +GRUB_MOD_INIT(multiboot) { grub_rescue_register_command ("multiboot", grub_rescue_cmd_multiboot, "load a multiboot kernel"); @@ -444,7 +444,7 @@ GRUB_MOD_INIT my_mod = mod; } -GRUB_MOD_FINI +GRUB_MOD_FINI(multiboot) { grub_rescue_unregister_command ("multiboot"); grub_rescue_unregister_command ("module"); Index: loader/i386/pc/multiboot_normal.c =================================================================== RCS file: /cvsroot/grub/grub2/loader/i386/pc/multiboot_normal.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 multiboot_normal.c --- loader/i386/pc/multiboot_normal.c 17 Jul 2005 20:26:07 -0000 1.3 +++ loader/i386/pc/multiboot_normal.c 8 Nov 2005 22:36:00 -0000 @@ -40,7 +40,7 @@ grub_normal_cmd_module (struct grub_arg_ return grub_errno; } -GRUB_MOD_INIT +GRUB_MOD_INIT(multiboot_normal) { (void) mod; /* To stop warning. */ grub_register_command ("multiboot", grub_normal_cmd_multiboot, @@ -54,7 +54,7 @@ GRUB_MOD_INIT "Load a Multiboot module.", 0); } -GRUB_MOD_FINI +GRUB_MOD_FINI(multiboot_normal) { grub_unregister_command ("multiboot"); grub_unregister_command ("module"); Index: normal/main.c =================================================================== RCS file: /cvsroot/grub/grub2/normal/main.c,v retrieving revision 1.12 diff -u -p -u -p -r1.12 main.c --- normal/main.c 14 Aug 2005 19:36:55 -0000 1.12 +++ normal/main.c 8 Nov 2005 22:36:00 -0000 @@ -519,33 +519,11 @@ grub_rescue_cmd_normal (int argc, char * grub_enter_normal_mode (argv[0]); } -#ifdef GRUB_UTIL -void -grub_normal_init (void) -{ - grub_set_history (GRUB_DEFAULT_HISTORY_SIZE); - - /* Register a command "normal" for the rescue mode. */ - grub_rescue_register_command ("normal", grub_rescue_cmd_normal, - "enter normal mode"); - - /* This registers some built-in commands. */ - grub_command_init (); - -} - -void -grub_normal_fini (void) -{ - grub_set_history (0); - grub_rescue_unregister_command ("normal"); - -} -#else /* ! GRUB_UTIL */ -GRUB_MOD_INIT +GRUB_MOD_INIT(normal) { /* Normal mode shouldn't be unloaded. */ - grub_dl_ref (mod); + if (mod) + grub_dl_ref (mod); grub_set_history (GRUB_DEFAULT_HISTORY_SIZE); @@ -557,9 +535,9 @@ GRUB_MOD_INIT grub_command_init (); } -GRUB_MOD_FINI +GRUB_MOD_FINI(normal) { grub_set_history (0); grub_rescue_unregister_command ("normal"); } -#endif /* ! GRUB_UTIL */ + Index: partmap/amiga.c =================================================================== RCS file: /cvsroot/grub/grub2/partmap/amiga.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 amiga.c --- partmap/amiga.c 18 Aug 2005 03:14:39 -0000 1.3 +++ partmap/amiga.c 8 Nov 2005 22:36:00 -0000 @@ -211,27 +211,15 @@ static struct grub_partition_map grub_am .get_name = amiga_partition_map_get_name }; -#ifdef GRUB_UTIL -void -grub_amiga_partition_map_init (void) -{ - grub_partition_map_register (&grub_amiga_partition_map); -} - -void -grub_amiga_partition_map_fini (void) -{ - grub_partition_map_unregister (&grub_amiga_partition_map); -} -#else -GRUB_MOD_INIT +GRUB_MOD_INIT(amiga_partition_map) { grub_partition_map_register (&grub_amiga_partition_map); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(amiga_partition_map) { grub_partition_map_unregister (&grub_amiga_partition_map); } -#endif Index: partmap/apple.c =================================================================== RCS file: /cvsroot/grub/grub2/partmap/apple.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 apple.c --- partmap/apple.c 18 Aug 2005 03:14:39 -0000 1.5 +++ partmap/apple.c 8 Nov 2005 22:36:00 -0000 @@ -220,27 +220,16 @@ static struct grub_partition_map grub_ap .get_name = apple_partition_map_get_name }; -#ifdef GRUB_UTIL -void -grub_apple_partition_map_init (void) -{ - grub_partition_map_register (&grub_apple_partition_map); -} - -void -grub_apple_partition_map_fini (void) -{ - grub_partition_map_unregister (&grub_apple_partition_map); -} -#else -GRUB_MOD_INIT +GRUB_MOD_INIT(apple_partition_map) { grub_partition_map_register (&grub_apple_partition_map); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(apple_partition_map) { grub_partition_map_unregister (&grub_apple_partition_map); } -#endif + Index: partmap/pc.c =================================================================== RCS file: /cvsroot/grub/grub2/partmap/pc.c,v retrieving revision 1.5 diff -u -p -u -p -r1.5 pc.c --- partmap/pc.c 20 Aug 2005 07:49:02 -0000 1.5 +++ partmap/pc.c 8 Nov 2005 22:36:00 -0000 @@ -296,27 +296,15 @@ static struct grub_partition_map grub_pc .get_name = pc_partition_map_get_name }; -#ifdef GRUB_UTIL -void -grub_pc_partition_map_init (void) -{ - grub_partition_map_register (&grub_pc_partition_map); -} - -void -grub_pc_partition_map_fini (void) -{ - grub_partition_map_unregister (&grub_pc_partition_map); -} -#else -GRUB_MOD_INIT +GRUB_MOD_INIT(pc_partition_map) { grub_partition_map_register (&grub_pc_partition_map); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(pc_partition_map) { grub_partition_map_unregister (&grub_pc_partition_map); } -#endif Index: partmap/sun.c =================================================================== RCS file: /cvsroot/grub/grub2/partmap/sun.c,v retrieving revision 1.2 diff -u -p -u -p -r1.2 sun.c --- partmap/sun.c 18 Aug 2005 03:14:39 -0000 1.2 +++ partmap/sun.c 8 Nov 2005 22:36:00 -0000 @@ -192,27 +192,16 @@ static struct grub_partition_map grub_su .get_name = sun_partition_map_get_name }; -#ifdef GRUB_UTIL -void -grub_sun_partition_map_init (void) -{ - grub_partition_map_register (&grub_sun_partition_map); -} - -void -grub_sun_partition_map_fini (void) -{ - grub_partition_map_unregister (&grub_sun_partition_map); -} -#else -GRUB_MOD_INIT +GRUB_MOD_INIT(sun_partition_map) { grub_partition_map_register (&grub_sun_partition_map); +#ifndef GRUB_UTIL my_mod = mod; +#endif } -GRUB_MOD_FINI +GRUB_MOD_FINI(sun_partition_map) { grub_partition_map_unregister (&grub_sun_partition_map); } -#endif + Index: term/terminfo.c =================================================================== RCS file: /cvsroot/grub/grub2/term/terminfo.c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 terminfo.c --- term/terminfo.c 3 Sep 2005 16:54:27 -0000 1.1 +++ term/terminfo.c 8 Nov 2005 22:36:00 -0000 @@ -174,7 +174,7 @@ grub_cmd_terminfo (struct grub_arg_list return grub_terminfo_set_current (args[0]); } -GRUB_MOD_INIT +GRUB_MOD_INIT(terminfo) { (void) mod; /* To stop warning. */ grub_register_command ("terminfo", grub_cmd_terminfo, GRUB_COMMAND_FLAG_BOTH, @@ -182,7 +182,7 @@ GRUB_MOD_INIT grub_terminfo_set_current ("vt100"); } -GRUB_MOD_FINI +GRUB_MOD_FINI(terminfo) { grub_unregister_command ("terminfo"); } Index: term/i386/pc/serial.c =================================================================== RCS file: /cvsroot/grub/grub2/term/i386/pc/serial.c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 serial.c --- term/i386/pc/serial.c 3 Sep 2005 16:54:27 -0000 1.1 +++ term/i386/pc/serial.c 8 Nov 2005 22:36:00 -0000 @@ -616,7 +616,7 @@ grub_cmd_serial (struct grub_arg_list *s return hwiniterr; } -GRUB_MOD_INIT +GRUB_MOD_INIT(serial) { (void) mod; /* To stop warning. */ grub_register_command ("serial", grub_cmd_serial, GRUB_COMMAND_FLAG_BOTH, @@ -629,7 +629,7 @@ GRUB_MOD_INIT serial_settings.stop_bits = UART_1_STOP_BIT; } -GRUB_MOD_FINI +GRUB_MOD_FINI(serial) { grub_unregister_command ("serial"); if (registered == 1) /* Unregister terminal only if registered. */ Index: term/i386/pc/vesafb.c =================================================================== RCS file: /cvsroot/grub/grub2/term/i386/pc/vesafb.c,v retrieving revision 1.3 diff -u -p -u -p -r1.3 vesafb.c --- term/i386/pc/vesafb.c 20 Aug 2005 05:26:51 -0000 1.3 +++ term/i386/pc/vesafb.c 8 Nov 2005 22:36:01 -0000 @@ -142,7 +142,7 @@ grub_virtual_screen_setup (grub_uint32_t } static grub_err_t -grub_vesafb_init (void) +grub_vesafb_mod_init (void) { grub_uint32_t use_mode = GRUB_VBE_DEFAULT_VIDEO_MODE; struct grub_vbe_info_block controller_info; @@ -200,7 +200,7 @@ grub_vesafb_init (void) } static grub_err_t -grub_vesafb_fini (void) +grub_vesafb_mod_fini (void) { grub_virtual_screen_free (); @@ -589,8 +589,8 @@ grub_vesafb_setcursor (int on) static struct grub_term grub_vesafb_term = { .name = "vesafb", - .init = grub_vesafb_init, - .fini = grub_vesafb_fini, + .init = grub_vesafb_mod_init, + .fini = grub_vesafb_mod_fini, .putchar = grub_vesafb_putchar, .getcharwidth = grub_vesafb_getcharwidth, .checkkey = grub_console_checkkey, @@ -606,13 +606,13 @@ static struct grub_term grub_vesafb_term .next = 0 }; -GRUB_MOD_INIT +GRUB_MOD_INIT(vesafb) { my_mod = mod; grub_term_register (&grub_vesafb_term); } -GRUB_MOD_FINI +GRUB_MOD_FINI(vesafb) { grub_term_unregister (&grub_vesafb_term); } Index: term/i386/pc/vga.c =================================================================== RCS file: /cvsroot/grub/grub2/term/i386/pc/vga.c,v retrieving revision 1.9 diff -u -p -u -p -r1.9 vga.c --- term/i386/pc/vga.c 20 Aug 2005 05:26:51 -0000 1.9 +++ term/i386/pc/vga.c 8 Nov 2005 22:36:02 -0000 @@ -173,7 +173,7 @@ set_start_address (unsigned int start) } static grub_err_t -grub_vga_init (void) +grub_vga_mod_init (void) { vga_font = grub_vga_get_font (); text_mode = grub_vga_set_mode (0x10); @@ -188,7 +188,7 @@ grub_vga_init (void) } static grub_err_t -grub_vga_fini (void) +grub_vga_mod_fini (void) { set_map_mask (saved_map_mask); grub_vga_set_mode (text_mode); @@ -578,8 +578,8 @@ grub_vga_setcursor (int on) static struct grub_term grub_vga_term = { .name = "vga", - .init = grub_vga_init, - .fini = grub_vga_fini, + .init = grub_vga_mod_init, + .fini = grub_vga_mod_fini, .putchar = grub_vga_putchar, .getcharwidth = grub_vga_getcharwidth, .checkkey = grub_console_checkkey, @@ -595,13 +595,15 @@ static struct grub_term grub_vga_term = .next = 0 }; -GRUB_MOD_INIT +GRUB_MOD_INIT(vga) { +#ifndef GRUB_UTIL my_mod = mod; +#endif grub_term_register (&grub_vga_term); } -GRUB_MOD_FINI +GRUB_MOD_FINI(vga) { grub_term_unregister (&grub_vga_term); } Index: util/grub-emu.c =================================================================== RCS file: /cvsroot/grub/grub2/util/grub-emu.c,v retrieving revision 1.27 diff -u -p -u -p -r1.27 grub-emu.c --- util/grub-emu.c 6 Nov 2005 22:19:59 -0000 1.27 +++ util/grub-emu.c 8 Nov 2005 22:36:02 -0000 @@ -39,6 +39,8 @@ #include #include +#include + #ifdef __NetBSD__ /* NetBSD uses /boot for its boot block. */ # define DEFAULT_DIRECTORY "/grub" @@ -189,38 +191,9 @@ main (int argc, char *argv[]) /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (args.dev_map); - grub_pc_partition_map_init (); - grub_amiga_partition_map_init (); - grub_apple_partition_map_init (); - grub_sun_partition_map_init (); - - /* Initialize the default modules. */ - grub_iso9660_init (); - grub_xfs_init (); - grub_fat_init (); - grub_ext2_init (); - grub_ufs_init (); - grub_minix_init (); - grub_hfs_init (); - grub_jfs_init (); - grub_xfs_init (); - grub_sfs_init (); - grub_affs_init (); - grub_ls_init (); - grub_boot_init (); - grub_cmp_init (); - grub_cat_init (); - grub_terminal_init (); - grub_loop_init (); - grub_help_init (); - grub_halt_init (); - grub_reboot_init (); - grub_default_init (); - grub_timeout_init (); - grub_configfile_init (); - grub_search_init (); - grub_test_init (); - + + grub_init_all (); + /* XXX: Should normal mode be started by default? */ grub_normal_init (); @@ -228,35 +201,7 @@ main (int argc, char *argv[]) if (setjmp (main_env) == 0) grub_main (); - grub_test_fini (); - grub_search_fini (); - grub_configfile_fini (); - grub_timeout_fini (); - grub_default_fini (); - grub_reboot_fini (); - grub_halt_fini (); - grub_help_fini (); - grub_loop_fini (); - grub_util_biosdisk_fini (); - grub_normal_fini (); - grub_affs_fini (); - grub_sfs_fini (); - grub_xfs_fini (); - grub_ufs_fini (); - grub_ext2_fini (); - grub_minix_fini (); - grub_hfs_fini (); - grub_jfs_fini (); - grub_fat_fini (); - grub_xfs_fini (); - grub_boot_fini (); - grub_cmp_fini (); - grub_cat_fini (); - grub_terminal_fini (); - grub_amiga_partition_map_fini (); - grub_pc_partition_map_fini (); - grub_apple_partition_map_fini (); - grub_sun_partition_map_fini (); + grub_fini_all (); grub_machine_fini ();