1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-30 00:00:15 +01:00

fix image size calculation if app contains more than one load section

This commit is contained in:
Stefan Lankes 2018-06-10 10:32:51 +02:00
parent 916fd51879
commit 0da5a822b9

View file

@ -1126,8 +1126,8 @@ int load_kernel(uint8_t* mem, char* path)
Elf64_Ehdr hdr; Elf64_Ehdr hdr;
Elf64_Phdr *phdr = NULL; Elf64_Phdr *phdr = NULL;
size_t buflen; size_t buflen;
size_t pstart = 0;
int fd, ret; int fd, ret;
int first_load = 1;
fd = open(path, O_RDONLY); fd = open(path, O_RDONLY);
if (fd == -1) if (fd == -1)
@ -1191,8 +1191,8 @@ int load_kernel(uint8_t* mem, char* path)
if (!mboot) if (!mboot)
mboot = mem+paddr-GUEST_OFFSET; mboot = mem+paddr-GUEST_OFFSET;
if (first_load) { if (!pstart) {
first_load = 0; pstart = paddr;
// initialize kernel // initialize kernel
*((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x08)) = paddr; // physical start address *((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x08)) = paddr; // physical start address
@ -1239,7 +1239,7 @@ int load_kernel(uint8_t* mem, char* path)
*((uint64_t*) (mem+paddr-GUEST_OFFSET + 0xbc)) = (uint64_t)guest_mem; *((uint64_t*) (mem+paddr-GUEST_OFFSET + 0xbc)) = (uint64_t)guest_mem;
} }
*((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x38)) += memsz; // total kernel size *((uint64_t*) (mem+pstart-GUEST_OFFSET + 0x38)) = paddr + memsz - pstart; // total kernel size
} }
ret = 0; ret = 0;