---
 i386/i386at/model_dep.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c
index 8b5b8b0d..6c2d1883 100644
--- a/i386/i386at/model_dep.c
+++ b/i386/i386at/model_dep.c
@@ -313,11 +313,30 @@ void db_reset_cpu(void)
 
 #ifndef        MACH_HYP
 
+static void
+register_elf_shdrs_boot_data(const void *shdrs_addr,
+                            uint32_t shdr_num,
+                            uint32_t shdr_size)
+{
+       for (unsigned int i = 0; i < shdr_num; i++)
+         {
+           struct elf_shdr *shdr;
+
+           shdr = (struct elf_shdr *)(shdrs_addr + (i * shdr_size));
+
+           if ((shdr->type != ELF_SHT_SYMTAB)
+               && (shdr->type != ELF_SHT_STRTAB))
+             continue;
+
+           if (shdr->size != 0)
+             biosmem_register_boot_data(shdr->addr, shdr->addr + shdr->size, 
FALSE);
+         }
+}
+
 static void
 register_mb1_boot_data(const struct multiboot_raw_info *mbi)
 {
        struct multiboot_raw_module *mod;
-       struct elf_shdr *shdr;
        unsigned long tmp;
        unsigned int i;
 
@@ -356,16 +375,7 @@ register_mb1_boot_data(const struct multiboot_raw_info 
*mbi)
 
                tmp = phystokv(mbi->shdr_addr);
 
-               for (i = 0; i < mbi->shdr_num; i++) {
-                       shdr = (struct elf_shdr *)(tmp + (i * mbi->shdr_size));
-
-                       if ((shdr->type != ELF_SHT_SYMTAB)
-                           && (shdr->type != ELF_SHT_STRTAB))
-                               continue;
-
-                       if (shdr->size != 0)
-                               biosmem_register_boot_data(shdr->addr, 
shdr->addr + shdr->size, FALSE);
-               }
+               register_elf_shdrs_boot_data((const void*)tmp, mbi->shdr_num, 
mbi->shdr_size);
        }
 
        mbinfo_register_boot_data(mbi);
-- 
2.47.3


Reply via email to