summaryrefslogtreecommitdiffstats
path: root/grub-core/tests/boot
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:29:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:29:51 +0000
commit6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e (patch)
tree32451fa3cdd9321fb2591fada9891b2cb70a9cd1 /grub-core/tests/boot
parentInitial commit. (diff)
downloadgrub2-6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e.tar.xz
grub2-6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e.zip
Adding upstream version 2.06.upstream/2.06upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'grub-core/tests/boot')
-rw-r--r--grub-core/tests/boot/kbsd.init-i386.S107
-rw-r--r--grub-core/tests/boot/kbsd.init-x86_64.S94
-rw-r--r--grub-core/tests/boot/kbsd.spec.txt3
-rw-r--r--grub-core/tests/boot/kernel-8086.S50
-rw-r--r--grub-core/tests/boot/kernel-i386.S72
-rw-r--r--grub-core/tests/boot/kfreebsd-aout.cfg4
-rw-r--r--grub-core/tests/boot/kfreebsd.cfg8
-rw-r--r--grub-core/tests/boot/kfreebsd.init-i386.S109
-rw-r--r--grub-core/tests/boot/kfreebsd.init-x86_64.S90
-rw-r--r--grub-core/tests/boot/knetbsd.cfg5
-rw-r--r--grub-core/tests/boot/kopenbsd.cfg5
-rw-r--r--grub-core/tests/boot/kopenbsdlabel.txt3
-rw-r--r--grub-core/tests/boot/linux-ppc.cfg5
-rw-r--r--grub-core/tests/boot/linux.cfg5
-rw-r--r--grub-core/tests/boot/linux.init-i386.S61
-rw-r--r--grub-core/tests/boot/linux.init-mips.S61
-rw-r--r--grub-core/tests/boot/linux.init-ppc.S61
-rw-r--r--grub-core/tests/boot/linux.init-x86_64.S60
-rw-r--r--grub-core/tests/boot/linux16.cfg5
-rw-r--r--grub-core/tests/boot/multiboot.cfg4
-rw-r--r--grub-core/tests/boot/multiboot2.cfg4
-rw-r--r--grub-core/tests/boot/ntldr.cfg4
-rw-r--r--grub-core/tests/boot/pc-chainloader.cfg4
-rw-r--r--grub-core/tests/boot/qemu-shutdown-x86.S17
24 files changed, 841 insertions, 0 deletions
diff --git a/grub-core/tests/boot/kbsd.init-i386.S b/grub-core/tests/boot/kbsd.init-i386.S
new file mode 100644
index 0000000..72ddb7c
--- /dev/null
+++ b/grub-core/tests/boot/kbsd.init-i386.S
@@ -0,0 +1,107 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef TARGET_NETBSD
+#define SYSCALL_RESET 208
+#elif defined (TARGET_OPENBSD)
+#define SYSCALL_RESET 55
+#else
+#error unknown target
+#endif
+
+#define MODE_RDRW 2
+#define FLAGS_NONE 0
+#define SYSCALL_OPEN 5
+#define SYSCALL_WRITE 4
+#define SYSCALL_EXIT 1
+#define SYSCALL_ARCH 165
+#define SYSCALL_INT 0x80
+#define SYSCALL_ARCH_IOPL 2
+
+#define RESET_NOSYNC 0x4
+#define RESET_HALT 0x8
+#define RESET_POWEROFF 0x800
+
+ .section ".init", "ax"
+ .global start,_start
+start:
+_start:
+ /* open. */
+ movl $SYSCALL_OPEN, %eax
+ pushl $FLAGS_NONE
+ pushl $MODE_RDRW
+ leal device, %ebx
+ pushl %ebx
+ pushl $0
+ int $SYSCALL_INT
+ addl $16, %esp
+ movl %eax, %ecx
+
+ /* write. */
+ movl $SYSCALL_WRITE, %eax
+ pushl $(messageend-message)
+ leal message, %ebx
+ pushl %ebx
+ pushl %ecx
+ pushl $0
+ int $SYSCALL_INT
+ addl $16, %esp
+
+ /* IOPL. */
+ movl $SYSCALL_ARCH, %eax
+ pushl $iopl_arg
+ pushl $SYSCALL_ARCH_IOPL
+ pushl $0
+ int $SYSCALL_INT
+ addl $12, %esp
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movl $SYSCALL_RESET, %eax
+ pushl $0
+ pushl $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC)
+ pushl $0
+ int $SYSCALL_INT
+ addl $8, %esp
+
+ /* exit (1). Shouldn't be reached. */
+ movl $SYSCALL_EXIT, %eax
+ pushl $1
+ pushl $0
+ int $SYSCALL_INT
+ .section ".fini", "ax"
+1: jmp 1b
+ .section ".text", "ax"
+1: jmp 1b
+ /* This section is needed for NetBSD to identify the binary. */
+ .section ".note.netbsd.ident", "a"
+ .long 0x7
+ .long 0x4
+ .long 0x1
+ .ascii "NetBSD"
+ .byte 0
+ .data
+device:
+ .ascii "/dev/console"
+ .byte 0
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
+iopl_arg:
+ .long 3
diff --git a/grub-core/tests/boot/kbsd.init-x86_64.S b/grub-core/tests/boot/kbsd.init-x86_64.S
new file mode 100644
index 0000000..7486bc3
--- /dev/null
+++ b/grub-core/tests/boot/kbsd.init-x86_64.S
@@ -0,0 +1,94 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define MODE_RDRW 2
+#define FLAGS_NONE 0
+#define SYSCALL_OPEN 5
+#define SYSCALL_WRITE 4
+#ifdef TARGET_NETBSD
+#define SYSCALL_RESET 208
+#elif defined (TARGET_OPENBSD)
+#define SYSCALL_RESET 55
+#else
+#error unknown target
+#endif
+#define SYSCALL_EXIT 1
+#define SYSCALL_ARCH 165
+#define SYSCALL_INT 0x80
+#define SYSCALL_ARCH_IOPL 2
+
+#define RESET_NOSYNC 0x4
+#define RESET_HALT 0x8
+#define RESET_POWEROFF 0x800
+
+ .section ".init", "ax"
+ .global start,_start
+start:
+_start:
+ /* open. */
+ movq $SYSCALL_OPEN, %rax
+ leaq device, %rdi
+ movq $MODE_RDRW, %rsi
+ movq $FLAGS_NONE, %rdx
+ syscall
+ movq %rax, %rdi
+
+ /* write. */
+ movq $SYSCALL_WRITE, %rax
+ movq $(messageend-message), %rdx
+ leaq message, %rsi
+ syscall
+
+ /* IOPL. */
+ movq $SYSCALL_ARCH, %rax
+ movq $SYSCALL_ARCH_IOPL, %rdi
+ leaq iopl_arg, %rsi
+ syscall
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movq $SYSCALL_RESET, %rax
+ movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi
+ movq $0, %rsi
+ syscall
+
+ /* exit (1). Shouldn't be reached. */
+ movq $SYSCALL_EXIT, %rax
+ movq $1, %rdi
+ syscall
+ .section ".fini", "ax"
+1: jmp 1b
+ .section ".text", "ax"
+1: jmp 1b
+ /* This section is needed for NetBSD to identify the binary. */
+ .section ".note.netbsd.ident", "a"
+ .long 0x7
+ .long 0x4
+ .long 0x1
+ .ascii "NetBSD"
+ .byte 0
+ .data
+device:
+ .ascii "/dev/console"
+ .byte 0
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
+iopl_arg:
+ .long 3
diff --git a/grub-core/tests/boot/kbsd.spec.txt b/grub-core/tests/boot/kbsd.spec.txt
new file mode 100644
index 0000000..af171bc
--- /dev/null
+++ b/grub-core/tests/boot/kbsd.spec.txt
@@ -0,0 +1,3 @@
+. type=dir
+ dev type=dir
+ console type=char device=0 mode=666 gid=0 uid=0
diff --git a/grub-core/tests/boot/kernel-8086.S b/grub-core/tests/boot/kernel-8086.S
new file mode 100644
index 0000000..5ec5368
--- /dev/null
+++ b/grub-core/tests/boot/kernel-8086.S
@@ -0,0 +1,50 @@
+
+ .text
+ .globl _start
+_start:
+base:
+ .code16
+ jmp cont
+
+serialmsg:
+1:
+ movb 0(%si), %bl
+ testb %bl, %bl
+ jz 1f
+ movw $0x3fd, %dx
+2:
+ inb %dx, %al
+ testb $0x20, %al
+ jz 2b
+
+ movw $0x3f8, %dx
+ movb %bl, %al
+ outb %al, %dx
+ incw %si
+ jmp 1b
+1:
+ ret
+
+cont:
+#ifdef TARGET_NTLDR
+ movw $0x2000, %ax
+#elif defined (TARGET_CHAINLOADER)
+ xorw %ax, %ax
+#else
+#error unsupported target
+#endif
+ movw %ax, %ds
+ lea message, %si
+ call serialmsg
+#include "qemu-shutdown-x86.S"
+
+1:
+ hlt
+ jmp 1b
+
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+ .byte 0
+
+ .org 510
+ .short 0xaa55
diff --git a/grub-core/tests/boot/kernel-i386.S b/grub-core/tests/boot/kernel-i386.S
new file mode 100644
index 0000000..2154d3b
--- /dev/null
+++ b/grub-core/tests/boot/kernel-i386.S
@@ -0,0 +1,72 @@
+#define ASM_FILE 1
+#ifdef TARGET_MULTIBOOT2
+#include <multiboot2.h>
+#elif defined (TARGET_MULTIBOOT)
+#include <multiboot.h>
+#endif
+
+ .text
+ /* Align 32 bits boundary. */
+ .align 8
+
+#ifdef TARGET_MULTIBOOT2
+ /* Multiboot header. */
+multiboot_header:
+ /* magic */
+ .long MULTIBOOT2_HEADER_MAGIC
+ /* ISA: i386 */
+ .long MULTIBOOT_ARCHITECTURE_I386
+ /* Header length. */
+ .long multiboot_header_end - multiboot_header
+ /* checksum */
+ .long -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_I386 + (multiboot_header_end - multiboot_header))
+ .short MULTIBOOT_HEADER_TAG_END
+ .short 0
+ .long 8
+multiboot_header_end:
+#elif defined (TARGET_MULTIBOOT)
+ /* Multiboot header. */
+multiboot_header:
+ /* magic */
+ .long MULTIBOOT_HEADER_MAGIC
+ /* flags */
+ .long 0
+ /* checksum */
+ .long -MULTIBOOT_HEADER_MAGIC
+#endif
+
+ .global start
+
+serialmsg:
+1:
+ movb 0(%esi), %bl
+ testb %bl, %bl
+ jz 1f
+ movw $0x3fd, %dx
+2:
+ inb %dx, %al
+ testb $0x20, %al
+ jz 2b
+
+ movw $0x3f8, %dx
+ movb %bl, %al
+ outb %al, %dx
+ incl %esi
+ jmp 1b
+1:
+ ret
+
+ .globl _start
+_start:
+ lea message, %esi
+ call serialmsg
+
+#include "qemu-shutdown-x86.S"
+
+1:
+ hlt
+ jmp 1b
+
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+ .byte 0
diff --git a/grub-core/tests/boot/kfreebsd-aout.cfg b/grub-core/tests/boot/kfreebsd-aout.cfg
new file mode 100644
index 0000000..31e34b4
--- /dev/null
+++ b/grub-core/tests/boot/kfreebsd-aout.cfg
@@ -0,0 +1,4 @@
+kfreebsd /kfreebsd.aout
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/kfreebsd.cfg b/grub-core/tests/boot/kfreebsd.cfg
new file mode 100644
index 0000000..f28ee79
--- /dev/null
+++ b/grub-core/tests/boot/kfreebsd.cfg
@@ -0,0 +1,8 @@
+kfreebsd /kfreebsd -hv
+kfreebsd_loadenv /kfreebsd_env
+kfreebsd_module /mfsroot.gz type=mfs_root
+set kFreeBSD.hw.hasbrokenint12=1
+fakebios
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/kfreebsd.init-i386.S b/grub-core/tests/boot/kfreebsd.init-i386.S
new file mode 100644
index 0000000..7a4baba
--- /dev/null
+++ b/grub-core/tests/boot/kfreebsd.init-i386.S
@@ -0,0 +1,109 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define MODE_RDRW 2
+#define FLAGS_NONE 0
+#define SYSCALL_OPEN 5
+#define SYSCALL_WRITE 4
+#define SYSCALL_RESET 55
+#define SYSCALL_FSYNC 95
+#define SYSCALL_ARCH 165
+#define SYSCALL_EXIT 1
+#define SYSCALL_ARCH_IOPERM 4
+#define SYSCALL_INT 0x80
+
+#define RESET_NOSYNC 0x4
+#define RESET_HALT 0x8
+#define RESET_POWEROFF 0x4000
+
+ .section ".init", "ax"
+ .global start,_start
+start:
+_start:
+ /* open. */
+ movl $SYSCALL_OPEN, %eax
+ pushl $FLAGS_NONE
+ pushl $MODE_RDRW
+ leal device, %ebx
+ pushl %ebx
+ pushl $0
+ int $SYSCALL_INT
+ addl $16, %esp
+ movl %eax, %ecx
+
+ /* write. */
+ movl $SYSCALL_WRITE, %eax
+ pushl $(messageend-message)
+ leal message, %ebx
+ pushl %ebx
+ pushl %ecx
+ pushl $0
+ int $SYSCALL_INT
+ addl $16, %esp
+
+ /* fsync. */
+ movl $SYSCALL_FSYNC, %eax
+ pushl %ecx
+ pushl $0
+ int $SYSCALL_INT
+ addl $8, %esp
+
+ /* IOPERM. */
+ movl $SYSCALL_ARCH, %eax
+ pushl $ioperm_arg1
+ pushl $SYSCALL_ARCH_IOPERM
+ pushl $0
+ int $SYSCALL_INT
+ addl $12, %esp
+
+ /* IOPERM. */
+ movl $SYSCALL_ARCH, %eax
+ pushl $ioperm_arg2
+ pushl $SYSCALL_ARCH_IOPERM
+ pushl $0
+ int $SYSCALL_INT
+ addl $12, %esp
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movl $SYSCALL_RESET, %eax
+ pushl $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC)
+ pushl $0
+ int $SYSCALL_INT
+ addl $8, %esp
+
+ /* exit (1). Shouldn't be reached. */
+ movl $SYSCALL_EXIT, %eax
+ pushl $1
+ pushl $0
+ int $SYSCALL_INT
+device:
+ .ascii "/dev/console"
+ .byte 0
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
+ioperm_arg1:
+ .long 0xcf8
+ .long 8
+ .long 1
+ioperm_arg2:
+ .long 0x7000
+ .long 8
+ .long 1
diff --git a/grub-core/tests/boot/kfreebsd.init-x86_64.S b/grub-core/tests/boot/kfreebsd.init-x86_64.S
new file mode 100644
index 0000000..05e5760
--- /dev/null
+++ b/grub-core/tests/boot/kfreebsd.init-x86_64.S
@@ -0,0 +1,90 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define MODE_RDRW 2
+#define FLAGS_NONE 0
+#define SYSCALL_ARCH 165
+#define SYSCALL_OPEN 5
+#define SYSCALL_WRITE 4
+#define SYSCALL_RESET 55
+#define SYSCALL_EXIT 1
+#define SYSCALL_ARCH_IOPERM 4
+#define SYSCALL_FSYNC 95
+
+#define RESET_NOSYNC 0x4
+#define RESET_HALT 0x8
+#define RESET_POWEROFF 0x4000
+
+ .section ".init", "ax"
+ .global start,_start
+start:
+_start:
+ /* open. */
+ movq $SYSCALL_OPEN, %rax
+ leaq device, %rdi
+ movq $MODE_RDRW, %rsi
+ movq $FLAGS_NONE, %rdx
+ syscall
+ movq %rax, %rdi
+
+ /* write. */
+ leaq message, %rsi
+ movq $SYSCALL_WRITE, %rax
+ movq $(messageend - message), %rdx
+ syscall
+
+ /* fsync. */
+ movq $SYSCALL_FSYNC, %rax
+ syscall
+
+ /* IOPERM. */
+ movq $SYSCALL_ARCH, %rax
+ movq $SYSCALL_ARCH_IOPERM, %rdi
+ leaq ioperm_arg1, %rsi
+ syscall
+
+ movq $SYSCALL_ARCH, %rax
+ movq $SYSCALL_ARCH_IOPERM, %rdi
+ leaq ioperm_arg2, %rsi
+ syscall
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movq $SYSCALL_RESET, %rax
+ movq $(RESET_POWEROFF|RESET_HALT|RESET_NOSYNC), %rdi
+ syscall
+
+ /* exit (1). Shouldn't be reached. */
+ movq $SYSCALL_EXIT, %rax
+ movq $1, %rdi
+ syscall
+device:
+ .ascii "/dev/console"
+ .byte 0
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
+ioperm_arg1:
+ .long 0xcf8
+ .long 8
+ .long 1
+ioperm_arg2:
+ .long 0x7000
+ .long 8
+ .long 1
diff --git a/grub-core/tests/boot/knetbsd.cfg b/grub-core/tests/boot/knetbsd.cfg
new file mode 100644
index 0000000..f88a846
--- /dev/null
+++ b/grub-core/tests/boot/knetbsd.cfg
@@ -0,0 +1,5 @@
+knetbsd /knetbsd -h
+knetbsd_module_elf /miniroot.gz
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/kopenbsd.cfg b/grub-core/tests/boot/kopenbsd.cfg
new file mode 100644
index 0000000..132bec4
--- /dev/null
+++ b/grub-core/tests/boot/kopenbsd.cfg
@@ -0,0 +1,5 @@
+kopenbsd /kopenbsd -h
+kopenbsd_ramdisk /ramdisk
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/kopenbsdlabel.txt b/grub-core/tests/boot/kopenbsdlabel.txt
new file mode 100644
index 0000000..bb14113
--- /dev/null
+++ b/grub-core/tests/boot/kopenbsdlabel.txt
@@ -0,0 +1,3 @@
+# size offset fstype [fsize bsize bps/cpg]
+ a: 256 0 4.2BSD 0 0 1
+ c: 256 0 unused 0 0 # "raw" part, don't edit
diff --git a/grub-core/tests/boot/linux-ppc.cfg b/grub-core/tests/boot/linux-ppc.cfg
new file mode 100644
index 0000000..3ceabc3
--- /dev/null
+++ b/grub-core/tests/boot/linux-ppc.cfg
@@ -0,0 +1,5 @@
+linux /linux console=ttyPZ1 root=/dev/ram0
+initrd /initrd
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/linux.cfg b/grub-core/tests/boot/linux.cfg
new file mode 100644
index 0000000..f5bf6ac
--- /dev/null
+++ b/grub-core/tests/boot/linux.cfg
@@ -0,0 +1,5 @@
+linux /linux console=ttyS0 root=/dev/ram0
+initrd /initrd
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/linux.init-i386.S b/grub-core/tests/boot/linux.init-i386.S
new file mode 100644
index 0000000..c0983ac
--- /dev/null
+++ b/grub-core/tests/boot/linux.init-i386.S
@@ -0,0 +1,61 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define SYSCALL_WRITE 4
+#define SYSCALL_RESET 88
+#define SYSCALL_IOPL 110
+#define SYSCALL_EXIT 1
+#define SYSCALL_INT 0x80
+
+#define STDOUT 1
+#define SHUTDOWN_MAGIC1 0xfee1dead
+#define SHUTDOWN_MAGIC2 0x28121969
+#define SHUTDOWN_MAGIC3 0x4321fedc
+
+ .text
+ .global start, _start
+_start:
+start:
+ /* write. */
+ movl $SYSCALL_WRITE, %eax
+ movl $STDOUT, %ebx
+ leal message, %ecx
+ movl $(messageend-message), %edx
+ int $SYSCALL_INT
+
+ movl $SYSCALL_IOPL, %eax
+ movl $3, %ebx
+ int $SYSCALL_INT
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movl $SYSCALL_RESET, %eax
+ movl $SHUTDOWN_MAGIC1, %ebx
+ movl $SHUTDOWN_MAGIC2, %ecx
+ movl $SHUTDOWN_MAGIC3, %edx
+ int $SYSCALL_INT
+
+ /* exit (1). Shouldn't be reached. */
+ movl $SYSCALL_EXIT, %eax
+ movl $1, %ebx
+ int $SYSCALL_INT
+ .data
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
diff --git a/grub-core/tests/boot/linux.init-mips.S b/grub-core/tests/boot/linux.init-mips.S
new file mode 100644
index 0000000..5ef4c37
--- /dev/null
+++ b/grub-core/tests/boot/linux.init-mips.S
@@ -0,0 +1,61 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define SYSCALL_WRITE 4004
+#define SYSCALL_RESET 4088
+#define SYSCALL_EXIT 4001
+
+#define STDOUT 1
+#define SHUTDOWN_MAGIC1 0xfee1dead
+#define SHUTDOWN_MAGIC2 0x28121969
+#ifdef REBOOT
+#define SHUTDOWN_MAGIC3 0x01234567
+#else
+#define SHUTDOWN_MAGIC3 0x4321fedc
+#endif
+ .text
+ .global start, _start, __start
+__start:
+_start:
+start:
+ /* write. */
+ li $v0, SYSCALL_WRITE
+ li $a0, STDOUT
+ lui $a1, %hi(message)
+ addiu $a1, %lo(message)
+ lui $a2, %hi(messageend)
+ addiu $a2, %lo(messageend)
+ subu $a2, $a2, $a1
+ syscall
+
+ /* shutdown. */
+ li $v0, SYSCALL_RESET
+ li $a0, SHUTDOWN_MAGIC1
+ li $a1, SHUTDOWN_MAGIC2
+ li $a2, SHUTDOWN_MAGIC3
+ syscall
+
+ /* exit(1). Shouldn't be reached. */
+ li $v0, SYSCALL_EXIT
+ li $a0, 1
+ syscall
+
+ .data
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
diff --git a/grub-core/tests/boot/linux.init-ppc.S b/grub-core/tests/boot/linux.init-ppc.S
new file mode 100644
index 0000000..8c9aa44
--- /dev/null
+++ b/grub-core/tests/boot/linux.init-ppc.S
@@ -0,0 +1,61 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define SYSCALL_WRITE 4
+#define SYSCALL_RESET 88
+#define SYSCALL_EXIT 1
+
+#define STDOUT 1
+#define SHUTDOWN_MAGIC1 0xfee1dead
+#define SHUTDOWN_MAGIC2 0x28121969
+#define SHUTDOWN_MAGIC3 0x4321fedc
+
+ .text
+ .global start, _start, __start
+__start:
+_start:
+start:
+ /* write. */
+ li %r0, SYSCALL_WRITE
+ li %r3, STDOUT
+ lis %r4, message@h
+ ori %r4, %r4, message@l
+ lis %r5, messageend@h
+ ori %r5, %r5, messageend@l
+ sub %r5, %r5, %r4
+ sc
+
+ /* shutdown. */
+ li %r0, SYSCALL_RESET
+ lis %r3, SHUTDOWN_MAGIC1@h
+ ori %r3, %r3, SHUTDOWN_MAGIC1@l
+ lis %r4, SHUTDOWN_MAGIC2@h
+ ori %r4, %r4, SHUTDOWN_MAGIC2@l
+ lis %r5, SHUTDOWN_MAGIC3@h
+ ori %r5, %r5, SHUTDOWN_MAGIC3@l
+ sc
+
+ /* exit(1). Shouldn't be reached. */
+ li %r0, SYSCALL_EXIT
+ li %r3, 1
+ sc
+
+ .data
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
diff --git a/grub-core/tests/boot/linux.init-x86_64.S b/grub-core/tests/boot/linux.init-x86_64.S
new file mode 100644
index 0000000..90bdcc3
--- /dev/null
+++ b/grub-core/tests/boot/linux.init-x86_64.S
@@ -0,0 +1,60 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#define SYSCALL_WRITE 1
+#define SYSCALL_RESET 169
+#define SYSCALL_IOPL 172
+#define SYSCALL_EXIT 60
+
+#define STDOUT 1
+#define SHUTDOWN_MAGIC1 0xfee1dead
+#define SHUTDOWN_MAGIC2 0x28121969
+#define SHUTDOWN_MAGIC3 0x4321fedc
+
+ .text
+ .global start, _start
+_start:
+start:
+ /* write. */
+ movq $SYSCALL_WRITE, %rax
+ movq $STDOUT, %rdi
+ leaq message, %rsi
+ movq $(messageend-message), %rdx
+ syscall
+
+ movq $SYSCALL_IOPL, %rax
+ movq $3, %rdi
+ syscall
+
+#include "qemu-shutdown-x86.S"
+
+ /* shutdown. */
+ movq $SYSCALL_RESET, %rax
+ movq $SHUTDOWN_MAGIC1, %rdi
+ movq $SHUTDOWN_MAGIC2, %rsi
+ movq $SHUTDOWN_MAGIC3, %rdx
+ syscall
+
+ /* exit(1). Shouldn't be reached. */
+ movq $SYSCALL_EXIT, %rax
+ movq $1, %rdi
+ syscall
+ .data
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+messageend:
diff --git a/grub-core/tests/boot/linux16.cfg b/grub-core/tests/boot/linux16.cfg
new file mode 100644
index 0000000..d7fbf96
--- /dev/null
+++ b/grub-core/tests/boot/linux16.cfg
@@ -0,0 +1,5 @@
+linux16 /linux console=ttyS0 root=/dev/ram0
+initrd16 /initrd
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/multiboot.cfg b/grub-core/tests/boot/multiboot.cfg
new file mode 100644
index 0000000..0942ec6
--- /dev/null
+++ b/grub-core/tests/boot/multiboot.cfg
@@ -0,0 +1,4 @@
+multiboot /multiboot.elf
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/multiboot2.cfg b/grub-core/tests/boot/multiboot2.cfg
new file mode 100644
index 0000000..2bec9e6
--- /dev/null
+++ b/grub-core/tests/boot/multiboot2.cfg
@@ -0,0 +1,4 @@
+multiboot2 /multiboot2.elf
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/ntldr.cfg b/grub-core/tests/boot/ntldr.cfg
new file mode 100644
index 0000000..cd438a4
--- /dev/null
+++ b/grub-core/tests/boot/ntldr.cfg
@@ -0,0 +1,4 @@
+ntldr /ntldr.bin
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/pc-chainloader.cfg b/grub-core/tests/boot/pc-chainloader.cfg
new file mode 100644
index 0000000..1e80a5b
--- /dev/null
+++ b/grub-core/tests/boot/pc-chainloader.cfg
@@ -0,0 +1,4 @@
+chainloader /pc-chainloader.bin
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/qemu-shutdown-x86.S b/grub-core/tests/boot/qemu-shutdown-x86.S
new file mode 100644
index 0000000..e37f5df
--- /dev/null
+++ b/grub-core/tests/boot/qemu-shutdown-x86.S
@@ -0,0 +1,17 @@
+ movl $0x80000b80, %eax
+ movw $0xcf8, %dx
+ outl %eax, %dx
+ movw $0xcfc, %dx
+ inb %dx, %al
+ orb $1, %al
+ outb %al, %dx
+
+ movl $0x80000b40, %eax
+ movw $0xcf8, %dx
+ outl %eax, %dx
+ movl $0x7001, %eax
+ movw $0xcfc, %dx
+ outl %eax, %dx
+ movw $0x2000, %ax
+ movw $0x7004, %dx
+ outw %ax, %dx