2008-02-05 Bean <bean123ch@gmail.com>
* loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Get physical address of entry. (grub_multiboot_load_elf64): Likewise. (grub_multiboot): Initialize mbi structure. * util/grub-fstest.c: Don't include unused header file script.h. * conf/common.rmk (grub-fstest.c_DEPENDENCIES): Move to the begginning of file. (grub_fstest_SOURCES): Likewise.
This commit is contained in:
parent
409480b7a2
commit
c32865bfcf
5 changed files with 243 additions and 213 deletions
|
@ -96,6 +96,7 @@ grub_multiboot_load_elf32 (grub_file_t file, void *buffer)
|
|||
{
|
||||
Elf32_Ehdr *ehdr = (Elf32_Ehdr *) buffer;
|
||||
Elf32_Phdr *phdr;
|
||||
grub_addr_t physical_entry_addr = 0;
|
||||
int i;
|
||||
|
||||
if (ehdr->e_ident[EI_CLASS] != ELFCLASS32)
|
||||
|
@ -144,9 +145,16 @@ grub_multiboot_load_elf32 (grub_file_t file, void *buffer)
|
|||
if (phdr->p_filesz < phdr->p_memsz)
|
||||
grub_memset ((char *) phdr->p_paddr + phdr->p_filesz, 0,
|
||||
phdr->p_memsz - phdr->p_filesz);
|
||||
|
||||
if ((entry >= phdr->p_vaddr) &&
|
||||
(entry < phdr->p_vaddr + phdr->p_memsz))
|
||||
physical_entry_addr = entry + phdr->p_paddr - phdr->p_vaddr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (physical_entry_addr)
|
||||
entry = physical_entry_addr;
|
||||
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
|
@ -164,6 +172,7 @@ grub_multiboot_load_elf64 (grub_file_t file, void *buffer)
|
|||
{
|
||||
Elf64_Ehdr *ehdr = (Elf64_Ehdr *) buffer;
|
||||
Elf64_Phdr *phdr;
|
||||
grub_addr_t physical_entry_addr = 0;
|
||||
int i;
|
||||
|
||||
if (ehdr->e_ident[EI_CLASS] != ELFCLASS64)
|
||||
|
@ -226,9 +235,16 @@ grub_multiboot_load_elf64 (grub_file_t file, void *buffer)
|
|||
+ phdr->p_filesz),
|
||||
0,
|
||||
phdr->p_memsz - phdr->p_filesz);
|
||||
|
||||
if ((entry >= phdr->p_vaddr) &&
|
||||
(entry < phdr->p_vaddr + phdr->p_memsz))
|
||||
physical_entry_addr = entry + phdr->p_paddr - phdr->p_vaddr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (physical_entry_addr)
|
||||
entry = physical_entry_addr;
|
||||
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
|
@ -306,6 +322,8 @@ grub_multiboot (int argc, char *argv[])
|
|||
if (! mbi)
|
||||
goto fail;
|
||||
|
||||
grub_memset (mbi, 0, sizeof (struct grub_multiboot_info));
|
||||
|
||||
mbi->flags = MULTIBOOT_INFO_MEMORY;
|
||||
|
||||
/* Convert from bytes to kilobytes. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue