/* * Copyright (c) 2017, Alex Taradov * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ OUTPUT_ARCH("riscv") MEMORY { flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 16M ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K } PHDRS { flash PT_LOAD; ram_init PT_LOAD; ram PT_NULL; } ENTRY(_start) __top_flash = ORIGIN(flash) + LENGTH(flash); __top_ram = ORIGIN(ram) + LENGTH(ram); SECTIONS { .text : { KEEP (*(.init._start)) KEEP (*(.init.reset_handler)) KEEP (*(SORT_NONE(.init))) *(.text.unlikely .text.unlikely.*) *(.text.startup .text.startup.*) *(.text .text.*) *(.gnu.linkonce.t.*) } >flash AT>flash :flash . = ALIGN(4); PROVIDE (_etext = .); .rodata : { *(.rdata) *(.rodata .rodata.*) *(.gnu.linkonce.r.*) } >flash AT>flash :flash . = ALIGN(4); .lalign : { . = ALIGN(4); PROVIDE( _data_lma = . ); } >flash AT>flash :flash .dalign : { . = ALIGN(4); PROVIDE( _data = . ); } >ram AT>flash :ram_init .data : { *(.data .data.*) *(.gnu.linkonce.d.*) } >ram AT>flash :ram_init .srodata : { PROVIDE( _gp = . + 0x800 ); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) } >ram AT>flash :ram_init .sdata : { *(.sdata .sdata.*) *(.gnu.linkonce.s.*) } >ram AT>flash :ram_init . = ALIGN(4); PROVIDE( _edata = . ); PROVIDE( _bss = . ); .bss : { *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss .bss.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(4); } >ram AT>ram :ram . = ALIGN(8); PROVIDE( _ebss = . ); PROVIDE( _end = . ); PROVIDE(_stack_top = __top_ram); }