finishes sections definitions not using PHDRs

This commit is contained in:
2026-02-01 21:48:30 +01:00
parent f3232373fe
commit c691642555

View File

@@ -1,12 +1,3 @@
PHDRS
{
text PT_LOAD;
data PT_LOAD;
tls PT_TLS;
stack PT_NULL;
}
SECTIONS SECTIONS
{ {
__stack_size = DEFINED(__stack_size) ? __stack_size : 2K; __stack_size = DEFINED(__stack_size) ? __stack_size : 2K;
@@ -22,7 +13,7 @@ SECTIONS
*(.srodata .srodata.*) *(.srodata .srodata.*)
KEEP(*(.init)) KEEP(*(.init))
KEEP(*(.fini)) KEEP(*(.fini))
} > LOCATION_TEXT :text } > LOCATION_TEXT
/* trap/interrupt vectors */ /* trap/interrupt vectors */
.vectors : ALIGN(256) .vectors : ALIGN(256)
@@ -37,7 +28,7 @@ SECTIONS
KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*)))
KEEP(*(.init_array)) KEEP(*(.init_array))
PROVIDE_HIDDEN(__init_array_end = .); PROVIDE_HIDDEN(__init_array_end = .);
} > LOCATION_TEXT :text } > LOCATION_TEXT
.fini_array : ALIGN(4) .fini_array : ALIGN(4)
{ {
@@ -45,21 +36,25 @@ SECTIONS
KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*))) KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*)))
KEEP(*(.fini_array)) KEEP(*(.fini_array))
PROVIDE_HIDDEN(__fini_array_end = .); 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) .data_pad (NOLOAD) : ALIGN(4)
{ {
} > LOCATION_DATA :data . += __data_offs;
__data_offs = ((ADDR(.data_pad) == 0) ? 0x10 : 0); } > LOCATION_DATA
/* .data in LOCATION_DATA, Load-Image in LOCATION_TEXT, PHDR is data */ /* .data in LOCATION_DATA, Load-Image in LOCATION_TEXT, PHDR is data */
.data : ALIGN(4) .data : ALIGN(4)
{ {
. += __data_offs;
__data_start = .; __data_start = .;
*(.data .data.*) *(.data .data.*)
*(.sdata .sdata.*)
__data_end = .; __data_end = .;
} > LOCATION_DATA AT> LOCATION_TEXT :data } > LOCATION_DATA AT> LOCATION_TEXT
__data_source = LOADADDR(.data); __data_source = LOADADDR(.data);
/* TLS: in LOCATION_DATA, initial values are in LOCATION_TEXT, PHDR is tls */ /* TLS: in LOCATION_DATA, initial values are in LOCATION_TEXT, PHDR is tls */
@@ -78,18 +73,18 @@ SECTIONS
__tbss_size = __tbss_end - __tbss_start; __tbss_size = __tbss_end - __tbss_start;
__tls_size = __tbss_end - __tls_base; __tls_size = __tbss_end - __tls_base;
} > LOCATION_DATA AT> LOCATION_TEXT :tls } > LOCATION_DATA AT> LOCATION_TEXT
__tdata_source = LOADADDR(.tls); __tdata_source = LOADADDR(.tls);
/* normales BSS (inkl. sbss), PHDR is data */ /* normales BSS (inkl. sbss), PHDR is data */
.bss (NOLOAD) : ALIGN(16) .bss (NOLOAD) : ALIGN(16)
{ {
__bss_start = .; __bss_start = .;
*(.sbss .sbss.*)
*(.bss .bss.*) *(.bss .bss.*)
*(.sbss .sbss.*)
*(COMMON) *(COMMON)
__bss_end = .; __bss_end = .;
} > LOCATION_DATA :data } > LOCATION_DATA
__global_pointer$ = .; __global_pointer$ = .;
@@ -105,7 +100,7 @@ SECTIONS
PROVIDE( _heap_end = . ); PROVIDE( _heap_end = . );
. = __stack_segment_size; . = __stack_segment_size;
PROVIDE( _sp = . ); PROVIDE( _sp = . );
} >LOCATION_STACK AT>LOCATION_STACK :stack } >LOCATION_STACK AT>LOCATION_STACK
PROVIDE( tohost = . ); PROVIDE( tohost = . );
PROVIDE( fromhost = . + 8 ); PROVIDE( fromhost = . + 8 );