mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-30 00:00:15 +01:00
remove dependency from kernel_end
- the new version binutils will remove the mark kernel_end => remove the usage of this mark
This commit is contained in:
parent
0da5a822b9
commit
c48461b796
4 changed files with 15 additions and 12 deletions
|
@ -290,7 +290,10 @@ _setup_pgtable:
|
|||
cmp x0, 0
|
||||
b.ne 4f
|
||||
|
||||
ldr x0, =kernel_end
|
||||
ldr x0, =kernel_start
|
||||
ldr x1, =image_size
|
||||
ldr x1, [x1]
|
||||
add x0, x0, x1
|
||||
/* align to a 16KByte boundary */
|
||||
add x0, x0, 0x10000
|
||||
mov x1, ~0xFFFF
|
||||
|
|
|
@ -51,7 +51,9 @@ typedef struct free_list {
|
|||
* maintaining a value, rather their address is their value.
|
||||
*/
|
||||
extern const void kernel_start;
|
||||
extern const void kernel_end;
|
||||
|
||||
// defined in entry.S
|
||||
extern size_t image_size;
|
||||
|
||||
static spinlock_t list_lock = SPINLOCK_INIT;
|
||||
|
||||
|
@ -245,7 +247,6 @@ void page_free(void* viraddr, size_t sz)
|
|||
|
||||
int memory_init(void)
|
||||
{
|
||||
size_t image_sz = (size_t) &kernel_end - (size_t) &kernel_start;
|
||||
int ret = 0;
|
||||
|
||||
// enable paging and map Multiboot modules etc.
|
||||
|
@ -255,22 +256,22 @@ int memory_init(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
LOG_INFO("memory_init: base 0x%zx, image_size 0x%zx, limit 0x%zx\n", base, image_sz, limit);
|
||||
LOG_INFO("memory_init: base 0x%zx, image_size 0x%zx, limit 0x%zx\n", base, image_size, limit);
|
||||
|
||||
// determine available memory
|
||||
atomic_int64_add(&total_pages, (limit-base) >> PAGE_BITS);
|
||||
atomic_int64_add(&total_available_pages, (limit-base) >> PAGE_BITS);
|
||||
|
||||
//initialize free list
|
||||
init_list.start = PAGE_FLOOR((size_t) &kernel_end + (16+511)*PAGE_SIZE);
|
||||
init_list.start = PAGE_FLOOR((size_t) &kernel_start + image_size + (16+511)*PAGE_SIZE);
|
||||
if (limit < GICD_BASE)
|
||||
init_list.end = limit;
|
||||
else
|
||||
init_list.end = GICD_BASE;
|
||||
|
||||
// determine allocated memory, we use 2MB pages to map the kernel
|
||||
atomic_int64_add(&total_allocated_pages, PAGE_FLOOR((size_t) &kernel_end + 511*PAGE_SIZE) >> PAGE_BITS);
|
||||
atomic_int64_sub(&total_available_pages, PAGE_FLOOR((size_t) &kernel_end + 511*PAGE_SIZE) >> PAGE_BITS);
|
||||
atomic_int64_add(&total_allocated_pages, PAGE_FLOOR((size_t) &kernel_start + image_size + 511*PAGE_SIZE) >> PAGE_BITS);
|
||||
atomic_int64_sub(&total_available_pages, PAGE_FLOOR((size_t) &kernel_start + image_size + 511*PAGE_SIZE) >> PAGE_BITS);
|
||||
|
||||
LOG_INFO("free list starts at 0x%zx, limit 0x%zx\n", init_list.start, init_list.end);
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
/* Note that linker symbols are not variables, they have no memory
|
||||
* allocated for maintaining a value, rather their address is their value. */
|
||||
extern const void kernel_start;
|
||||
extern const void kernel_end;
|
||||
|
||||
extern size_t l0_pgtable;
|
||||
|
||||
|
|
|
@ -366,8 +366,8 @@ int load_kernel(uint8_t* mem, char* path)
|
|||
Elf64_Ehdr hdr;
|
||||
Elf64_Phdr *phdr = NULL;
|
||||
size_t buflen;
|
||||
size_t pstart = 0;
|
||||
int fd, ret;
|
||||
int first_load = 1;
|
||||
|
||||
fd = open(path, O_RDONLY);
|
||||
if (fd == -1)
|
||||
|
@ -432,8 +432,8 @@ int load_kernel(uint8_t* mem, char* path)
|
|||
mboot = mem+paddr-GUEST_OFFSET;
|
||||
//fprintf(stderr, "mboot at %p, klog at %p\n", mboot, klog);
|
||||
|
||||
if (first_load) {
|
||||
first_load = 0;
|
||||
if (!pstart) {
|
||||
pstart = paddr;
|
||||
|
||||
// initialize kernel
|
||||
*((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x100)) = paddr; // physical start address
|
||||
|
@ -480,7 +480,7 @@ int load_kernel(uint8_t* mem, char* path)
|
|||
if (verbose)
|
||||
*((uint32_t*) (mem+paddr-GUEST_OFFSET + 0x174)) = (uint32_t) UHYVE_UART_PORT;
|
||||
}
|
||||
*((uint64_t*) (mem+paddr-GUEST_OFFSET + 0x158)) += memsz; // total kernel size
|
||||
*((uint64_t*) (mem+pstart-GUEST_OFFSET + 0x158)) = paddr + memsz - pstart; // total kernel size
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue