OUTPUT_ARCH(sh) EXTERN (_start) ENTRY (_start) __DYNAMIC = 0; /* * The memory map look like this: * +--------------------+ <- 0x06000000 * | .text | * | | * | __text_end | * +--------------------+ * . . * . . * . . * +--------------------+ * | .data | initialized data goes here * | | * | __data_end | * +--------------------+ * | .bss | * | __bss_start | start of bss, cleared by crt0 * | | * | __bss__end | start of heap, used by sbrk() * +--------------------+ * . . * . . * . . * | __stack | top of stack (for Master SH2) * +--------------------+ <- 0x0603FC00 */ MEMORY { rom (rx) : ORIGIN = 0x02000000, LENGTH = 0x00400000 ram (wx) : ORIGIN = 0x06000000, LENGTH = 0x0003FC00 } /* * Allocate the stack to be at the top of memory, since the stack * grows down */ PROVIDE (__stack = 0x0603FC00); SECTIONS { /* .text 0x02000000 : */ .text 0x06000000 : AT ( 0x00000000 ) { __text_start = .; *(.text) *(.text.*) *(.gnu.linkonce.t.*) . = ALIGN(16); __INIT_SECTION__ = .; KEEP (*(.init)) SHORT (0x000B) /* rts */ SHORT (0x0009) /* nop */ . = ALIGN(16); __FINI_SECTION__ = .; KEEP (*(.fini)) SHORT (0x000B) /* rts */ SHORT (0x0009) /* nop */ *(.eh_frame_hdr) KEEP (*(.eh_frame)) *(.gcc_except_table) KEEP (*(.jcr)) . = ALIGN(16); __CTOR_LIST__ = .; ___CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) LONG(0) __CTOR_END__ = .; . = ALIGN(16); __DTOR_LIST__ = .; ___DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) LONG(0) __DTOR_END__ = .; *(.rdata) *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) . = ALIGN(16); __text_end = .; /* } > rom __text_size = __text_end - __text_start; .data 0x06000000 : AT ( LOADADDR (.text) + SIZEOF (.text) ) { */ __data_start = .; *(.data) *(.data.*) *(.gnu.linkonce.d.*) CONSTRUCTORS *(.lit8) *(.lit4) *(.sdata) *(.sdata.*) *(.gnu.linkonce.s.*) . = ALIGN(16); __data_end = .; } > ram __data_size = __data_end - __data_start; .bss : { __bss_start = .; *(.bss) *(.bss.*) *(.gnu.linkonce.b.*) *(.sbss) *(.sbss.*) *(.gnu.linkonce.sb.*) *(.scommon) *(COMMON) . = ALIGN(16); end = .; _end = end; __end = _end; __bss_end = .; } > ram __bss_size = __bss_end - __bss_start; }