Make GRUB's kernel compliant to Multiboot Specification.
* kern/i386/pc/startup.S (multiboot_header): New label.
(multiboot_entry): Likewise.
(multiboot_trampoline): Likewise.
* include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE):
Increased to 0x4A0.
* fs/xfs.c (grub_xfs_iterate_dir): Fix a syntax error. You may not
put parentheses after a question mark.
[!GRUB_UTIL] (my_mod): New variable.
* util/grub-emu.c (main): Call grub_xfs_init and grub_xfs_fini.
+2005-09-29 Yoshinori K. Okuji <okuji@enbug.org>
+
+ Make GRUB's kernel compliant to Multiboot Specification.
+
+ * kern/i386/pc/startup.S (multiboot_header): New label.
+ (multiboot_entry): Likewise.
+ (multiboot_trampoline): Likewise.
+
+ * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE):
+ Increased to 0x4A0.
+
+ * fs/xfs.c (grub_xfs_iterate_dir): Fix a syntax error. You may not
+ put parentheses after a question mark.
+ [!GRUB_UTIL] (my_mod): New variable.
+
+ * util/grub-emu.c (main): Call grub_xfs_init and grub_xfs_fini.
+
2005-09-28 Marco Gerards <mgerards@xs4all.nl>
Adds support for the XFS filesystem. Btrees are not supported
struct grub_fshelp_node diropen;
};
+
+#ifndef GRUB_UTIL
+static grub_dl_t my_mod;
+#endif
+
\f
/* Filetype information as used in inodes. */
grub_fshelp_node_t node))
{
struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir;
+ auto int call_hook (grub_uint64_t ino, char *filename);
int call_hook (grub_uint64_t ino, char *filename)
{
de = ((struct grub_xfs_dir_entry *)
(((char *) de)+ sizeof (struct grub_xfs_dir_entry) + de->len
- + (smallino ? (sizeof (grub_uint32_t)
- : sizeof (grub_uint64_t))) - 1));
+ + (smallino ? sizeof (grub_uint32_t)
+ : sizeof (grub_uint64_t))) - 1);
}
break;
}
#define GRUB_KERNEL_MACHINE_PREFIX 0x1c
/* The size of the first region which won't be compressed. */
-#define GRUB_KERNEL_MACHINE_RAW_SIZE 0x440
+#define GRUB_KERNEL_MACHINE_RAW_SIZE 0x4A0
#ifndef ASM_FILE
. = EXT_C(start) + 0x50
+/*
+ * Support for booting GRUB from a Multiboot boot loader (e.g. GRUB itself).
+ * This uses the a.out kludge to load raw binary to the area starting at 1MB,
+ * and relocates itself after loaded.
+ */
+multiboot_header:
+ /* magic */
+ .long 0x1BADB002
+ /* flags */
+ .long (1 << 16)
+ /* checksum */
+ .long -0x1BADB002 - (1 << 16)
+ /* header addr */
+ .long multiboot_header - _start + 0x100000 + 0x200
+ /* load addr */
+ .long 0x100000
+ /* load end addr */
+ .long 0
+ /* bss end addr */
+ .long 0
+ /* entry addr */
+ .long multiboot_entry - _start + 0x100000 + 0x200
+
+multiboot_entry:
+ .code32
+ /* obtain the boot device */
+ movl 12(%ebx), %edx
+
+ /* relocate the code */
+ movl $(GRUB_KERNEL_MACHINE_RAW_SIZE + 0x200), %ecx
+ addl EXT_C(grub_compressed_size) - _start + 0x100000 + 0x200, %ecx
+ movl $0x100000, %esi
+ movl $GRUB_BOOT_MACHINE_KERNEL_ADDR, %edi
+ cld
+ rep
+ movsb
+ /* jump to the real address */
+ movl $multiboot_trampoline, %eax
+ jmp *%eax
+
+multiboot_trampoline:
+ /* fill the boot information */
+ movl %edx, %eax
+ shrl $8, %eax
+ xorl %ebx, %ebx
+ cmpb $0xFF, %al
+ je 1f
+ movb %ah, %bl
+ movl %ebx, EXT_C(grub_install_dos_part)
+1:
+ cmpb $0xFF, %ah
+ je 2f
+ movb %al, %bl
+ movl %ebx, EXT_C(grub_install_bsd_part)
+2:
+ shrl $24, %edx
+ /* enter the usual booting */
+ call prot_to_real
+ .code16
+
/* the real mode code continues... */
codestart:
cli /* we're not safe here! */
/* Initialize the default modules. */
grub_iso9660_init ();
+ grub_xfs_init ();
grub_fat_init ();
grub_ext2_init ();
grub_ufs_init ();
grub_hfs_fini ();
grub_jfs_fini ();
grub_fat_fini ();
+ grub_xfs_fini ();
grub_boot_fini ();
grub_cmp_fini ();
grub_cat_fini ();