diff --git a/Kernel/Prekernel/Arch/aarch64/boot.S b/Kernel/Prekernel/Arch/aarch64/boot.S index 264f800ad4..f522debef6 100644 --- a/Kernel/Prekernel/Arch/aarch64/boot.S +++ b/Kernel/Prekernel/Arch/aarch64/boot.S @@ -4,7 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ -.text +// In a specially-named text section so that the linker script can put it first in .text. +.section ".text.first" .global start .type start, @function diff --git a/Kernel/Prekernel/Arch/aarch64/linker.ld b/Kernel/Prekernel/Arch/aarch64/linker.ld index 1204520540..9a89f1d4d9 100644 --- a/Kernel/Prekernel/Arch/aarch64/linker.ld +++ b/Kernel/Prekernel/Arch/aarch64/linker.ld @@ -2,7 +2,6 @@ ENTRY(start) PHDRS { - boot_text PT_LOAD ; text PT_LOAD ; data PT_LOAD ; bss PT_LOAD ; @@ -10,18 +9,11 @@ PHDRS SECTIONS { - . = 0x00100000; - - start_of_prekernel_image = .; - - .boot_text ALIGN(4K) : AT (ADDR(.boot_text)) - { - KEEP(*(.multiboot)) - } :boot_text + . = 0x00080000; .text ALIGN(4K) : AT (ADDR(.text)) { - start_of_prekernel_text = .; + *(.text.first) *(.text*) } :text @@ -37,11 +29,6 @@ SECTIONS .bss ALIGN(4K) (NOLOAD) : AT (ADDR(.bss)) { - *(COMMON) *(.bss) - *(.stack) - *(.page_tables) } :bss - - end_of_prekernel_image = .; } diff --git a/Kernel/Prekernel/CMakeLists.txt b/Kernel/Prekernel/CMakeLists.txt index df638c5b06..66167e6a14 100644 --- a/Kernel/Prekernel/CMakeLists.txt +++ b/Kernel/Prekernel/CMakeLists.txt @@ -4,19 +4,13 @@ set(SOURCES ) if ("${SERENITY_ARCH}" STREQUAL "aarch64") set(SOURCES - # This has to be first, so that the entry point is at the start of the image. - # Needed because: - # - execution starts at the start of the image - # - the stack pointer currently starts before the start symbol, so if the start symbol isn't the first symbol, the stack will clobber arbitrary code - # FIXME: Use an aarch64-specific linker script instead. - Arch/aarch64/boot.S - ${SOURCES} Arch/aarch64/GPIO.cpp Arch/aarch64/Mailbox.cpp Arch/aarch64/MainIdRegister.cpp Arch/aarch64/MMIO.cpp Arch/aarch64/UART.cpp + Arch/aarch64/boot.S Arch/aarch64/init.cpp ) else()