diff options
author | Marvin Borner | 2021-05-18 22:06:59 +0200 |
---|---|---|
committer | Marvin Borner | 2021-05-18 22:07:19 +0200 |
commit | 45bfdffcb2e00fda595b3f9318469f6b0d29cbe4 (patch) | |
tree | f78d66a7687aeb5c4fe4806adf60f70bab95dd9b | |
parent | c905cd632cc7c5fa8e61eae7c00ed8e14743ced9 (diff) |
Fixed issues with intel emulation
-rw-r--r-- | kernel/drivers/cpu.c | 6 | ||||
-rw-r--r-- | kernel/main.c | 1 | ||||
-rw-r--r-- | libs/libc/alloc.c | 10 | ||||
-rw-r--r-- | libs/libc/print.c | 2 |
4 files changed, 11 insertions, 8 deletions
diff --git a/kernel/drivers/cpu.c b/kernel/drivers/cpu.c index 5d53bef..296e73a 100644 --- a/kernel/drivers/cpu.c +++ b/kernel/drivers/cpu.c @@ -179,12 +179,14 @@ CLEAR void cpu_enable_features(void) void clac(void) { - __asm__ volatile("clac" ::: "cc"); + if (cpu_extended_features.ebx & CPUID_EXT_FEAT_EBX_SMAP) + __asm__ volatile("clac" ::: "cc"); } void stac(void) { - __asm__ volatile("stac" ::: "cc"); + if (cpu_extended_features.ebx & CPUID_EXT_FEAT_EBX_SMAP) + __asm__ volatile("stac" ::: "cc"); } CLEAR void cli(void) diff --git a/kernel/main.c b/kernel/main.c index c51adc9..93bfc29 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -29,7 +29,6 @@ int kernel_main(u32 magic, u32 addr, u32 esp) multiboot_init(magic, addr); memory_install(); - memory_switch_dir(virtual_kernel_dir()); cpu_enable_features(); cpu_print(); diff --git a/libs/libc/alloc.c b/libs/libc/alloc.c index bc48502..ea01a38 100644 --- a/libs/libc/alloc.c +++ b/libs/libc/alloc.c @@ -125,7 +125,7 @@ void *_malloc(u32 req_size) if (size == 0) { liballoc_unlock(); - return malloc(1); + return _malloc(1); } if (l_mem_root == NULL) { @@ -338,12 +338,12 @@ void *_realloc(void *ptr, u32 size) size = ALIGN_UP(size, 16); if (size == 0) { - free(ptr); + _free(ptr); return NULL; } if (ptr == NULL) - return malloc(size); + return _malloc(size); liballoc_lock(); struct liballoc_minor *min = (struct liballoc_minor *)((u32)ptr - MINOR_SIZE); @@ -361,9 +361,9 @@ void *_realloc(void *ptr, u32 size) liballoc_unlock(); - void *new_ptr = malloc(size); + void *new_ptr = _malloc(size); memcpy(new_ptr, ptr, min->req_size); - free(ptr); + _free(ptr); return new_ptr; } diff --git a/libs/libc/print.c b/libs/libc/print.c index c4455eb..463fef6 100644 --- a/libs/libc/print.c +++ b/libs/libc/print.c @@ -241,6 +241,8 @@ void print_trace(u32 count) __asm__ volatile("movl %%ebp, %0;" : "=r"(stk)); print("EBP\tEIP\n"); for (u32 i = 0; stk && memory_readable(stk) && i < count; i++) { + if (!stk->ebp || !stk->eip) + break; printf("0x%x\t0x%x\n", stk->ebp, stk->eip); stk = stk->ebp; } |