# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # qeo8qbb74n92rutd # target_branch: ../mainline/ # testament_sha1: 0d5c612d935b7c6f116130b4c15d715c0d36958c # timestamp: 2010-05-27 22:34:44 +0530 # base_revision_id: address@hidden # db1ym880qz05yxpg # # Begin patch === modified file 'Makefile.in' --- Makefile.in 2010-05-18 11:55:26 +0000 +++ Makefile.in 2010-05-25 10:39:03 +0000 @@ -44,7 +44,6 @@ # Internationalization library. LIBINTL = @LIBINTL@ -TARGET_NO_MODULES = @TARGET_NO_MODULES@ # Util library. LIBUTIL = @LIBUTIL@ @@ -187,17 +186,10 @@ -include $(wildcard $(GRUB_CONTRIB)/*/conf/common.mk) endif -ifeq ($(TARGET_NO_MODULES), yes) - TARGET_CFLAGS += -DGRUB_TARGET_NO_MODULES=1 - CFLAGS += -DGRUB_TARGET_NO_MODULES=1 -endif - ### General targets. CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA) po/*.mo -ifneq ($(TARGET_NO_MODULES), yes) pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst -endif moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk cat $(DEFSYMFILES) /dev/null \ | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \ @@ -298,7 +290,7 @@ ) > $@ pkglib_BUILDDIR += config.h grub_script.tab.h -all-local: $(PROGRAMS) $(GRUB_EMU) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(INFOS) $(MKFILES) $(foreach lang, $(LINGUAS), po/$(lang).mo) +all-local: $(PROGRAMS) $(GRUB_EMU) $(GRUB_EMU_LITE) $(PKGLIB) $(PKGDATA) $(SCRIPTS) $(INFOS) $(MKFILES) $(foreach lang, $(LINGUAS), po/$(lang).mo) install: install-local @@ -319,7 +311,7 @@ $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(pkgdatadir)/$$dest; \ done $(SHELL) $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 - @list='$(bin_UTILITIES) $(GRUB_EMU)'; for file in $$list; do \ + @list='$(bin_UTILITIES) $(GRUB_EMU) $(GRUB_EMU_LITE)'; for file in $$list; do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(bindir)/$$dest; \ @@ -395,7 +387,7 @@ dest="`echo $$file | sed 's,.*/,,'`"; \ rm -f $(DESTDIR)$(pkgdatadir)/$$dest; \ done - @list='$(bin_UTILITIES) $(bin_SCRIPTS) $(GRUB_EMU)'; for file in $$list; do \ + @list='$(bin_UTILITIES) $(bin_SCRIPTS) $(GRUB_EMU) $(GRUB_EMU_LITE)'; for file in $$list; do \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ rm -f $(DESTDIR)$(bindir)/$$dest; \ rm -f $(DESTDIR)$(mandir)/man1/$$dest.1; \ === modified file 'commands/parttool.c' --- commands/parttool.c 2010-05-03 11:17:12 +0000 +++ commands/parttool.c 2010-05-04 04:17:48 +0000 @@ -175,7 +175,7 @@ } /* Load modules. */ -#if !GRUB_NO_MODULES + if (! grub_no_autoload) { const char *prefix; prefix = grub_env_get ("prefix"); @@ -233,7 +233,6 @@ /* Ignore errors. */ grub_errno = GRUB_ERR_NONE; } -#endif if (argc == 1) return show_help (); === modified file 'conf/any-emu.rmk' --- conf/any-emu.rmk 2010-05-06 03:15:39 +0000 +++ conf/any-emu.rmk 2010-05-28 00:04:31 +0000 @@ -1,6 +1,9 @@ # -*- makefile -*- -COMMON_CFLAGS += -nostdinc -isystem $(shell $(TARGET_CC) -print-file-name=include) +ifeq ($(target_cpu), sparc64) +COMMON_CFLAGS += -mno-app-regs +COMMON_LDFLAGS += -mno-relax +endif kernel_img_RELOCATABLE = yes pkglib_PROGRAMS = kernel.img @@ -20,17 +23,6 @@ kernel_img_LDFLAGS = $(COMMON_LDFLAGS) TARGET_NO_STRIP = yes -ifneq ($(TARGET_NO_MODULES), yes) -kernel_img_SOURCES += symlist.c kern/$(target_cpu)/dl.c -ifneq ($(target_cpu), i386) -ifneq ($(target_cpu), x86_64) -kernel_img_SOURCES += kern/$(target_cpu)/cache.S -endif -endif -else -kernel_img_SOURCES += grub_emu_init.c -endif - # For halt.mod. pkglib_MODULES += halt.mod halt_mod_SOURCES = commands/halt.c @@ -45,6 +37,9 @@ endif grub_emu_LDFLAGS = $(LIBCURSES) +ifeq ($(target_cpu), sparc64) +grub_emu_LDFLAGS += -m64 -melf64_sparc -mno-relax +endif ifeq ($(enable_grub_emu_usb), yes) kernel_img_HEADERS += libusb.h @@ -102,13 +97,32 @@ rm -f $@; echo $(pkglib_MODULES) | sh $(srcdir)/genemuinit.sh $(NM) > $@ DISTCLEANFILES += grub_emu_init.c +grub_emu_init.o: grub_emu_init.c grub_emu_init.h + rm -f $@; $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"grub_init.c\" -c -o $@ $< +CLEANFILES += grub_emu_init.o + +kern_emu_lite.o: kern/emu/lite.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/lite.c\" -c -o $@ $< +CLEANFILES += kern_emu_lite.o + +kern_emu_full.o: kern/emu/full.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"kern/emu/full.c\" -c -o $@ $< +CLEANFILES += kern_emu_full.o + +kern_emu_cache.o: kern/emu/cache.S + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(TARGET_ASFLAGS) -DGRUB_FILE=\"kern/emu/cache.S\" -c -o $@ $< +CLEANFILES += kern_emu_cache.o + +symlist.o: symlist.c + $(TARGET_CC) $(COMMON_CFLAGS) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -DGRUB_FILE=\"symlist.c\" -c -o $@ $< +CLEANFILES += symlist.o + +CLEANFILES += grub-emu-lite +grub-emu-lite: kern_emu_lite.o kern_emu_cache.o symlist.o kernel.img + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) +GRUB_EMU_LITE=grub-emu-lite + CLEANFILES += grub-emu -ifneq ($(TARGET_NO_MODULES), yes) -grub-emu: $(pkglib_PROGRAMS) - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -else -grub-emu: $(pkglib_MODULES) $(pkglib_PROGRAMS) - $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) -endif +grub-emu: $(PREMODFILES) kern_emu_full.o grub_emu_init.o kernel.img + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) GRUB_EMU=grub-emu - === modified file 'configure.ac' --- configure.ac 2010-05-18 11:33:35 +0000 +++ configure.ac 2010-05-26 11:23:43 +0000 @@ -54,14 +54,12 @@ amd64) target_cpu=x86_64 ;; sparc) target_cpu=sparc64 ;; mipsel|mips64el) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1"; + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPSEL=1"; ;; mips|mips64) - target_cpu=mips; - TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1"; - CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1"; + target_cpu=mips; + cpu_CPPFLAGS="-DGRUB_CPU_MIPS=1"; ;; esac @@ -136,25 +134,29 @@ esac case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; - multiboot) machine_CFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; - efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;; - ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; - qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;; - pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; - emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;; - yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; - qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + coreboot) machine_CPPFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CPPFLAGS="-DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="-DGRUB_MACHINE_EFI=1" ;; + ieee1275) machine_CPPFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;; + qemu) machine_CPPFLAGS="-DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="-DGRUB_MACHINE_EMU=1" ;; + yeeloong) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; + qemu-mips) machine_CPPFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; esac case "$target_cpu" in - mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;; - sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;; + i386) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_I386";; + x86_64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_X86_64";; + powerpc) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_POWERPC";; + mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;; # cpu_CPPFLAGS handled above + sparc64) cpu_CPPFLAGS="$cpu_CPPFLAGS -DGRUB_CPU_SPARC64"; + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;; esac -machine_CFLAGS="$machine_CFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +machine_CPPFLAGS="$machine_CPPFLAGS -DMACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" -CFLAGS="$CFLAGS $machine_CFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS" -TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS" +CPPFLAGS="$CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +TARGET_ASFLAGS="$TARGET_ASFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +TARGET_CFLAGS="$TARGET_CFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) @@ -609,10 +611,6 @@ [AS_HELP_STRING([--enable-grub-emu-pci], [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) -AC_ARG_ENABLE([grub-emu-modules], - [AS_HELP_STRING([--enable-grub-emu-modules], - [Support module loading in `grub-emu' debugging utility (default=no)])]) - if test "$platform" = emu; then missing_ncurses= [# Check for curses libraries.] @@ -631,19 +629,6 @@ AC_MSG_ERROR([grub-emu can't be compiled without ncurses]) fi -if test x"$enable_grub_emu_modules" = xyes ; then - TARGET_NO_MODULES=no -else - TARGET_NO_MODULES=yes -fi -AC_SUBST(TARGET_NO_MODULES) - -if test "$TARGET_NO_MODULES" = yes ; then - # Do not convert modules, otherwise linkage may fail (Cygwin only). - # FIXME: Should be checked above before TARGET_OBJ2ELF is set first. - TARGET_OBJ2ELF= -fi - if test x"$enable_grub_emu_usb" = xno ; then grub_emu_usb_excuse="explicitly disabled" fi @@ -837,11 +822,6 @@ else echo PCI support for grub-emu: No "($grub_emu_pci_excuse)" fi -if [ x"$TARGET_NO_MODULES" = xno ]; then -echo Module support for grub-emu: Yes -else -echo Module support for grub-emu: No -fi fi if [ x"$enable_mm_debug" = xyes ]; then echo With memory debugging: Yes === modified file 'genmk.rb' --- genmk.rb 2010-04-09 23:25:46 +0000 +++ genmk.rb 2010-05-28 00:04:31 +0000 @@ -143,13 +143,6 @@ MOSTLYCLEAN_MODULE_TARGETS += address@hidden@rule_count} UNDSYMFILES += #{undsym} -ifeq ($(TARGET_NO_MODULES), yes) address@hidden: #{pre_obj} $(TARGET_OBJ2ELF) - -rm -f $@ - $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} - if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi - if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi -else ifneq ($(TARGET_APPLE_CC),1) address@hidden: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) -rm -f $@ @@ -164,11 +157,11 @@ $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -ew2030 -ew2050 -nu -nd address@hidden $@ -rm -f address@hidden endif -endif #{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} -rm -f $@ $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{objs_str} +PREMODFILES += #{pre_obj} #{mod_obj}: #{mod_src} $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{mod_src}\\\" -c -o $@ $< === modified file 'include/grub/cache.h' --- include/grub/cache.h 2010-02-06 23:52:31 +0000 +++ include/grub/cache.h 2010-05-26 04:26:59 +0000 @@ -23,7 +23,8 @@ #include #include -#if defined (__i386__) || defined (__x86_64__) +#if defined (__i386__) || defined (__x86_64__) || \ + (defined (GRUB_MACHINE_EMU) && GRUB_MACHINE_EMU) static inline void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) === modified file 'include/grub/dl.h' --- include/grub/dl.h 2010-04-27 08:27:14 +0000 +++ include/grub/dl.h 2010-05-25 10:39:03 +0000 @@ -91,22 +91,17 @@ int EXPORT_FUNC(grub_dl_unload) (grub_dl_t mod); void grub_dl_unload_unneeded (void); void grub_dl_unload_all (void); -#if defined (GRUB_UTIL) || defined (GRUB_TARGET_NO_MODULES) -#define GRUB_NO_MODULES 1 -#else -#define GRUB_NO_MODULES 0 -#endif int EXPORT_FUNC(grub_dl_ref) (grub_dl_t mod); int EXPORT_FUNC(grub_dl_unref) (grub_dl_t mod); void EXPORT_FUNC(grub_dl_iterate) (int (*hook) (grub_dl_t mod)); grub_dl_t EXPORT_FUNC(grub_dl_get) (const char *name); -grub_err_t grub_dl_register_symbol (const char *name, void *addr, - grub_dl_t mod); +grub_err_t EXPORT_FUNC(grub_dl_register_symbol) (const char *name, void *addr, + grub_dl_t mod); grub_err_t grub_arch_dl_check_header (void *ehdr); grub_err_t grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr); -#if defined (_mips) && ! GRUB_NO_MODULES +#if defined (_mips) && (! defined (GRUB_MACHINE_EMU) || ! GRUB_MACHINE_EMU) #define GRUB_LINKER_HAVE_INIT 1 void grub_arch_dl_init_linker (void); #endif === modified file 'include/grub/emu/misc.h' --- include/grub/emu/misc.h 2010-05-06 03:15:39 +0000 +++ include/grub/emu/misc.h 2010-05-26 04:28:23 +0000 @@ -23,6 +23,7 @@ extern int verbosity; extern const char *program_name; +void grub_emu_init (void); void grub_init_all (void); void grub_fini_all (void); @@ -46,5 +47,6 @@ #endif char * EXPORT_FUNC(xasprintf) (const char *fmt, ...); +char * canonicalize_file_name (const char *path); #endif /* GRUB_EMU_MISC_H */ === modified file 'include/grub/misc.h' --- include/grub/misc.h 2010-04-11 19:24:21 +0000 +++ include/grub/misc.h 2010-05-04 04:17:48 +0000 @@ -50,6 +50,9 @@ /* XXX: If grub_memmove is too slow, we must implement grub_memcpy. */ #define grub_memcpy(d,s,n) grub_memmove ((d), (s), (n)) +/* Flag to control module autoloading in normal mode. */ +extern int EXPORT_VAR(grub_no_autoload); + void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); === added file 'kern/emu/cache.S' --- kern/emu/cache.S 1970-01-01 00:00:00 +0000 +++ kern/emu/cache.S 2010-05-06 06:08:35 +0000 @@ -0,0 +1,19 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(GRUB_CPU_I386) +/* Nothing is necessary. */ +#elif defined(GRUB_CPU_X86_64) +/* Nothing is necessary. */ +#elif defined(GRUB_CPU_SPARC64) +#include "../sparc64/cache.S" +#elif defined(GRUB_CPU_MIPS) +#include "../mips/cache.S" +#elif defined(GRUB_CPU_MIPSEL) +#include "../mips/cache.S" +#elif defined(GRUB_CPU_POWERPC) +#include "../powerpc/cache.S" +#else +#error "No target cpu type is defined" +#endif === added file 'kern/emu/full.c' --- kern/emu/full.c 1970-01-01 00:00:00 +0000 +++ kern/emu/full.c 2010-05-06 06:08:35 +0000 @@ -0,0 +1,50 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +void +grub_register_exported_symbols (void) +{ +} + +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + (void) ehdr; + return GRUB_ERR_BAD_MODULE; +} + +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) +{ + (void) mod; + (void) ehdr; + return GRUB_ERR_BAD_MODULE; +} + +void +grub_emu_init (void) +{ + grub_no_autoload = 1; +} === added file 'kern/emu/lite.c' --- kern/emu/lite.c 1970-01-01 00:00:00 +0000 +++ kern/emu/lite.c 2010-05-06 06:08:35 +0000 @@ -0,0 +1,42 @@ +#include +#include + +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(GRUB_CPU_I386) +#include "../i386/dl.c" +#elif defined(GRUB_CPU_X86_64) +#include "../x86_64/dl.c" +#elif defined(GRUB_CPU_SPARC64) +#include "../sparc64/dl.c" +#elif defined(GRUB_CPU_MIPS) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_MIPSEL) +#include "../mips/dl.c" +#elif defined(GRUB_CPU_POWERPC) +#include "../powerpc/dl.c" +#else +#error "No target cpu type is defined" +#endif + +/* grub-emu-lite supports dynamic module loading, so it won't have any + embedded modules. */ +void +grub_init_all (void) +{ + return; +} + +void +grub_fini_all (void) +{ + return; +} + +void +grub_emu_init (void) +{ + return; +} === modified file 'kern/emu/main.c' --- kern/emu/main.c 2010-05-04 03:39:03 +0000 +++ kern/emu/main.c 2010-05-04 04:17:48 +0000 @@ -57,25 +57,6 @@ return 0; } -#if GRUB_NO_MODULES -grub_err_t -grub_arch_dl_check_header (void *ehdr) -{ - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} - -grub_err_t -grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) -{ - (void) mod; - (void) ehdr; - - return GRUB_ERR_BAD_MODULE; -} -#endif - void grub_reboot (void) { @@ -154,10 +135,7 @@ void grub_hostfs_fini (void); void grub_host_init (void); void grub_host_fini (void); -#if GRUB_NO_MODULES -void grub_init_all (void); -void grub_fini_all (void); -#endif +void grub_emu_init (void); int main (int argc, char *argv[]) @@ -216,6 +194,7 @@ } signal (SIGINT, SIG_IGN); + grub_emu_init (); grub_console_init (); grub_host_init (); grub_hostfs_init (); @@ -223,9 +202,7 @@ /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); -#if GRUB_NO_MODULES grub_init_all (); -#endif /* Make sure that there is a root device. */ if (! root_dev) @@ -255,9 +232,7 @@ if (setjmp (main_env) == 0) grub_main (); -#if GRUB_NO_MODULES grub_fini_all (); -#endif grub_hostfs_fini (); grub_host_fini (); @@ -287,10 +262,3 @@ } #endif - -#if GRUB_NO_MODULES -void -grub_register_exported_symbols (void) -{ -} -#endif === modified file 'kern/main.c' --- kern/main.c 2010-05-01 19:32:23 +0000 +++ kern/main.c 2010-05-04 04:17:48 +0000 @@ -30,6 +30,8 @@ #include #include +int grub_no_autoload; + void grub_module_iterate (int (*hook) (struct grub_module_header *header)) { === modified file 'normal/main.c' --- normal/main.c 2010-05-01 18:28:07 +0000 +++ normal/main.c 2010-05-04 04:17:48 +0000 @@ -476,10 +476,13 @@ static void read_lists (const char *val) { - read_command_list (val); - read_fs_list (val); - read_crypto_list (val); - read_terminal_list (val); + if (! grub_no_autoload) + { + read_command_list (val); + read_fs_list (val); + read_crypto_list (val); + read_terminal_list (val); + } } static char * === modified file 'util/misc.c' --- util/misc.c 2010-05-20 22:16:10 +0000 +++ util/misc.c 2010-05-26 04:28:23 +0000 @@ -185,12 +185,10 @@ { } -#if GRUB_NO_MODULES void grub_register_exported_symbols (void) { } -#endif #ifdef __MINGW32__ @@ -214,14 +212,6 @@ #endif -#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_NO_MODULES -void -grub_arch_sync_caches (void *address __attribute__ ((unused)), - grub_size_t len __attribute__ ((unused))) -{ -} -#endif - #ifdef __MINGW32__ void sync (void) # Begin bundle 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