From 93dc96687b9b0dc2ab9db26aa8dfb79aab96d01d Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Mon, 21 Apr 2025 16:44:27 -0400 Subject: update linker scripts --- config/kernel.ld | 15 +++++++++---- config/user.ld | 65 +++++++++++++++++++++++++++++++------------------------- 2 files changed, 47 insertions(+), 33 deletions(-) (limited to 'config') diff --git a/config/kernel.ld b/config/kernel.ld index bcacf61..8ac23e8 100644 --- a/config/kernel.ld +++ b/config/kernel.ld @@ -1,5 +1,12 @@ ENTRY(_start) +PHDRS +{ + text PT_LOAD; + rodata PT_LOAD; + data PT_LOAD; +} + SECTIONS { . = 1M; @@ -14,7 +21,7 @@ SECTIONS *(.text) *(.text.*) text_end = .; - } + } : text . = ALIGN(0x1000); @@ -23,7 +30,7 @@ SECTIONS *(.rodata) *(.rodata.*) rodata_end = .; - } + } : rodata . = ALIGN(0x1000); @@ -32,7 +39,7 @@ SECTIONS *(.data) *(.data.*) data_end = .; - } + } : data . = ALIGN(0x1000); @@ -42,7 +49,7 @@ SECTIONS *(.bss) *(.bss.*) bss_end = .; - } + } : data kernel_end = .; diff --git a/config/user.ld b/config/user.ld index 9e31dff..da1f8b5 100644 --- a/config/user.ld +++ b/config/user.ld @@ -1,51 +1,58 @@ -/* -** Simple linker script for user-level programs. -*/ - -OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") -OUTPUT_ARCH(i386) ENTRY(_start) +PHDRS +{ + text PT_LOAD; + rodata PT_LOAD; + data PT_LOAD; +} + SECTIONS { - /* user text begins at the second page of the address space */ - . = 0x1000; + . = 1024M; + + user_start = .; .text : { - KEEP(*(.text .stub .text.* .gnu.linkonce.t.*)) - } + text_start = .; + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + text_end = .; + } : text - /* define some standard symbols */ - PROVIDE(etext = .); - PROVIDE(_etext = .); + . = ALIGN(0x1000); - /* read-only data will go at the end of the text section */ .rodata : { - KEEP(*(.rodata .rodata.* .gnu.linkonce.r.*)) - } + rodata_start = .; + *(.rodata) + *(.rodata.*) + *(.gnu.linkonce.r.*) + rodata_end = .; + } : rodata - /* Align the data segment at the next page boundary */ . = ALIGN(0x1000); .data : { - KEEP(*(.data)) - } + data_start = .; + *(.data) + *(.data.*) + data_end = .; + } : data - PROVIDE(edata = .); - PROVIDE(_edata = .); - - /* Page-align the BSS segment */ . = ALIGN(0x1000); - PROVIDE(__bss_start = .); - .bss : { - KEEP(*(.bss)) - } + bss_start = .; + *(COMMON) + *(.bss) + *(.bss.*) + bss_end = .; + } : data - PROVIDE(_end = .); + user_end = .; /DISCARD/ : { - *(.stab .stab_info .stabstr .eh_frame .note.GNU-stack .note.gnu.property .comment) + *(.eh_frame .note.GNU-stack .note.gnu.property .comment) } } -- cgit v1.2.3-freya