#include "errno.h"
#include "hal/cpu.h"
+#include "hal/mm.h"
#include <stdint.h>
#if defined(__i386__)
-#define X86_KERNEL_VIRT_BASE 0xC0000000U
static void* pmm_alloc_page_low_16mb(void) {
for (int tries = 0; tries < 4096; tries++) {
if (ph_end > file_len) return -EINVAL;
if (eh->e_entry == 0) return -EINVAL;
- if (eh->e_entry >= X86_KERNEL_VIRT_BASE) return -EINVAL;
+ if (eh->e_entry >= hal_mm_kernel_virt_base()) return -EINVAL;
return 0;
}
static int elf32_map_user_range(uintptr_t as, uintptr_t vaddr, size_t len, uint32_t flags) {
if (len == 0) return 0;
if (vaddr == 0) return -EINVAL;
- if (vaddr >= X86_KERNEL_VIRT_BASE) return -EINVAL;
+ if (vaddr >= hal_mm_kernel_virt_base()) return -EINVAL;
uintptr_t end = vaddr + len - 1;
if (end < vaddr) return -EINVAL;
- if (end >= X86_KERNEL_VIRT_BASE) return -EINVAL;
+ if (end >= hal_mm_kernel_virt_base()) return -EINVAL;
uintptr_t start_page = vaddr & ~(uintptr_t)0xFFF;
uintptr_t end_page = end & ~(uintptr_t)0xFFF;
vmm_as_destroy(new_as);
return -EINVAL;
}
- if (ph[i].p_vaddr >= X86_KERNEL_VIRT_BASE) {
+ if (ph[i].p_vaddr >= hal_mm_kernel_virt_base()) {
uart_print("[ELF] PT_LOAD in kernel range rejected\n");
kfree(file);
vmm_as_activate(old_as);
vmm_as_destroy(new_as);
return -EINVAL;
}
- if (seg_end >= X86_KERNEL_VIRT_BASE) {
+ if (seg_end >= hal_mm_kernel_virt_base()) {
kfree(file);
vmm_as_activate(old_as);
vmm_as_destroy(new_as);
#include "errno.h"
#include "interrupts.h"
+#include "hal/mm.h"
#include <stdint.h>
#if defined(__i386__)
-#define X86_KERNEL_VIRT_BASE 0xC0000000U
static int x86_user_range_basic_ok(uintptr_t uaddr, size_t len) {
if (len == 0) return 1;
if (uaddr == 0) return 0;
- if (uaddr >= X86_KERNEL_VIRT_BASE) return 0;
+ if (uaddr >= hal_mm_kernel_virt_base()) return 0;
uintptr_t end = uaddr + len - 1;
if (end < uaddr) return 0;
- if (end >= X86_KERNEL_VIRT_BASE) return 0;
+ if (end >= hal_mm_kernel_virt_base()) return 0;
return 1;
}
if (g_uaccess_recover_eip == 0) return 0;
// Only recover faults on user addresses; kernel faults should still panic.
- if (fault_addr >= X86_KERNEL_VIRT_BASE) return 0;
+ if (fault_addr >= hal_mm_kernel_virt_base()) return 0;
g_uaccess_faulted = 1;
regs->eip = (uint32_t)g_uaccess_recover_eip;