From cbdf4b575d83ddd24e71f7e896ed03883fba18e8 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sun, 26 Sep 2021 20:16:46 -0400 Subject: [PATCH] Kernel: Move prekernel linker.ld into Arch subdirectories This moves Kernel/Prekernel/linker.ld unchanged to Kernel/Prekernel/Arch/aarch64 and Kernel/Prekernel/Arch/x86. The aarch64 will change in a future commit. No behavior change. --- Kernel/Prekernel/{ => Arch/aarch64}/linker.ld | 0 Kernel/Prekernel/Arch/x86/linker.ld | 47 +++++++++++++++++++ Kernel/Prekernel/CMakeLists.txt | 9 +++- 3 files changed, 54 insertions(+), 2 deletions(-) rename Kernel/Prekernel/{ => Arch/aarch64}/linker.ld (100%) create mode 100644 Kernel/Prekernel/Arch/x86/linker.ld diff --git a/Kernel/Prekernel/linker.ld b/Kernel/Prekernel/Arch/aarch64/linker.ld similarity index 100% rename from Kernel/Prekernel/linker.ld rename to Kernel/Prekernel/Arch/aarch64/linker.ld diff --git a/Kernel/Prekernel/Arch/x86/linker.ld b/Kernel/Prekernel/Arch/x86/linker.ld new file mode 100644 index 0000000000..1204520540 --- /dev/null +++ b/Kernel/Prekernel/Arch/x86/linker.ld @@ -0,0 +1,47 @@ +ENTRY(start) + +PHDRS +{ + boot_text PT_LOAD ; + text PT_LOAD ; + data PT_LOAD ; + bss PT_LOAD ; +} + +SECTIONS +{ + . = 0x00100000; + + start_of_prekernel_image = .; + + .boot_text ALIGN(4K) : AT (ADDR(.boot_text)) + { + KEEP(*(.multiboot)) + } :boot_text + + .text ALIGN(4K) : AT (ADDR(.text)) + { + start_of_prekernel_text = .; + *(.text*) + } :text + + .rodata ALIGN(4K) : AT (ADDR(.rodata)) + { + *(.rodata*) + } :data + + .data ALIGN(4K) : AT (ADDR(.data)) + { + *(.data*) + } :data + + .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 952cbb3371..df638c5b06 100644 --- a/Kernel/Prekernel/CMakeLists.txt +++ b/Kernel/Prekernel/CMakeLists.txt @@ -44,8 +44,13 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") add_executable(${PREKERNEL_TARGET} ${SOURCES}) target_compile_options(${PREKERNEL_TARGET} PRIVATE -no-pie -fno-pic -fno-threadsafe-statics) -target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld -nostdlib LINKER:--no-pie) -set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) +if ("${SERENITY_ARCH}" STREQUAL "aarch64") + set(PREKERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld") +else() + set(PREKERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/linker.ld") +endif() +target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${PREKERNEL_LINKER_SCRIPT} -nostdlib LINKER:--no-pie) +set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${PREKERNEL_LINKER_SCRIPT}) if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_link_libraries(${PREKERNEL_TARGET} PRIVATE gcc)