SECTIONS { __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; __stack_segment_size = DEFINED(__stack_segment_size) ? __stack_segment_size : __stack_size; /* Code/Const in LOCATION_TEXT */ . = ORIGIN(LOCATION_TEXT); .text : ALIGN(4) { KEEP(*(.text.boot)) *(.text .text.*) *(.rodata .rodata.*) *(.srodata .srodata.*) KEEP(*(.init)) KEEP(*(.fini)) } > LOCATION_TEXT /* trap/interrupt vectors */ .vectors : ALIGN(256) { KEEP(*(.vectors .vectors.*)) } > LOCATION_TEXT /* C++ ctors/dtors */ .init_array : ALIGN(4) { PROVIDE_HIDDEN(__init_array_start = .); KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) KEEP(*(.init_array)) PROVIDE_HIDDEN(__init_array_end = .); } > LOCATION_TEXT .fini_array : ALIGN(4) { PROVIDE_HIDDEN(__fini_array_start = .); KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*))) KEEP(*(.fini_array)) PROVIDE_HIDDEN(__fini_array_end = .); } > LOCATION_TEXT .data_mark (NOLOAD) : ALIGN(4) { } > LOCATION_DATA __data_offs = ((ADDR(.data_mark) == 0) ? 0x10 : 0); .data_pad (NOLOAD) : ALIGN(4) { . += __data_offs; } > LOCATION_DATA /* .data in LOCATION_DATA, Load-Image in LOCATION_TEXT, PHDR is data */ .data : ALIGN(4) { __data_start = .; *(.data .data.*) *(.sdata .sdata.*) __data_end = .; } > LOCATION_DATA AT> LOCATION_TEXT __data_source = LOADADDR(.data); /* TLS: in LOCATION_DATA, initial values are in LOCATION_TEXT, PHDR is tls */ .tls : ALIGN(16) { /* TLS init data (.tdata) */ __tls_base = .; *(.tdata .tdata.* .gnu.linkonce.td.*) __tdata_end = .; __tdata_size = __tdata_end - __tls_base; /* TLS bss (.tbss) */ __tbss_start = .; *(.tbss .tbss.* .gnu.linkonce.tb.*) __tbss_end = .; __tbss_size = __tbss_end - __tbss_start; __tls_size = __tbss_end - __tls_base; } > LOCATION_DATA AT> LOCATION_TEXT __tdata_source = LOADADDR(.tls); /* normales BSS (inkl. sbss), PHDR is data */ .bss (NOLOAD) : ALIGN(16) { __bss_start = .; *(.bss .bss.*) *(.sbss .sbss.*) *(COMMON) __bss_end = .; } > LOCATION_DATA __global_pointer$ = .; /* Heap/Stack Grenzen */ . = ALIGN(16); __heap_start = .; /* __stack_top = ORIGIN(LOCATION_BSS) + LENGTH(LOCATION_BSS); */ /* PROVIDE(_sp = __stack_top); */ /* stack segement, PHDR is stack */ .stack ORIGIN(LOCATION_STACK) + LENGTH(LOCATION_STACK) - __stack_segment_size : { PROVIDE( __heap_end = . ); . = __stack_segment_size; PROVIDE( _sp = . ); } >LOCATION_STACK AT>LOCATION_STACK PROVIDE( tohost = . ); PROVIDE( fromhost = . + 8 ); /DISCARD/ : { *(.eh_frame*) *(.comment) *(.note .note.*) } }