From c691642555ccf4118da18bc37b92961ea97056ca Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sun, 1 Feb 2026 21:48:30 +0100 Subject: [PATCH] finishes sections definitions not using PHDRs --- src/sections.ld | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/sections.ld b/src/sections.ld index 0e53721..19cbcda 100644 --- a/src/sections.ld +++ b/src/sections.ld @@ -1,12 +1,3 @@ -PHDRS -{ - text PT_LOAD; - data PT_LOAD; - tls PT_TLS; - stack PT_NULL; -} - - SECTIONS { __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; @@ -22,13 +13,13 @@ SECTIONS *(.srodata .srodata.*) KEEP(*(.init)) KEEP(*(.fini)) - } > LOCATION_TEXT :text + } > LOCATION_TEXT /* trap/interrupt vectors */ .vectors : ALIGN(256) { KEEP(*(.vectors .vectors.*)) - } > LOCATION_TEXT + } > LOCATION_TEXT /* C++ ctors/dtors */ .init_array : ALIGN(4) @@ -37,7 +28,7 @@ SECTIONS KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN(__init_array_end = .); - } > LOCATION_TEXT :text + } > LOCATION_TEXT .fini_array : ALIGN(4) { @@ -45,21 +36,25 @@ SECTIONS KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*))) KEEP(*(.fini_array)) PROVIDE_HIDDEN(__fini_array_end = .); - } > LOCATION_TEXT :text + } > LOCATION_TEXT + .data_mark (NOLOAD) : ALIGN(4) + { + } > LOCATION_DATA + __data_offs = ((ADDR(.data_mark) == 0) ? 0x10 : 0); .data_pad (NOLOAD) : ALIGN(4) { - } > LOCATION_DATA :data - __data_offs = ((ADDR(.data_pad) == 0) ? 0x10 : 0); + . += __data_offs; + } > LOCATION_DATA /* .data in LOCATION_DATA, Load-Image in LOCATION_TEXT, PHDR is data */ .data : ALIGN(4) { - . += __data_offs; __data_start = .; *(.data .data.*) + *(.sdata .sdata.*) __data_end = .; - } > LOCATION_DATA AT> LOCATION_TEXT :data + } > LOCATION_DATA AT> LOCATION_TEXT __data_source = LOADADDR(.data); /* TLS: in LOCATION_DATA, initial values are in LOCATION_TEXT, PHDR is tls */ @@ -78,18 +73,18 @@ SECTIONS __tbss_size = __tbss_end - __tbss_start; __tls_size = __tbss_end - __tls_base; - } > LOCATION_DATA AT> LOCATION_TEXT :tls + } > LOCATION_DATA AT> LOCATION_TEXT __tdata_source = LOADADDR(.tls); /* normales BSS (inkl. sbss), PHDR is data */ .bss (NOLOAD) : ALIGN(16) { __bss_start = .; - *(.sbss .sbss.*) *(.bss .bss.*) + *(.sbss .sbss.*) *(COMMON) __bss_end = .; - } > LOCATION_DATA :data + } > LOCATION_DATA __global_pointer$ = .; @@ -105,7 +100,7 @@ SECTIONS PROVIDE( _heap_end = . ); . = __stack_segment_size; PROVIDE( _sp = . ); - } >LOCATION_STACK AT>LOCATION_STACK :stack + } >LOCATION_STACK AT>LOCATION_STACK PROVIDE( tohost = . ); PROVIDE( fromhost = . + 8 );