[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Compiling grub2 on *BSD?
From: |
Bean |
Subject: |
Re: Compiling grub2 on *BSD? |
Date: |
Mon, 28 Jan 2008 19:15:16 +0800 |
On Jan 28, 2008 6:47 PM, Robert Millan <address@hidden> wrote:
> > > - movsbl %dh, %eax
> > > - movl %eax, %ss:(DATA_ADDR +
> > > GRUB_KERNEL_MACHINE_INSTALL_DOS_PART)
> > > + // Check for the multiboot signature
> > > + cmpl $0x1badb002, %ss:(DATA_ADDR + 0x50)
> > > + jz 1f
> > [...]
> >
> > if there is no objection, I'd like to check in this patch.
>
> I don't like that you hardcode 0x1badb002. Could you use the macro from
> multiboot.h ?
>
> Also for the comments, I think /* */ is preferred (at least, it is consistent
> with the rest of GRUB).
fixed.
diff --git a/boot/i386/pc/lnxboot.S b/boot/i386/pc/lnxboot.S
index f1a4ded..6c63af4 100644
--- a/boot/i386/pc/lnxboot.S
+++ b/boot/i386/pc/lnxboot.S
@@ -1,7 +1,7 @@
/* -*-Asm-*- */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002,2005,2006,2007 Free Software
Foundation, Inc.
+ * Copyright (C) 2007,2008 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
@@ -20,6 +20,7 @@
#include <grub/boot.h>
#include <grub/machine/boot.h>
#include <grub/machine/kernel.h>
+#include <multiboot.h>
.file "lnxboot.S"
@@ -36,22 +37,7 @@
.globl start, _start
data_start:
- pushw %cs
- popw %ds
- xorl %eax, %eax
- xorl %ebx, %ebx
- call data_next
-
-data_next:
- popw %bx
- movw %cs, %ax
- shll $4, %eax
- leal 0x200 + data_start - data_next(%ebx,%eax), %eax
- movzbl setup_sects - data_next(%bx), %ecx
- shll $9, %ecx
- addl %ecx, %eax
- movl %eax, code32_start - data_next(%bx)
-
+ xorl %ebp, %ebp
jmp linux_next
. = data_start + 0x1F1
@@ -76,29 +62,29 @@ boot_flag:
start:
_start:
- jmp linux_code
+ jmp linux_init
- .ascii "HdrS" // Header signature
- .word 0x0203 // Header version number
+ .ascii "HdrS" /* Header signature */
+ .word 0x0203 /* Header version number */
realmode_swtch:
- .word 0, 0 // default_switch, SETUPSEG
+ .word 0, 0 /* default_switch, SETUPSEG */
start_sys_seg:
- .word 0x1000 // obsolete
+ .word 0x1000 /* Obsolete */
version_ptr:
- .word 0 // version string ptr
+ .word 0 /* Version string ptr */
type_of_loader:
- .byte 0 // Filled in by boot loader
+ .byte 0 /* Filled in by boot loader */
loadflags:
- .byte 1 // Please load high
+ .byte 1 /* Please load high */
setup_move_size:
- .word 0 // Unused
+ .word 0 /* Unused */
code32_start:
- .long 0x100000 // 32-bit start address
+ .long 0x100000 /* 32-bit start address */
ramdisk_image:
- .long 0 // Loaded ramdisk image address
+ .long 0 /* Loaded ramdisk image address */
ramdisk_size:
- .long 0 // Size of loaded ramdisk
+ .long 0 /* Size of loaded ramdisk */
bootsect_kludge:
.word 0, 0
heap_end_ptr:
@@ -106,27 +92,27 @@ heap_end_ptr:
pad1:
.word 0
cmd_line_ptr:
- .long 0 // Command line
+ .long 0 /* Command line */
ramdisk_max:
- .long 0xffffffff // Highest allowed ramdisk address
+ .long 0xffffffff /* Highest allowed ramdisk address */
gdt:
- .long 0, 0, 0, 0 // Must be zero
- .word 0xffff // 64 K segment size
+ .long 0, 0, 0, 0 /* Must be zero */
+ .word 0xffff /* 64 K segment size */
gdt_src1:
- .byte 0, 0 ,0 // Low 24 bits of source addy
- .byte 0x93 // Access rights
- .byte 0 // Extended access rights
+ .byte 0, 0 ,0 /* Low 24 bits of source addy */
+ .byte 0x93 /* Access rights */
+ .byte 0 /* Extended access rights */
gdt_src2:
- .byte 0 // High 8 bits of source addy
- .word 0xffff // 64 K segment size
+ .byte 0 /* High 8 bits of source addy */
+ .word 0xffff /* 64 K segment size */
gdt_dst1:
- .byte 0, 0, 0 // Low 24 bits of target addy
- .byte 0x93 // Access rights
- .byte 0 // Extended access rights
+ .byte 0, 0, 0 /* Low 24 bits of target addy */
+ .byte 0x93 /* Access rights */
+ .byte 0 /* Extended access rights */
gdt_dst2:
- .byte 0 // High 8 bits of source addy
- .long 0, 0, 0, 0 // More space for the BIOS
+ .byte 0 /* High 8 bits of source addy */
+ .long 0, 0, 0, 0 /* More space for the BIOS */
reg_edx:
.byte 0x80,0,0xFF,0xFF
@@ -134,9 +120,10 @@ reg_edx:
data_leng:
.long 0
-linux_code:
+linux_init:
movw %cs:(reg_edx - start), %dx
+ movl %cs:(code32_start - start), %ebp
linux_next:
@@ -150,7 +137,7 @@ normalize:
addw %bx, %ax
pushw %ax
pushw $(real_code - start)
- lret // jump to real_code
+ lret /* Jump to real_code */
real_code:
subw $0x20, %ax
@@ -158,16 +145,13 @@ real_code:
movw (setup_sects - data_start), %cx
shlw $7, %cx
- // Setup stack
+ /* Setup stack */
xorw %si, %si
movw %si, %ss
movw $(CODE_ADDR), %sp
- pushl %esi
- pushl %edi
-
- // Move itself to 0:CODE_ADDR
+ /* Move itself to 0:CODE_ADDR */
cld
movw %cs, %ax
@@ -183,41 +167,55 @@ real_code:
real_code_2:
- pushw %es
- popw %ds
-
- movl (ramdisk_image - start), %esi
- or %esi, %esi
+ xchgl %ebp, %esi
+ orl %esi, %esi
jnz 1f
- movl (code32_start - start), %esi
+ movw %ds, %si
+ shll $4, %esi
+ addl %ebp, %esi
1:
+ pushw %es
+ popw %ds
+
movl $0x200, %ecx
addl %ecx, %esi
movl $DATA_ADDR, %edi
call move_memory
- movsbl %dh, %eax
- movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_DOS_PART)
+ /* Check for multiboot signature */
+ cmpl $MULTIBOOT_MAGIC, %ss:(DATA_ADDR + 0x50)
+ jz 1f
- movsbl (reg_edx + 2 - start), %eax
- movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_BSD_PART)
+ movl (ramdisk_image - start), %esi
+ movl (ramdisk_size - start), %ecx
+ movl $(DATA_ADDR - 0x200), %edi
+ jmp 2f
+
+1:
movl %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_COMPRESSED_SIZE), %ecx
addl $(GRUB_KERNEL_MACHINE_RAW_SIZE - 0x200), %ecx
+2:
call move_memory
- popl %edi
- popl %esi
+ movsbl %dh, %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_DOS_PART)
+
+ movsbl (reg_edx + 2 - start), %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_BSD_PART)
ljmp $(DATA_ADDR >> 4), $0
-// Parameters:
-// esi: source address
-// edi: target address
-// ecx: number of bytes
+/*
+ * Parameters:
+ * esi: source address
+ * edi: target address
+ * ecx: number of bytes
+ */
+
move_memory:
incl %ecx
andb $0xFE, %cl
@@ -261,8 +259,8 @@ move_memory:
2:
- leal (%esi, %eax), %esi
- leal (%edi, %eax), %edi
+ addl %eax, %esi
+ addl %eax, %edi
subl %eax, %ecx
jnz 1b
@@ -270,8 +268,11 @@ move_memory:
popw %dx
ret
-// Parameters:
-// si: message
+/*
+ * Parameters:
+ * si: message
+ */
+
fail:
movb $0x0e, %ah
xorw %bx, %bx
--
Bean
Re: Compiling grub2 on *BSD?, walt, 2008/01/26
- Re: Compiling grub2 on *BSD?, Robert Millan, 2008/01/27
- Re: Compiling grub2 on *BSD?, jakllsch, 2008/01/29
- Re: Compiling grub2 on *BSD?, Robert Millan, 2008/01/29
- Re: Compiling grub2 on *BSD?, jakllsch, 2008/01/29
- Re: Compiling grub2 on *BSD?, Marco Gerards, 2008/01/30
- Re: Compiling grub2 on *BSD?, Robert Millan, 2008/01/30
- Re: Compiling grub2 on *BSD?, walt, 2008/01/30