diff --git a/repos/base-hw/lib/mk/x86_64/core.mk b/repos/base-hw/lib/mk/x86_64/core.mk index 0756f90f2..db26ef3cf 100644 --- a/repos/base-hw/lib/mk/x86_64/core.mk +++ b/repos/base-hw/lib/mk/x86_64/core.mk @@ -11,6 +11,7 @@ INC_DIR += $(REP_DIR)/src/core/include/spec/x86_64 # add assembly sources SRC_S += spec/x86_64/mode_transition.s SRC_S += spec/x86_64/kernel/crt0.s +SRC_S += spec/x86_64/kernel/crt0_translation_table.s SRC_S += spec/x86_64/crt0.s # add C++ sources diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/crt0.s b/repos/base-hw/src/core/spec/x86_64/kernel/crt0.s index 2f8426d59..8cbeb2a06 100644 --- a/repos/base-hw/src/core/spec/x86_64/kernel/crt0.s +++ b/repos/base-hw/src/core/spec/x86_64/kernel/crt0.s @@ -123,38 +123,3 @@ .p2align 8 .space 32 * 1024 _stack_high: - -.data - - /**************************************** - ** Initial pagetables ** - ** Identity mapping from 2MiB to 4MiB ** - ****************************************/ - - /* PML4 */ - .p2align MIN_PAGE_SIZE_LOG2 - _kernel_pml4: - .quad _kernel_pdp + 0xf - .fill 511, 8, 0x0 - - /* PDP */ - .p2align MIN_PAGE_SIZE_LOG2 - _kernel_pdp: - .quad _kernel_pd + 0xf - .fill 2, 8, 0x0 - .quad _kernel_pd_503 + 0xf - .fill 508, 8, 0x0 - - /* PD */ - .p2align MIN_PAGE_SIZE_LOG2 - _kernel_pd: - .quad 0 - .quad 0x20018f - .fill 510, 8, 0x0 - - .p2align MIN_PAGE_SIZE_LOG2 - _kernel_pd_503: - .fill 502, 8, 0x0 - .quad 0xfec0019f - .quad 0xfee0019f - .fill 8, 8, 0x0 diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/crt0_translation_table.s b/repos/base-hw/src/core/spec/x86_64/kernel/crt0_translation_table.s new file mode 100644 index 000000000..9462d4547 --- /dev/null +++ b/repos/base-hw/src/core/spec/x86_64/kernel/crt0_translation_table.s @@ -0,0 +1,51 @@ +/* + * \brief Initial pagetables for x86_64 + * \author Adrian-Ken Rueegsegger + * \author Reto Buerki + * \date 2015-04-22 + */ + +/* + * Copyright (C) 2015 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +.include "macros.s" + +.data + + /******************************************** + ** Identity mapping from 2MiB to 4MiB ** + ** plus mappings for LAPIC, I/O APIC MMIO ** + ********************************************/ + + /* PML4 */ + .p2align MIN_PAGE_SIZE_LOG2 + .global _kernel_pml4 + _kernel_pml4: + .quad _kernel_pdp + 0xf + .fill 511, 8, 0x0 + + /* PDP */ + .p2align MIN_PAGE_SIZE_LOG2 + _kernel_pdp: + .quad _kernel_pd + 0xf + .fill 2, 8, 0x0 + .quad _kernel_pd_503 + 0xf + .fill 508, 8, 0x0 + + /* PD */ + .p2align MIN_PAGE_SIZE_LOG2 + _kernel_pd: + .quad 0 + .quad 0x20018f + .fill 510, 8, 0x0 + + .p2align MIN_PAGE_SIZE_LOG2 + _kernel_pd_503: + .fill 502, 8, 0x0 + .quad 0xfec0019f + .quad 0xfee0019f + .fill 8, 8, 0x0