bc092b9
From a35ac854308b0af7c86c2c7b199f6abdfa2110b0 Mon Sep 17 00:00:00 2001
bc092b9
From: Vladimir Serbinenko <phcoder@gmail.com>
bc092b9
Date: Mon, 8 May 2017 17:32:15 +0200
bbc6a89
Subject: [PATCH 014/192] mkimage: Pass layout to mkimage_generate_elfXX rather
bc092b9
 than some fields.
bc092b9
bc092b9
This allows easier extension of this function without having too long of
bc092b9
arguments list.
bc092b9
---
bc092b9
 include/grub/util/mkimage.h |  8 ++++----
bc092b9
 util/grub-mkimagexx.c       | 35 ++++++++++++++++++-----------------
bc092b9
 util/mkimage.c              |  4 ++--
bc092b9
 3 files changed, 24 insertions(+), 23 deletions(-)
bc092b9
bc092b9
diff --git a/include/grub/util/mkimage.h b/include/grub/util/mkimage.h
bc092b9
index 1a18708a8..b3a5ca132 100644
bc092b9
--- a/include/grub/util/mkimage.h
bc092b9
+++ b/include/grub/util/mkimage.h
bc092b9
@@ -51,13 +51,13 @@ grub_mkimage_load_image64 (const char *kernel_path,
bc092b9
 void
bc092b9
 grub_mkimage_generate_elf32 (const struct grub_install_image_target_desc *image_target,
bc092b9
 			     int note, char **core_img, size_t *core_size,
bc092b9
-			     Elf32_Addr target_addr, grub_size_t align,
bc092b9
-			     size_t kernel_size, size_t bss_size);
bc092b9
+			     Elf32_Addr target_addr,
bc092b9
+			     struct grub_mkimage_layout *layout);
bc092b9
 void
bc092b9
 grub_mkimage_generate_elf64 (const struct grub_install_image_target_desc *image_target,
bc092b9
 			     int note, char **core_img, size_t *core_size,
bc092b9
-			     Elf64_Addr target_addr, grub_size_t align,
bc092b9
-			     size_t kernel_size, size_t bss_size);
bc092b9
+			     Elf64_Addr target_addr,
bc092b9
+			     struct grub_mkimage_layout *layout);
bc092b9
 
bc092b9
 struct grub_install_image_target_desc
bc092b9
 {
bc092b9
diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
bc092b9
index e63f148e4..3fab93e20 100644
bc092b9
--- a/util/grub-mkimagexx.c
bc092b9
+++ b/util/grub-mkimagexx.c
bc092b9
@@ -185,8 +185,8 @@ grub_arm_reloc_jump24 (grub_uint32_t *target, Elf32_Addr sym_addr)
bc092b9
 void
bc092b9
 SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc *image_target,
bc092b9
 				    int note, char **core_img, size_t *core_size,
bc092b9
-				    Elf_Addr target_addr, grub_size_t align,
bc092b9
-				    size_t kernel_size, size_t bss_size)
bc092b9
+				    Elf_Addr target_addr,
bc092b9
+				    struct grub_mkimage_layout *layout)
bc092b9
 {
bc092b9
   char *elf_img;
bc092b9
   size_t program_size;
bc092b9
@@ -214,7 +214,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
       footer_size += XEN_NOTE_SIZE;
bc092b9
     }
bc092b9
   header_size = ALIGN_UP (sizeof (*ehdr) + phnum * sizeof (*phdr)
bc092b9
-			  + shnum * sizeof (*shdr) + string_size, align);
bc092b9
+			  + shnum * sizeof (*shdr) + string_size, layout->align);
bc092b9
 
bc092b9
   program_size = ALIGN_ADDR (*core_size);
bc092b9
 
bc092b9
@@ -258,7 +258,8 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
   ehdr->e_entry = grub_host_to_target32 (target_addr);
bc092b9
   phdr->p_vaddr = grub_host_to_target32 (target_addr);
bc092b9
   phdr->p_paddr = grub_host_to_target32 (target_addr);
bc092b9
-  phdr->p_align = grub_host_to_target32 (align > image_target->link_align ? align : image_target->link_align);
bc092b9
+  phdr->p_align = grub_host_to_target32 (layout->align > image_target->link_align ?
bc092b9
+					 layout->align : image_target->link_align);
bc092b9
   if (image_target->id == IMAGE_LOONGSON_ELF)
bc092b9
     ehdr->e_flags = grub_host_to_target32 (0x1000 | EF_MIPS_NOREORDER 
bc092b9
 					   | EF_MIPS_PIC | EF_MIPS_CPIC);
bc092b9
@@ -272,27 +273,27 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
   else
bc092b9
     {
bc092b9
       grub_uint32_t target_addr_mods;
bc092b9
-      phdr->p_filesz = grub_host_to_target32 (kernel_size);
bc092b9
-      phdr->p_memsz = grub_host_to_target32 (kernel_size + bss_size);
bc092b9
+      phdr->p_filesz = grub_host_to_target32 (layout->kernel_size);
bc092b9
+      phdr->p_memsz = grub_host_to_target32 (layout->kernel_size + layout->bss_size);
bc092b9
 
bc092b9
       phdr++;
bc092b9
       phdr->p_type = grub_host_to_target32 (PT_GNU_STACK);
bc092b9
-      phdr->p_offset = grub_host_to_target32 (header_size + kernel_size);
bc092b9
+      phdr->p_offset = grub_host_to_target32 (header_size + layout->kernel_size);
bc092b9
       phdr->p_paddr = phdr->p_vaddr = phdr->p_filesz = phdr->p_memsz = 0;
bc092b9
       phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X);
bc092b9
       phdr->p_align = grub_host_to_target32 (image_target->link_align);
bc092b9
 
bc092b9
       phdr++;
bc092b9
       phdr->p_type = grub_host_to_target32 (PT_LOAD);
bc092b9
-      phdr->p_offset = grub_host_to_target32 (header_size + kernel_size);
bc092b9
+      phdr->p_offset = grub_host_to_target32 (header_size + layout->kernel_size);
bc092b9
       phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X);
bc092b9
       phdr->p_filesz = phdr->p_memsz
bc092b9
-	= grub_host_to_target32 (*core_size - kernel_size);
bc092b9
+	= grub_host_to_target32 (*core_size - layout->kernel_size);
bc092b9
 
bc092b9
       if (image_target->id == IMAGE_COREBOOT)
bc092b9
 	target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR;
bc092b9
       else
bc092b9
-	target_addr_mods = ALIGN_UP (target_addr + kernel_size + bss_size
bc092b9
+	target_addr_mods = ALIGN_UP (target_addr + layout->kernel_size + layout->bss_size
bc092b9
 				     + image_target->mod_gap,
bc092b9
 				     image_target->mod_align);
bc092b9
       phdr->p_vaddr = grub_host_to_target_addr (target_addr_mods);
bc092b9
@@ -434,7 +435,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
     shdr->sh_size = grub_host_to_target32 (string_size);
bc092b9
     shdr->sh_link = grub_host_to_target32 (0);
bc092b9
     shdr->sh_info = grub_host_to_target32 (0);
bc092b9
-    shdr->sh_addralign = grub_host_to_target32 (align);
bc092b9
+    shdr->sh_addralign = grub_host_to_target32 (layout->align);
bc092b9
     shdr->sh_entsize = grub_host_to_target32 (0);
bc092b9
     shdr++;
bc092b9
 
bc092b9
@@ -445,10 +446,10 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
     shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
bc092b9
     shdr->sh_addr = grub_host_to_target_addr (target_addr);
bc092b9
     shdr->sh_offset = grub_host_to_target_addr (header_size);
bc092b9
-    shdr->sh_size = grub_host_to_target32 (kernel_size);
bc092b9
+    shdr->sh_size = grub_host_to_target32 (layout->kernel_size);
bc092b9
     shdr->sh_link = grub_host_to_target32 (0);
bc092b9
     shdr->sh_info = grub_host_to_target32 (0);
bc092b9
-    shdr->sh_addralign = grub_host_to_target32 (align);
bc092b9
+    shdr->sh_addralign = grub_host_to_target32 (layout->align);
bc092b9
     shdr->sh_entsize = grub_host_to_target32 (0);
bc092b9
     shdr++;
bc092b9
 
bc092b9
@@ -456,9 +457,9 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
     shdr->sh_name = grub_host_to_target32 (ptr - str_start);
bc092b9
     ptr += sizeof ("mods");
bc092b9
     shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
bc092b9
-    shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size);
bc092b9
-    shdr->sh_offset = grub_host_to_target_addr (header_size + kernel_size);
bc092b9
-    shdr->sh_size = grub_host_to_target32 (*core_size - kernel_size);
bc092b9
+    shdr->sh_addr = grub_host_to_target_addr (target_addr + layout->kernel_size);
bc092b9
+    shdr->sh_offset = grub_host_to_target_addr (header_size + layout->kernel_size);
bc092b9
+    shdr->sh_size = grub_host_to_target32 (*core_size - layout->kernel_size);
bc092b9
     shdr->sh_link = grub_host_to_target32 (0);
bc092b9
     shdr->sh_info = grub_host_to_target32 (0);
bc092b9
     shdr->sh_addralign = grub_host_to_target32 (image_target->voidp_sizeof);
bc092b9
@@ -471,7 +472,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc
bc092b9
 	shdr->sh_name = grub_host_to_target32 (ptr - str_start);
bc092b9
 	ptr += sizeof (".xen");
bc092b9
 	shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS);
bc092b9
-	shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size);
bc092b9
+	shdr->sh_addr = grub_host_to_target_addr (target_addr + layout->kernel_size);
bc092b9
 	shdr->sh_offset = grub_host_to_target_addr (program_size + header_size);
bc092b9
 	shdr->sh_size = grub_host_to_target32 (XEN_NOTE_SIZE);
bc092b9
 	shdr->sh_link = grub_host_to_target32 (0);
bc092b9
diff --git a/util/mkimage.c b/util/mkimage.c
bc092b9
index 9ad4cfe42..528166c87 100644
bc092b9
--- a/util/mkimage.c
bc092b9
+++ b/util/mkimage.c
bc092b9
@@ -1638,10 +1638,10 @@ grub_install_generate_image (const char *dir, const char *prefix,
bc092b9
 	  target_addr = image_target->link_addr;
bc092b9
 	if (image_target->voidp_sizeof == 4)
bc092b9
 	  grub_mkimage_generate_elf32 (image_target, note, &core_img, &core_size,
bc092b9
-				       target_addr, layout.align, layout.kernel_size, layout.bss_size);
bc092b9
+				       target_addr, &layout);
bc092b9
 	else
bc092b9
 	  grub_mkimage_generate_elf64 (image_target, note, &core_img, &core_size,
bc092b9
-				       target_addr, layout.align, layout.kernel_size, layout.bss_size);
bc092b9
+				       target_addr, &layout);
bc092b9
       }
bc092b9
       break;
bc092b9
     }
bc092b9
-- 
bbc6a89
2.13.4
bc092b9