2009-06-27 Pavel Roskin <proski@gnu.org>
2009-06-27  Robert Millan  <rmh.grub@aybabtu.com>
        * include/grub/dl.h: Include grub/elf.h.
        (struct grub_dl): Add symtab field.
        * kern/dl.c [GRUB_MACHINE_QEMU]: Define
        GRUB_MODULES_MACHINE_READONLY.
        (grub_dl_resolve_symbols): Populate mod->symtab, making a copy
        of the header for read-only modules.
        (grub_dl_unload): Free mod->symtab for read-only modules.
        * kern/i386/dl.c: Use mod->symtab.
        * kern/powerpc/dl.c: Likewise.
        * kern/sparc64/dl.c: Likewise.
        * kern/x86_64/dl.c: Likewise.
        * conf/i386-qemu.rmk: New file.
        * kern/i386/qemu/startup.S: Likewise.
        * kern/i386/qemu/mmap.c: Likewise.
        * boot/i386/qemu/boot.S: Likewise.
        * include/grub/i386/qemu/time.h: Likewise.
        * include/grub/i386/qemu/serial.h: Likewise.
        * include/grub/i386/qemu/kernel.h: Likewise.
        * include/grub/i386/qemu/console.h: Likewise.
        * include/grub/i386/qemu/boot.h: Likewise.
        * include/grub/i386/qemu/init.h: Likewise.
        * include/grub/i386/qemu/machine.h: Likewise.
        * include/grub/i386/qemu/loader.h: Likewise.
        * include/grub/i386/qemu/memory.h: Likewise.
        * conf/i386-coreboot.rmk (GRUB_BOOT_MACHINE_LINK_ADDR)
        (GRUB_KERNEL_MACHINE_LINK_ADDR): New variables.
        [qemu] (pkglib_IMAGES): Add `boot.img'.
        [qemu] (boot_img_SOURCES, boot_img_ASFLAGS, boot_img_LDFLAGS)
        [qemu] (boot_img_FORMAT): New variables.
        [qemu] (bin_UTILITIES): Add `grub-mkimage'.
        [qemu] (grub_mkimage_SOURCES, grub_mkimage_CFLAGS): New variables.
        [qemu] (kernel_img_SOURCES, kernel_img_HEADERS, kernel_img_CFLAGS)
        [qemu] (kernel_img_ASFLAGS, kernel_img_LDFLAGS)
        [qemu] (kernel_img_FORMAT): New variables.
        * configure.ac: Recognise `i386-qemu'.
        * util/i386/pc/grub-mkimage.c (compress_kernel): Add dummy variant
        (for no compression).
        [GRUB_MACHINE_QEMU] (generate_image): Misc adjustments to produce
        a valid i386 ROM image.  Make `GRUB_KERNEL_MACHINE_COMPRESSED_SIZE',
        `GRUB_KERNEL_MACHINE_INSTALL_DOS_PART' and
        `GRUB_KERNEL_MACHINE_INSTALL_BSD_PART' optional features (with
        ifdefs).
			
			
This commit is contained in:
		
							parent
							
								
									97fe384ecb
								
							
						
					
					
						commit
						8231fb77c6
					
				
					 24 changed files with 584 additions and 19 deletions
				
			
		
							
								
								
									
										97
									
								
								kern/i386/qemu/startup.S
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								kern/i386/qemu/startup.S
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,97 @@ | |||
| /* | ||||
|  *  GRUB  --  GRand Unified Bootloader | ||||
|  *  Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009 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/>. | ||||
|  */ | ||||
| 
 | ||||
| #include <config.h> | ||||
| #include <grub/symbol.h> | ||||
| #include <grub/machine/memory.h> | ||||
| #include <grub/machine/kernel.h> | ||||
| 
 | ||||
| 	.text | ||||
| 	.code32 | ||||
| 	.globl _start
 | ||||
| _start: | ||||
| 	jmp	codestart | ||||
| 
 | ||||
| 	. = _start + GRUB_KERNEL_MACHINE_CORE_ENTRY_ADDR | ||||
| VARIABLE(grub_core_entry_addr) | ||||
| 	.long	0
 | ||||
| VARIABLE(grub_kernel_image_size) | ||||
| 	.long	0
 | ||||
| VARIABLE(grub_prefix) | ||||
| 	/* to be filled by grub-mkimage */ | ||||
| 
 | ||||
| 	/* | ||||
| 	 *  Leave some breathing room for the prefix. | ||||
| 	 */ | ||||
| 
 | ||||
| 	. = _start + GRUB_KERNEL_MACHINE_DATA_END | ||||
| 
 | ||||
| codestart: | ||||
| 	/* Relocate to low memory.  First we figure out our location. | ||||
| 	   We will derive the rom start address from it.  */ | ||||
| 	call	1f | ||||
| 1:	popl	%esi | ||||
| 
 | ||||
| 	/* Rom size is a multiple of 64 kiB.  With this we get the | ||||
| 	   value of `grub_core_entry_addr' in %esi.  */ | ||||
| 	xorw	%si, %si | ||||
| 
 | ||||
| 	/* ... which allows us to access `grub_kernel_image_size' | ||||
| 	   before relocation.  */ | ||||
| 	movl	(grub_kernel_image_size - _start)(%esi), %ecx | ||||
| 
 | ||||
| 
 | ||||
| 	movl	$_start, %edi | ||||
| 	cld | ||||
| 	rep | ||||
| 	movsb | ||||
| 	ljmp	$GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f | ||||
| 1: | ||||
| 
 | ||||
| #ifdef APPLE_CC | ||||
| 	/* clean out the bss */ | ||||
| 	bss_start_abs = ABS (bss_start) | ||||
| 	bss_end_abs = ABS (bss_end) | ||||
| 
 | ||||
| 	movl    bss_start_abs, %edi | ||||
| 
 | ||||
| 	/* compute the bss length */ | ||||
| 	movl	bss_end_abs, %ecx | ||||
| 	subl	%edi, %ecx | ||||
| #else | ||||
| 	/* clean out the bss */ | ||||
| 	movl	$BSS_START_SYMBOL, %edi | ||||
| 
 | ||||
| 	/* compute the bss length */ | ||||
| 	movl	$END_SYMBOL, %ecx | ||||
| 	subl	%edi, %ecx | ||||
| #endif | ||||
| 			 | ||||
| 	/* clean out */ | ||||
| 	xorl	%eax, %eax | ||||
| 	cld | ||||
| 	rep | ||||
| 	stosb | ||||
| 
 | ||||
| 	/* | ||||
| 	 *  Call the start of main body of C code. | ||||
| 	 */ | ||||
| 	call	EXT_C(grub_main) | ||||
| 
 | ||||
| 	/* This should never happen.  */ | ||||
| 	jmp	EXT_C(grub_stop) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue