From 02cf7c5e6af716ee3442d387780024c43cf84c5e Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Sat, 27 Apr 2013 02:00:16 +0200
Subject: [PATCH 360/482] Make 'make check' work on emu.
---
ChangeLog | 4 +++
grub-core/commands/parttool.c | 2 +-
grub-core/gensymlist.sh | 2 +-
grub-core/kern/dl.c | 3 +++
grub-core/kern/emu/full.c | 12 ++-------
grub-core/kern/emu/lite.c | 13 ++-------
grub-core/kern/emu/main.c | 6 -----
grub-core/normal/main.c | 2 +-
include/grub/emu/misc.h | 2 --
include/grub/misc.h | 6 ++---
tests/cdboot_test.in | 2 ++
tests/fddboot_test.in | 2 ++
tests/hddboot_test.in | 2 ++
tests/netboot_test.in | 2 ++
tests/partmap_test.in | 8 +-----
tests/util/grub-shell.in | 63 ++++++++++++++++++++++++++++++++++++++-----
16 files changed, 82 insertions(+), 49 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 237ca05..f4306c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2013-04-26 Vladimir Serbinenko <phcoder@gmail.com>
+ Make 'make check' work on emu.
+
+2013-04-26 Vladimir Serbinenko <phcoder@gmail.com>
+
Replace libcurses with our own vt100 handling for the ease of testing
and decreasing prerequisites.
diff --git a/grub-core/commands/parttool.c b/grub-core/commands/parttool.c
index 0f9b651..f144c51 100644
--- a/grub-core/commands/parttool.c
+++ b/grub-core/commands/parttool.c
@@ -179,7 +179,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
}
/* Load modules. */
- if (! grub_no_autoload)
+ if (! grub_no_modules)
{
const char *prefix;
prefix = grub_env_get ("prefix");
diff --git a/grub-core/gensymlist.sh b/grub-core/gensymlist.sh
index a13d7cc..5beaabd 100644
--- a/grub-core/gensymlist.sh
+++ b/grub-core/gensymlist.sh
@@ -59,7 +59,7 @@ EOF
| grep -v '^#' \
| sed -n \
-e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/ {"\1", \1, 1},/;p;}' \
- -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/ {"\1", \&\1, 0},/;p;}' \
+ -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/ {"\1", (void *) \&\1, 0},/;p;}' \
| sort -u
cat <<EOF
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
index c6d9ec9..641146d 100644
--- a/grub-core/kern/dl.c
+++ b/grub-core/kern/dl.c
@@ -718,6 +718,9 @@ grub_dl_load (const char *name)
if (mod)
return mod;
+ if (grub_no_modules)
+ return 0;
+
if (! grub_dl_dir) {
grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
return 0;
diff --git a/grub-core/kern/emu/full.c b/grub-core/kern/emu/full.c
index b167a14..97d59fd 100644
--- a/grub-core/kern/emu/full.c
+++ b/grub-core/kern/emu/full.c
@@ -24,6 +24,8 @@
#include <grub/emu/misc.h>
#include <grub/disk.h>
+const int grub_no_modules = 1;
+
void
grub_register_exported_symbols (void)
{
@@ -44,12 +46,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
return GRUB_ERR_BAD_MODULE;
}
-void
-grub_emu_init (void)
-{
- grub_no_autoload = 1;
-}
-
#if defined (__ia64__) || defined (__powerpc__)
void grub_arch_dl_get_tramp_got_size (const void *ehdr __attribute__ ((unused)),
grub_size_t *tramp, grub_size_t *got)
@@ -66,7 +62,3 @@ grub_arch_dl_init_linker (void)
}
#endif
-void
-grub_emu_post_init (void)
-{
-}
diff --git a/grub-core/kern/emu/lite.c b/grub-core/kern/emu/lite.c
index 947c669..00b811b 100644
--- a/grub-core/kern/emu/lite.c
+++ b/grub-core/kern/emu/lite.c
@@ -21,6 +21,8 @@
#error "No target cpu type is defined"
#endif
+const int grub_no_modules = 0;
+
/* grub-emu-lite supports dynamic module loading, so it won't have any
embedded modules. */
void
@@ -34,14 +36,3 @@ grub_fini_all (void)
{
return;
}
-
-void
-grub_emu_init (void)
-{
- return;
-}
-
-void
-grub_emu_post_init (void)
-{
-}
diff --git a/grub-core/kern/emu/main.c b/grub-core/kern/emu/main.c
index 4a88905..99ef90c 100644
--- a/grub-core/kern/emu/main.c
+++ b/grub-core/kern/emu/main.c
@@ -55,8 +55,6 @@ static jmp_buf main_env;
/* Store the prefix specified by an argument. */
static char *root_dev = NULL, *dir = NULL;
-int grub_no_autoload;
-
grub_addr_t grub_modbase = 0;
void
@@ -171,7 +169,6 @@ void grub_hostfs_init (void);
void grub_hostfs_fini (void);
void grub_host_init (void);
void grub_host_fini (void);
-void grub_emu_init (void);
int
main (int argc, char *argv[])
@@ -208,7 +205,6 @@ main (int argc, char *argv[])
}
signal (SIGINT, SIG_IGN);
- grub_emu_init ();
grub_console_init ();
grub_host_init ();
@@ -219,8 +215,6 @@ main (int argc, char *argv[])
grub_hostfs_init ();
- grub_emu_post_init ();
-
/* Make sure that there is a root device. */
if (! root_dev)
root_dev = grub_strdup ("host");
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
index 9aaa3b2..2f203dd 100644
--- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c
@@ -263,7 +263,7 @@ grub_normal_init_page (struct grub_term_output *term)
static void
read_lists (const char *val)
{
- if (! grub_no_autoload)
+ if (! grub_no_modules)
{
read_command_list (val);
read_fs_list (val);
diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h
index 6423eb9..3c9f07e 100644
--- a/include/grub/emu/misc.h
+++ b/include/grub/emu/misc.h
@@ -44,10 +44,8 @@
extern int verbosity;
extern const char *program_name;
-void grub_emu_init (void);
void grub_init_all (void);
void grub_fini_all (void);
-void grub_emu_post_init (void);
void grub_find_zpool_from_dir (const char *dir,
char **poolname, char **poolfs);
diff --git a/include/grub/misc.h b/include/grub/misc.h
index c953a00..c191c1f 100644
--- a/include/grub/misc.h
+++ b/include/grub/misc.h
@@ -437,10 +437,10 @@ void grub_halt (void) __attribute__ ((noreturn));
#endif
#ifdef GRUB_MACHINE_EMU
-/* Flag to control module autoloading in normal mode. */
-extern int EXPORT_VAR(grub_no_autoload);
+/* Flag to check if module loading is available. */
+extern const int EXPORT_VAR(grub_no_modules);
#else
-#define grub_no_autoload 0
+#define grub_no_modules 0
#endif
static inline void
diff --git a/tests/cdboot_test.in b/tests/cdboot_test.in
index d9a5fb8..097964f 100644
--- a/tests/cdboot_test.in
+++ b/tests/cdboot_test.in
@@ -20,6 +20,8 @@ grubshell=@builddir@/grub-shell
. "@builddir@/grub-core/modinfo.sh"
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ *-emu)
+ exit 0;;
# Flash targets
i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
exit 0;;
diff --git a/tests/fddboot_test.in b/tests/fddboot_test.in
index 7734025..0866fdc 100644
--- a/tests/fddboot_test.in
+++ b/tests/fddboot_test.in
@@ -20,6 +20,8 @@ grubshell=@builddir@/grub-shell
. "@builddir@/grub-core/modinfo.sh"
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ *-emu)
+ exit 0;;
# Flash targets
i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
exit 0;;
diff --git a/tests/hddboot_test.in b/tests/hddboot_test.in
index e76f996..34257a3 100644
--- a/tests/hddboot_test.in
+++ b/tests/hddboot_test.in
@@ -20,6 +20,8 @@ grubshell=@builddir@/grub-shell
. "@builddir@/grub-core/modinfo.sh"
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ *-emu)
+ exit 0;;
# Flash targets
i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
exit 0;;
diff --git a/tests/netboot_test.in b/tests/netboot_test.in
index 8e3f8c9..aeb1db0 100644
--- a/tests/netboot_test.in
+++ b/tests/netboot_test.in
@@ -20,6 +20,8 @@ grubshell=@builddir@/grub-shell
. "@builddir@/grub-core/modinfo.sh"
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ *-emu)
+ exit 0;;
# Flash targets
i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips)
exit 0;;
diff --git a/tests/partmap_test.in b/tests/partmap_test.in
index b222fa1..2d4b54e 100644
--- a/tests/partmap_test.in
+++ b/tests/partmap_test.in
@@ -49,7 +49,7 @@ list_parts () {
outfile="$1"
shift
- echo ls | "${grubshell}" --qemu-opts="-$qemudisk ${imgfile}" \
+ echo ls | "${grubshell}" --disk="${imgfile}" \
--modules=$mod | tr -d "\n\r" > "${outfile}"
cat "${outfile}"
echo
@@ -58,23 +58,19 @@ list_parts () {
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
mips-qemu_mips | mipsel-qemu_mips | i386-qemu | i386-multiboot | i386-coreboot | mipsel-loongson)
disk=ata0
- qemudisk=hda
;;
powerpc-ieee1275)
disk=ieee1275//pci@80000000/mac-io@4/ata-3@20000/disk@0
- qemudisk=hda
# FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label.
exit 0
;;
sparc64-ieee1275)
disk=ieee1275//pci@1fe\,0/pci-ata@5/ide0@500/disk@0
- qemudisk=hda
# FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label.
exit 0
;;
i386-ieee1275)
disk=ieee1275/d
- qemudisk=hdb
# FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label.
exit 0
;;
@@ -83,11 +79,9 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
exit 0 ;;
mipsel-arc)
disk=arc/scsi0/disk0/rdisk0
- qemudisk=hda
;;
*)
disk=hd0
- qemudisk=hda
;;
esac
imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in
index fc52e7b..7c88018 100644
--- a/tests/util/grub-shell.in
+++ b/tests/util/grub-shell.in
@@ -44,6 +44,7 @@ Run GRUB script in a Qemu instance.
--boot=[fd|hd|cd|net] boot method for Qemu instance
--modules=MODULES pre-load specified modules MODULES
--qemu=FILE Name of qemu binary
+ --disk=FILE Attach FILE as a disk
--qemu-opts=OPTIONS extra options to pass to Qemu instance
--files=FILES add files to the image
--mkrescue-arg=ARGS additional arguments to grub-mkrescue
@@ -63,7 +64,16 @@ serial_port=com0
serial_null=
halt_cmd=halt
pseries=n
+disk=hda
case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ *-emu)
+ device_map=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
+ boot=emu
+ console=console
+ disk=0
+ # To skip "Welcome to GRUB" and color setttings
+ trim=1
+ ;;
powerpc-ieee1275)
boot=cd
qemu=qemu-system-ppc
@@ -134,6 +144,7 @@ case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
qemu=qemu-system-i386
console=console
trim=1
+ disk=hdb
;;
i386-qemu)
boot=qemu
@@ -200,6 +211,28 @@ for option in "$@"; do
--qemu-opts=*)
qs=`echo "$option" | sed -e 's/--qemu-opts=//'`
qemuopts="$qemuopts $qs" ;;
+ --disk=*)
+ dsk=`echo "$option" | sed -e 's/--disk=//'`
+ if [ ${grub_modinfo_platform} = emu ]; then
+ echo "(hd$disk) $dsk" >> "$device_map"
+ disk="$((disk+1))"
+ else
+ if [ $disk = error ]; then
+ echo "Too many disks" 1>&2
+ exit 1;
+ fi
+ qemuopts="$qemuopts -$disk $dsk"
+ if [ "$disk" = hda ]; then
+ disk=hdb;
+ elif [ "$disk" = hdb ]; then
+ # CDROM is hdc
+ disk=hdd
+ elif [ "$disk" = hdd ]; then
+ # CDROM is hdc
+ disk=error
+ fi
+ fi
+ ;;
--timeout=*)
timeout=`echo "$option" | sed -e 's/--timeout=//'`
;;
@@ -244,16 +277,27 @@ fi
cfgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
cat <<EOF >${cfgfile}
grubshell=yes
-insmod serial
EOF
+
+
+if [ "${grub_modinfo_platform}" != emu ]; then
+ echo insmod serial >>${cfgfile}
+fi
+
if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = powerpc-ieee1275 ]; then
echo insmod escc >>${cfgfile}
fi
+if [ "${grub_modinfo_platform}" != emu ]; then
+ echo "serial ${serial_port}" >>${cfgfile}
+ term="serial_${serial_port}"
+else
+ term=console
+fi
+
cat <<EOF >>${cfgfile}
-serial ${serial_port}
-terminfo -g 255x255 serial_${serial_port} dumb
-terminal_input serial_${serial_port}
-terminal_output serial_${serial_port}
+terminfo -g 255x255 ${term} dumb
+terminal_input ${term}
+terminal_output ${term}
EOF
trim_head=664cbea8-132f-4770-8aa4-1696d59ac35c
@@ -270,7 +314,7 @@ do
done
cat <<EOF >>${cfgfile}
-source /boot/grub/testcase.cfg
+source \$prefix/testcase.cfg
# Stop serial output to suppress "ACPI shutdown failed" error.
EOF
if [ x$console != x ]; then
@@ -279,7 +323,7 @@ fi
echo "${halt_cmd}" >>${cfgfile}
isofile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
-if [ x$boot != xnet ]; then
+if [ x$boot != xnet ] && [ x$boot != xemu ]; then
pkgdatadir="@builddir@" sh "@builddir@/grub-mkrescue" "--grub-mkimage=${builddir}/grub-mkimage" "--grub-render-label=${builddir}/grub-render-label" "--output=${isofile}" "--override-directory=${builddir}/grub-core" \
--rom-directory="${rom_directory}" ${mkrescue_args} \
"/boot/grub/grub.cfg=${cfgfile}" "/boot/grub/testcase.cfg=${source}" \
@@ -354,6 +398,11 @@ if [ x$boot = xnet ]; then
cp "${cfgfile}" "$netdir/boot/grub/grub.cfg"
cp "${source}" "$netdir/boot/grub/testcase.cfg"
timeout -s KILL $timeout "${qemu}" ${qemuopts} -nographic ${serial_null} -serial file:/dev/stdout -monitor file:/dev/null -boot n -net "user,tftp=$netdir,bootfile=/boot/grub/${grub_modinfo_target_cpu}-${grub_modinfo_platform}/core.$netbootext" -net nic | cat | tr -d "\r" | do_trim
+elif [ x$boot = xemu ]; then
+ grubdir="$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")"
+ cp "${cfgfile}" "$grubdir/grub.cfg"
+ cp "${source}" "$grubdir/testcase.cfg"
+ @builddir@/grub-core/grub-emu -m "$device_map" -d "$grubdir" | tr -d "\r" | do_trim
else
timeout -s KILL $timeout "${qemu}" ${qemuopts} -nographic ${serial_null} -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | cat | tr -d "\r" | do_trim
fi
--
1.8.2.1