# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # target_branch: ../emu-reorg/ # testament_sha1: 677d2ae4b8ae5ac3e6e14344deaafe3af731e92e # timestamp: 2010-04-29 09:56:21 +0530 # base_revision_id: address@hidden # bjgexrt8o76byxuf # # Begin patch === modified file 'Makefile.in' --- Makefile.in 2010-04-17 15:17:36 +0000 +++ Makefile.in 2010-04-29 04:25:46 +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-02-07 03:23:44 +0000 +++ commands/parttool.c 2010-04-29 04:25:46 +0000 @@ -175,7 +175,7 @@ } /* Load modules. */ -#if GRUB_NO_MODULES +#if GRUB_MACHINE_EMU { const char *prefix; prefix = grub_env_get ("prefix"); === modified file 'conf/any-emu.rmk' --- conf/any-emu.rmk 2010-04-27 15:25:12 +0000 +++ conf/any-emu.rmk 2010-04-29 04:25:46 +0000 @@ -20,16 +20,13 @@ 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 +noinst_MODULES = emu-full.mod +emu_full_mod_SOURCES = kern/emu/full.c +emu_full_mod_CFLAGS = $(COMMON_CFLAGS) + +noinst_MODULES = emu-lite.mod +emu_lite_mod_SOURCES = kern/emu/lite.c kern/emu/cache.S symlist.c +emu_lite_mod_CFLAGS = $(COMMON_CFLAGS) # For halt.mod. pkglib_MODULES += halt.mod @@ -102,13 +99,16 @@ 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 + +CLEANFILES += grub-emu-lite +grub-emu-lite: $(pkglib_PROGRAMS) emu-lite.mod + $(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: $(pkglib_MODULES) $(pkglib_PROGRAMS) emu-full.mod grub_emu_init.o + $(CC) -o $@ $^ $(grub_emu_LDFLAGS) $(LDFLAGS) GRUB_EMU=grub-emu - === modified file 'configure.ac' --- configure.ac 2010-04-18 17:57:50 +0000 +++ configure.ac 2010-04-29 04:25:46 +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 @@ -135,23 +133,26 @@ esac case "$platform" in - coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=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" ;; + 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 -CFLAGS="$CFLAGS $machine_CFLAGS" -TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS" -TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS" +CPPFLAGS="$CPPFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" +TARGET_CFLAGS="$TARGET_CFLAGS $cpu_CPPFLAGS $machine_CPPFLAGS" AC_SUBST(host_cpu) AC_SUBST(host_os) @@ -608,10 +609,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.] @@ -630,13 +627,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 x"$enable_grub_emu_usb" = xno ; then grub_emu_usb_excuse="explicitly disabled" fi @@ -814,11 +804,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-04-29 04:25:46 +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,7 +157,6 @@ $(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 $@ === modified file 'include/grub/dl.h' --- include/grub/dl.h 2010-04-27 08:27:14 +0000 +++ include/grub/dl.h 2010-04-29 04:25:46 +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) && ! 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-04-27 15:25:12 +0000 +++ include/grub/emu/misc.h 2010-04-29 04:25:46 +0000 @@ -16,6 +16,7 @@ extern int verbosity; extern const char *program_name; +void grub_emu_init (void); void grub_init_all (void); void grub_fini_all (void); === added file 'kern/emu/cache.S' --- kern/emu/cache.S 1970-01-01 00:00:00 +0000 +++ kern/emu/cache.S 2010-04-29 04:25:46 +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/dl.c' --- kern/emu/dl.c 1970-01-01 00:00:00 +0000 +++ kern/emu/dl.c 2010-04-29 04:25:46 +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) +#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 === added file 'kern/emu/full.c' --- kern/emu/full.c 1970-01-01 00:00:00 +0000 +++ kern/emu/full.c 2010-04-29 04:25:46 +0000 @@ -0,0 +1,49 @@ +/* + * 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 + +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_env_set ("noautoload", "1"); +} === added file 'kern/emu/lite.c' --- kern/emu/lite.c 1970-01-01 00:00:00 +0000 +++ kern/emu/lite.c 2010-04-29 04:25:46 +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-04-27 08:27:14 +0000 +++ kern/emu/main.c 2010-04-29 04:25:46 +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 'normal/main.c' --- normal/main.c 2010-04-09 19:07:24 +0000 +++ normal/main.c 2010-04-29 04:25:46 +0000 @@ -437,10 +437,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_env_get("noautoload")) + { + 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-04-27 15:25:12 +0000 +++ util/misc.c 2010-04-29 04:25:46 +0000 @@ -188,12 +188,10 @@ { } -#if GRUB_NO_MODULES void grub_register_exported_symbols (void) { } -#endif #ifdef __MINGW32__ @@ -217,7 +215,7 @@ #endif -#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_NO_MODULES +#if !(defined (__i386__) || defined (__x86_64__)) && GRUB_MACHINE_EMU void grub_arch_sync_caches (void *address __attribute__ ((unused)), grub_size_t len __attribute__ ((unused))) # Begin bundle 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 ZH/i7kinChIBixE2wA==