grub_size_t chunk_size = 0;
void *chunk_src;
+ curload = module = ALIGN_PAGE (*kern_end);
+
err = read_headers (file, argv[0], &e, &shdr);
if (err)
- return err;
-
- curload = module = ALIGN_PAGE (*kern_end);
+ goto out;
for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr
+ e.e_shnum * e.e_shentsize);
err = grub_relocator_alloc_chunk_addr (relocator, &ch,
module, chunk_size);
if (err)
- return err;
+ goto out;
chunk_src = get_virtual_current_address (ch);
}
err = load (file, argv[0], (grub_uint8_t *) chunk_src + curload - *kern_end,
s->sh_offset, s->sh_size);
if (err)
- return err;
+ goto out;
break;
case SHT_NOBITS:
grub_memset ((grub_uint8_t *) chunk_src + curload - *kern_end, 0,
| FREEBSD_MODINFOMD_SHDR,
shdr, e.e_shnum * e.e_shentsize);
+out:
+ grub_free (shdr);
return err;
}
grub_size_t chunk_size = 0;
void *chunk_src;
+ curload = module = ALIGN_PAGE (*kern_end);
+
err = read_headers (file, argv[0], &e, &shdr);
if (err)
- return err;
-
- curload = module = ALIGN_PAGE (*kern_end);
+ goto out;
for (s = (Elf_Shdr *) shdr; s < (Elf_Shdr *) ((char *) shdr
+ e.e_shnum * e.e_shentsize);
err = grub_relocator_alloc_chunk_addr (relocator, &ch,
module, chunk_size);
if (err)
- return err;
+ goto out;
chunk_src = get_virtual_current_address (ch);
}
+ s->sh_addr - *kern_end,
s->sh_offset, s->sh_size);
if (err)
- return err;
+ goto out;
break;
case SHT_NOBITS:
grub_memset ((grub_uint8_t *) chunk_src + module
grub_freebsd_add_meta_module (argv[0], FREEBSD_MODTYPE_ELF_MODULE,
argc - 1, argv + 1, module,
curload - module);
+out:
+ grub_free (shdr);
+ if (err)
+ return err;
return SUFFIX (grub_freebsd_load_elf_meta) (relocator, file, argv[0], kern_end);
}