1
0
Fork 0
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:
Stefan Lankes 2018-06-13 19:40:38 +00:00
parent 0da5a822b9
commit c48461b796
4 changed files with 15 additions and 12 deletions

View file

@ -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

View file

@ -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);

View file

@ -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;

View file

@ -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;