/* $NetBSD: ldscript,v 1.2 2020/02/12 18:11:30 thorpej Exp $ */ OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(SDRAM) MEMORY { /* RedBoot will copy the gzboot+compressed kernel image from the FIS partition starting @ 0x50060000 to the SDRAM location starting at 0x01d00000. gzboot will uncompress the kernel to 0x00200000. NOTE: Even though there is room for 3M of gzboot+compressed kernel, there is only room for 1M of this in the FIS partition. So we declare that same limit for "sdram" to simplify the linker script. */ flash : o = 0x50060000, l = 1M sdram : o = 0x01d00000, l = 1M /* kernel loads at 0x00200000 */ } SECTIONS { SDRAM = 0x01d00000; /DISCARD/ : { *(.ARM.attributes*) *(.ARM.exidx) } /* Read-only sections, merged into text segment: */ __text_store = SDRAM; .text : AT (SDRAM) { *(.text) *(.text.*) *(.stub) *(.glue_7t) *(.glue_7) *(.rodata) *(.rodata.*) } > sdram =0 PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); __data_store = SDRAM + SIZEOF(.text); .data : AT (LOADADDR(.text) + SIZEOF(.text)) { __data_start = . ; *(.data) *(.data.*) } > sdram .sdata : AT (LOADADDR(.data) + SIZEOF(.data)) { *(.sdata) *(.sdata.*) . = ALIGN(32 / 8); } > sdram _edata = .; PROVIDE (edata = .); __bss_start = .; __bss_start__ = .; .sbss : AT (LOADADDR(.sdata) + SIZEOF(.sdata)) { PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .); *(.dynsbss) *(.sbss) *(.sbss.*) *(.scommon) PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .); } > sdram .bss : AT (LOADADDR(.sbss) + SIZEOF(.sbss)) { *(.dynbss) *(.bss) *(.bss.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. */ . = ALIGN(32 / 8); } > sdram . = ALIGN(32 / 8); _end = .; _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; PROVIDE (end = .); .image : AT (LOADADDR(.bss) + SIZEOF(.bss)) { *(.image) } > sdram }