* grub-core/loader/multiboot_mbi2.c: Implement special value for load_addr.
This commit is contained in:
parent
1482975549
commit
1f032575bb
2 changed files with 12 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/multiboot_mbi2.c: Implement special value for
|
||||||
|
load_addr.
|
||||||
|
|
||||||
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
Include serial module in default_payload.elf.
|
Include serial module in default_payload.elf.
|
||||||
|
|
|
@ -225,8 +225,11 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
||||||
|
|
||||||
if (addr_tag)
|
if (addr_tag)
|
||||||
{
|
{
|
||||||
|
grub_uint64_t load_addr = (addr_tag->load_addr + 1)
|
||||||
|
? addr_tag->load_addr : (addr_tag->header_addr
|
||||||
|
- ((char *) header - (char *) buffer));
|
||||||
int offset = ((char *) header - (char *) buffer -
|
int offset = ((char *) header - (char *) buffer -
|
||||||
(addr_tag->header_addr - addr_tag->load_addr));
|
(addr_tag->header_addr - load_addr));
|
||||||
int load_size = ((addr_tag->load_end_addr == 0) ? file->size - offset :
|
int load_size = ((addr_tag->load_end_addr == 0) ? file->size - offset :
|
||||||
addr_tag->load_end_addr - addr_tag->load_addr);
|
addr_tag->load_end_addr - addr_tag->load_addr);
|
||||||
grub_size_t code_size;
|
grub_size_t code_size;
|
||||||
|
@ -234,12 +237,12 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
||||||
grub_relocator_chunk_t ch;
|
grub_relocator_chunk_t ch;
|
||||||
|
|
||||||
if (addr_tag->bss_end_addr)
|
if (addr_tag->bss_end_addr)
|
||||||
code_size = (addr_tag->bss_end_addr - addr_tag->load_addr);
|
code_size = (addr_tag->bss_end_addr - load_addr);
|
||||||
else
|
else
|
||||||
code_size = load_size;
|
code_size = load_size;
|
||||||
|
|
||||||
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
|
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
|
||||||
&ch, addr_tag->load_addr,
|
&ch, load_addr,
|
||||||
code_size);
|
code_size);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
@ -264,7 +267,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
||||||
|
|
||||||
if (addr_tag->bss_end_addr)
|
if (addr_tag->bss_end_addr)
|
||||||
grub_memset ((grub_uint8_t *) source + load_size, 0,
|
grub_memset ((grub_uint8_t *) source + load_size, 0,
|
||||||
addr_tag->bss_end_addr - addr_tag->load_addr - load_size);
|
addr_tag->bss_end_addr - load_addr - load_size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue