aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2021-05-18 22:06:59 +0200
committerMarvin Borner2021-05-18 22:07:19 +0200
commit45bfdffcb2e00fda595b3f9318469f6b0d29cbe4 (patch)
treef78d66a7687aeb5c4fe4806adf60f70bab95dd9b
parentc905cd632cc7c5fa8e61eae7c00ed8e14743ced9 (diff)
Fixed issues with intel emulation
-rw-r--r--kernel/drivers/cpu.c6
-rw-r--r--kernel/main.c1
-rw-r--r--libs/libc/alloc.c10
-rw-r--r--libs/libc/print.c2
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;
}