switch to layout

This commit is contained in:
Vladimir Serbinenko committed 2016-02-21 18:47:29 +01:00
1 parent 869a0bc476
commit dc51ac70ee
3 files changed
+25 -25

No files matched your search

+4 -4
View File
@@ -51,13 +51,13 @@ grub_mkimage_load_image64 (const char *kernel_path,
void void
grub_mkimage_generate_elf32 (const struct grub_install_image_target_desc *image_target, grub_mkimage_generate_elf32 (const struct grub_install_image_target_desc *image_target,
int note, char **core_img, size_t *core_size, int note, char **core_img, size_t *core_size,
Elf32_Addr target_addr, grub_size_t align, Elf32_Addr target_addr,
size_t kernel_size, size_t bss_size); struct grub_mkimage_layout *layout);
void void
grub_mkimage_generate_elf64 (const struct grub_install_image_target_desc *image_target, grub_mkimage_generate_elf64 (const struct grub_install_image_target_desc *image_target,
int note, char **core_img, size_t *core_size, int note, char **core_img, size_t *core_size,
Elf64_Addr target_addr, grub_size_t align, Elf64_Addr target_addr,
size_t kernel_size, size_t bss_size); struct grub_mkimage_layout *layout);
struct grub_install_image_target_desc struct grub_install_image_target_desc
{ {
+19 -19
View File
@@ -190,8 +190,8 @@ grub_arm_reloc_jump24 (grub_uint32_t *target, Elf32_Addr sym_addr)
void void
SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc *image_target, SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc *image_target,
int note, char **core_img, size_t *core_size, int note, char **core_img, size_t *core_size,
Elf_Addr target_addr, grub_size_t align, Elf_Addr target_addr,
size_t kernel_size, size_t bss_size) struct grub_mkimage_layout *layout)
{ {
char *elf_img; char *elf_img;
size_t program_size; size_t program_size;
@@ -226,7 +226,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
footer_size += COREBOOT_NOTE_SIZE; footer_size += COREBOOT_NOTE_SIZE;
} }
header_size = ALIGN_UP (sizeof (*ehdr) + phnum * sizeof (*phdr) header_size = ALIGN_UP (sizeof (*ehdr) + phnum * sizeof (*phdr)
+ shnum * sizeof (*shdr) + string_size, align); + shnum * sizeof (*shdr) + string_size, layout->align);
program_size = ALIGN_ADDR (*core_size); program_size = ALIGN_ADDR (*core_size);
@@ -270,7 +270,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
ehdr->e_entry = grub_host_to_target32 (target_addr); ehdr->e_entry = grub_host_to_target32 (target_addr);
phdr->p_vaddr = grub_host_to_target32 (target_addr); phdr->p_vaddr = grub_host_to_target32 (target_addr);
phdr->p_paddr = grub_host_to_target32 (target_addr); phdr->p_paddr = grub_host_to_target32 (target_addr);
phdr->p_align = grub_host_to_target32 (align > image_target->link_align ? align : image_target->link_align); phdr->p_align = grub_host_to_target32 (layout->align > image_target->link_align ? layout->align : image_target->link_align);
if (image_target->id == IMAGE_LOONGSON_ELF) if (image_target->id == IMAGE_LOONGSON_ELF)
ehdr->e_flags = grub_host_to_target32 (0x1000 | EF_MIPS_NOREORDER ehdr->e_flags = grub_host_to_target32 (0x1000 | EF_MIPS_NOREORDER
| EF_MIPS_PIC | EF_MIPS_CPIC); | EF_MIPS_PIC | EF_MIPS_CPIC);
@@ -284,27 +284,27 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
else else
{ {
grub_uint32_t target_addr_mods; grub_uint32_t target_addr_mods;
phdr->p_filesz = grub_host_to_target32 (kernel_size); phdr->p_filesz = grub_host_to_target32 (layout->kernel_size);
phdr->p_memsz = grub_host_to_target32 (kernel_size + bss_size); phdr->p_memsz = grub_host_to_target32 (layout->kernel_size + layout->bss_size);
phdr++; phdr++;
phdr->p_type = grub_host_to_target32 (PT_GNU_STACK); phdr->p_type = grub_host_to_target32 (PT_GNU_STACK);
phdr->p_offset = grub_host_to_target32 (header_size + kernel_size); phdr->p_offset = grub_host_to_target32 (header_size + layout->kernel_size);
phdr->p_paddr = phdr->p_vaddr = phdr->p_filesz = phdr->p_memsz = 0; phdr->p_paddr = phdr->p_vaddr = phdr->p_filesz = phdr->p_memsz = 0;
phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X); phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X);
phdr->p_align = grub_host_to_target32 (image_target->link_align); phdr->p_align = grub_host_to_target32 (image_target->link_align);
phdr++; phdr++;
phdr->p_type = grub_host_to_target32 (PT_LOAD); phdr->p_type = grub_host_to_target32 (PT_LOAD);
phdr->p_offset = grub_host_to_target32 (header_size + kernel_size); phdr->p_offset = grub_host_to_target32 (header_size + layout->kernel_size);
phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X); phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X);
phdr->p_filesz = phdr->p_memsz phdr->p_filesz = phdr->p_memsz
= grub_host_to_target32 (*core_size - kernel_size); = grub_host_to_target32 (*core_size - layout->kernel_size);
if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_386) if (image_target->id == IMAGE_COREBOOT && image_target->elf_target == EM_386)
target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR; target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR;
else else
target_addr_mods = ALIGN_UP (target_addr + kernel_size + bss_size target_addr_mods = ALIGN_UP (target_addr + layout->kernel_size + layout->bss_size
+ image_target->mod_gap, + image_target->mod_gap,
image_target->mod_align); image_target->mod_align);
phdr->p_vaddr = grub_host_to_target_addr (target_addr_mods); phdr->p_vaddr = grub_host_to_target_addr (target_addr_mods);
@@ -329,7 +329,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
ptr += ALIGN_UP (sizeof (GRUB_COREBOOT_NOTE_NAME), 4); ptr += ALIGN_UP (sizeof (GRUB_COREBOOT_NOTE_NAME), 4);
((grub_uint32_t *) ptr)[0] = grub_host_to_target32 (is_relocatable (image_target)); ((grub_uint32_t *) ptr)[0] = grub_host_to_target32 (is_relocatable (image_target));
((grub_uint32_t *) ptr)[1] = 0; ((grub_uint32_t *) ptr)[1] = 0;
((grub_uint32_t *) ptr)[2] = grub_host_to_target32 (align); ((grub_uint32_t *) ptr)[2] = grub_host_to_target32 (layout->align);
ptr += 12; ptr += 12;
assert (COREBOOT_NOTE_SIZE == (ptr - note_start)); assert (COREBOOT_NOTE_SIZE == (ptr - note_start));
@@ -479,7 +479,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
shdr->sh_size = grub_host_to_target32 (string_size); shdr->sh_size = grub_host_to_target32 (string_size);
shdr->sh_link = grub_host_to_target32 (0); shdr->sh_link = grub_host_to_target32 (0);
shdr->sh_info = grub_host_to_target32 (0); shdr->sh_info = grub_host_to_target32 (0);
shdr->sh_addralign = grub_host_to_target32 (align); shdr->sh_addralign = grub_host_to_target32 (layout->align);
shdr->sh_entsize = grub_host_to_target32 (0); shdr->sh_entsize = grub_host_to_target32 (0);
shdr++; shdr++;
@@ -490,10 +490,10 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
shdr->sh_addr = grub_host_to_target_addr (target_addr); shdr->sh_addr = grub_host_to_target_addr (target_addr);
shdr->sh_offset = grub_host_to_target_addr (header_size); shdr->sh_offset = grub_host_to_target_addr (header_size);
shdr->sh_size = grub_host_to_target32 (kernel_size); shdr->sh_size = grub_host_to_target32 (layout->kernel_size);
shdr->sh_link = grub_host_to_target32 (0); shdr->sh_link = grub_host_to_target32 (0);
shdr->sh_info = grub_host_to_target32 (0); shdr->sh_info = grub_host_to_target32 (0);
shdr->sh_addralign = grub_host_to_target32 (align); shdr->sh_addralign = grub_host_to_target32 (layout->align);
shdr->sh_entsize = grub_host_to_target32 (0); shdr->sh_entsize = grub_host_to_target32 (0);
shdr++; shdr++;
@@ -501,9 +501,9 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
shdr->sh_name = grub_host_to_target32 (ptr - str_start); shdr->sh_name = grub_host_to_target32 (ptr - str_start);
ptr += sizeof ("mods"); ptr += sizeof ("mods");
shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size); shdr->sh_addr = grub_host_to_target_addr (target_addr + layout->kernel_size);
shdr->sh_offset = grub_host_to_target_addr (header_size + kernel_size); shdr->sh_offset = grub_host_to_target_addr (header_size + layout->kernel_size);
shdr->sh_size = grub_host_to_target32 (*core_size - kernel_size); shdr->sh_size = grub_host_to_target32 (*core_size - layout->kernel_size);
shdr->sh_link = grub_host_to_target32 (0); shdr->sh_link = grub_host_to_target32 (0);
shdr->sh_info = grub_host_to_target32 (0); shdr->sh_info = grub_host_to_target32 (0);
shdr->sh_addralign = grub_host_to_target32 (image_target->voidp_sizeof); shdr->sh_addralign = grub_host_to_target32 (image_target->voidp_sizeof);
@@ -516,7 +516,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
shdr->sh_name = grub_host_to_target32 (ptr - str_start); shdr->sh_name = grub_host_to_target32 (ptr - str_start);
ptr += sizeof (".xen"); ptr += sizeof (".xen");
shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size); shdr->sh_addr = grub_host_to_target_addr (target_addr + layout->kernel_size);
shdr->sh_offset = grub_host_to_target_addr (program_size + header_size); shdr->sh_offset = grub_host_to_target_addr (program_size + header_size);
shdr->sh_size = grub_host_to_target32 (XEN_NOTE_SIZE); shdr->sh_size = grub_host_to_target32 (XEN_NOTE_SIZE);
shdr->sh_link = grub_host_to_target32 (0); shdr->sh_link = grub_host_to_target32 (0);
@@ -531,7 +531,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
shdr->sh_name = grub_host_to_target32 (ptr - str_start); shdr->sh_name = grub_host_to_target32 (ptr - str_start);
ptr += sizeof (".coreboot_flags"); ptr += sizeof (".coreboot_flags");
shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size); shdr->sh_addr = grub_host_to_target_addr (target_addr + layout->kernel_size);
shdr->sh_offset = grub_host_to_target_addr (program_size + header_size shdr->sh_offset = grub_host_to_target_addr (program_size + header_size
+ sizeof (Elf_Nhdr) + sizeof (Elf_Nhdr)
+ ALIGN_UP (sizeof (GRUB_COREBOOT_NOTE_NAME), 4)); + ALIGN_UP (sizeof (GRUB_COREBOOT_NOTE_NAME), 4));
+2 -2
View File
@@ -1656,10 +1656,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
target_addr = image_target->link_addr; target_addr = image_target->link_addr;
if (image_target->voidp_sizeof == 4) if (image_target->voidp_sizeof == 4)
grub_mkimage_generate_elf32 (image_target, note, &core_img, &core_size, grub_mkimage_generate_elf32 (image_target, note, &core_img, &core_size,
target_addr, layout.align, layout.kernel_size, layout.bss_size); target_addr, &layout);
else else
grub_mkimage_generate_elf64 (image_target, note, &core_img, &core_size, grub_mkimage_generate_elf64 (image_target, note, &core_img, &core_size,
target_addr, layout.align, layout.kernel_size, layout.bss_size); target_addr, &layout);
} }
break; break;
} }