diff --git a/headers/private/system/arch/x86_64/arch_commpage_defs.h b/headers/private/system/arch/x86_64/arch_commpage_defs.h index b2e2aff947..f298a32678 100644 --- a/headers/private/system/arch/x86_64/arch_commpage_defs.h +++ b/headers/private/system/arch/x86_64/arch_commpage_defs.h @@ -9,7 +9,9 @@ # error Must not be included directly. Include instead! #endif -// FIXME: correct address -#define ARCH_USER_COMMPAGE_ADDR (0xffff0000) +#define COMMPAGE_ENTRY_X86_MEMCPY (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 0) +#define COMMPAGE_ENTRY_X86_MEMSET (COMMPAGE_ENTRY_FIRST_ARCH_SPECIFIC + 1) + +#define ARCH_USER_COMMPAGE_ADDR (0xffffffffffff0000) #endif /* _SYSTEM_ARCH_x86_64_COMMPAGE_DEFS_H */ diff --git a/src/system/boot/platform/bios_ia32/long.cpp b/src/system/boot/platform/bios_ia32/long.cpp index 3e50305afd..37e7b3701c 100644 --- a/src/system/boot/platform/bios_ia32/long.cpp +++ b/src/system/boot/platform/bios_ia32/long.cpp @@ -27,7 +27,7 @@ #include "mmu.h" -static const uint64 kTableMappingFlags = 0x3; +static const uint64 kTableMappingFlags = 0x7; static const uint64 kLargePageMappingFlags = 0x183; static const uint64 kPageMappingFlags = 0x103; // Global, R/W, Present diff --git a/src/system/kernel/arch/x86/arch_cpu.cpp b/src/system/kernel/arch/x86/arch_cpu.cpp index bcc9050cba..c5adaf70f1 100644 --- a/src/system/kernel/arch/x86/arch_cpu.cpp +++ b/src/system/kernel/arch/x86/arch_cpu.cpp @@ -922,8 +922,6 @@ arch_cpu_init_post_modules(kernel_args* args) call_all_cpus(&init_mtrrs, NULL); } - // TODO x86_64 -#ifndef __x86_64__ // get optimized functions from the CPU module if (sCpuModule != NULL && sCpuModule->get_optimized_functions != NULL) { x86_optimized_functions functions; @@ -960,7 +958,7 @@ arch_cpu_init_post_modules(kernel_args* args) elf_add_memory_image_symbol(image, "commpage_memset", ((addr_t*)USER_COMMPAGE_ADDR)[COMMPAGE_ENTRY_X86_MEMSET], memsetLen, B_SYMBOL_TYPE_TEXT); -#endif + return B_OK; } diff --git a/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.cpp b/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.cpp index a834cd264c..e9dbf30c4b 100644 --- a/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.cpp +++ b/src/system/kernel/arch/x86/paging/64bit/X86PagingMethod64Bit.cpp @@ -131,7 +131,8 @@ X86PagingMethod64Bit::MapEarly(kernel_args* args, addr_t virtualAddress, SetTableEntry(pdpte, (physicalPageDir & X86_64_PDPTE_ADDRESS_MASK) | X86_64_PDPTE_PRESENT - | X86_64_PDPTE_WRITABLE); + | X86_64_PDPTE_WRITABLE + | X86_64_PDPTE_USER); // Map it and zero it. virtualPageDir = (uint64*)fKernelPhysicalPageMapper->GetPageTableAt( @@ -154,7 +155,8 @@ X86PagingMethod64Bit::MapEarly(kernel_args* args, addr_t virtualAddress, SetTableEntry(pde, (physicalPageTable & X86_64_PDE_ADDRESS_MASK) | X86_64_PDE_PRESENT - | X86_64_PDE_WRITABLE); + | X86_64_PDE_WRITABLE + | X86_64_PDE_USER); // Map it and zero it. virtualPageTable = (uint64*)fKernelPhysicalPageMapper->GetPageTableAt( @@ -222,7 +224,7 @@ X86PagingMethod64Bit::PageTableForAddress(uint64* virtualPML4, SetTableEntry(pml4e, (physicalPDPT & X86_64_PML4E_ADDRESS_MASK) | X86_64_PML4E_PRESENT | X86_64_PML4E_WRITABLE - | (isKernel ? 0 : X86_64_PML4E_USER)); + | X86_64_PML4E_USER); mapCount++; } @@ -252,7 +254,7 @@ X86PagingMethod64Bit::PageTableForAddress(uint64* virtualPML4, SetTableEntry(pdpte, (physicalPageDir & X86_64_PDPTE_ADDRESS_MASK) | X86_64_PDPTE_PRESENT | X86_64_PDPTE_WRITABLE - | (isKernel ? 0 : X86_64_PDPTE_USER)); + | X86_64_PDPTE_USER); mapCount++; } @@ -282,7 +284,7 @@ X86PagingMethod64Bit::PageTableForAddress(uint64* virtualPML4, SetTableEntry(pde, (physicalPageTable & X86_64_PDE_ADDRESS_MASK) | X86_64_PDE_PRESENT | X86_64_PDE_WRITABLE - | (isKernel ? 0 : X86_64_PDE_USER)); + | X86_64_PDE_USER); mapCount++; } diff --git a/src/system/kernel/commpage.cpp b/src/system/kernel/commpage.cpp index aab641905a..4419bfd6cf 100644 --- a/src/system/kernel/commpage.cpp +++ b/src/system/kernel/commpage.cpp @@ -32,7 +32,8 @@ allocate_commpage_entry(int entry, size_t size) sFreeCommPageSpace = ALIGN_ENTRY((addr_t)sFreeCommPageSpace + size); sCommPageAddress[entry] = (addr_t)sUserCommPageAddress + ((addr_t)space - (addr_t)sCommPageAddress); -dprintf("allocate_commpage_entry(%d, %lu) -> %p\n", entry, size, (void*)sCommPageAddress[entry]); + dprintf("allocate_commpage_entry(%d, %lu) -> %p\n", entry, size, + (void*)sCommPageAddress[entry]); return space; } diff --git a/src/system/kernel/elf.cpp b/src/system/kernel/elf.cpp index 822d81885e..8c639e5f3f 100644 --- a/src/system/kernel/elf.cpp +++ b/src/system/kernel/elf.cpp @@ -463,7 +463,7 @@ dump_symbols(int argc, char **argv) // dump symbols - kprintf("Symbols of image %" B_PRId32 "\"%s\":\n", image->id, image->name); + kprintf("Symbols of image %" B_PRId32 " \"%s\":\n", image->id, image->name); kprintf("%-*s Type Size Name\n", B_PRINTF_POINTER_WIDTH, "Address"); if (image->num_debug_symbols > 0) {