156 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | OUTPUT_ARCH( "riscv" ) | ||
|  | 
 | ||
|  | ENTRY( _start_1 ) | ||
|  | 
 | ||
|  | MEMORY | ||
|  | { | ||
|  | /* | ||
|  |   iram (rxai!w) : ORIGIN = 0x00fc1000, LENGTH = 31K | ||
|  |   dram (wxa!ri) : ORIGIN = 0x00fc9000, LENGTH = 29K | ||
|  | */ | ||
|  |   iram (rxai!w) : ORIGIN = 0x00fd0000, LENGTH = 64K | ||
|  |   dram (wxa!ri) : ORIGIN = 0x00fe0000, LENGTH = 128K | ||
|  | } | ||
|  | 
 | ||
|  | SECTIONS | ||
|  | { | ||
|  |   __stack_size = DEFINED(__stack_size) ? __stack_size : 32K; | ||
|  | 
 | ||
|  |   .init           : | ||
|  |   { | ||
|  |     KEEP (*(SORT_NONE(.init))) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .text           : | ||
|  |   { | ||
|  |     *(.text .text.*) | ||
|  |     *(.gnu.linkonce.t.*) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .fini           : | ||
|  |   { | ||
|  |     KEEP (*(SORT_NONE(.fini))) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   PROVIDE (__etext = .); | ||
|  |   PROVIDE (_etext = .); | ||
|  |   PROVIDE (etext = .); | ||
|  | 
 | ||
|  |   .rodata         : | ||
|  |   { | ||
|  |     *(.rdata) | ||
|  |     *(.rodata .rodata.*) | ||
|  |     *(.gnu.linkonce.r.*) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   . = ALIGN(4); | ||
|  | 
 | ||
|  |   .preinit_array  : | ||
|  |   { | ||
|  |     PROVIDE_HIDDEN (__preinit_array_start = .); | ||
|  |     KEEP (*(.preinit_array)) | ||
|  |     PROVIDE_HIDDEN (__preinit_array_end = .); | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .init_array     : | ||
|  |   { | ||
|  |     PROVIDE_HIDDEN (__init_array_start = .); | ||
|  |     KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) | ||
|  |     KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) | ||
|  |     PROVIDE_HIDDEN (__init_array_end = .); | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .fini_array     : | ||
|  |   { | ||
|  |     PROVIDE_HIDDEN (__fini_array_start = .); | ||
|  |     KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) | ||
|  |     KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) | ||
|  |     PROVIDE_HIDDEN (__fini_array_end = .); | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .ctors          : | ||
|  |   { | ||
|  |     /* gcc uses crtbegin.o to find the start of | ||
|  |        the constructors, so we make sure it is | ||
|  |        first.  Because this is a wildcard, it | ||
|  |        doesn't matter if the user does not | ||
|  |        actually link against crtbegin.o; the | ||
|  |        linker won't look for a file to match a | ||
|  |        wildcard.  The wildcard also means that it | ||
|  |        doesn't matter which directory crtbegin.o | ||
|  |        is in.  */ | ||
|  |     KEEP (*crtbegin.o(.ctors)) | ||
|  |     KEEP (*crtbegin?.o(.ctors)) | ||
|  |     /* We don't want to include the .ctor section from | ||
|  |        the crtend.o file until after the sorted ctors. | ||
|  |        The .ctor section from the crtend file contains the | ||
|  |        end of ctors marker and it must be last */ | ||
|  |     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) | ||
|  |     KEEP (*(SORT(.ctors.*))) | ||
|  |     KEEP (*(.ctors)) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .dtors          : | ||
|  |   { | ||
|  |     KEEP (*crtbegin.o(.dtors)) | ||
|  |     KEEP (*crtbegin?.o(.dtors)) | ||
|  |     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) | ||
|  |     KEEP (*(SORT(.dtors.*))) | ||
|  |     KEEP (*(.dtors)) | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .lalign         : | ||
|  |   { | ||
|  |     . = ALIGN(4); | ||
|  |     PROVIDE( _data_lma = . ); | ||
|  |   } >iram | ||
|  | 
 | ||
|  |   .dalign         : | ||
|  |   { | ||
|  |     . = ALIGN(4); | ||
|  |     PROVIDE( _data = . ); | ||
|  |   } >dram AT>iram | ||
|  | 
 | ||
|  |   .data          : | ||
|  |   { | ||
|  |     *(.data .data.*) | ||
|  |     *(.gnu.linkonce.d.*) | ||
|  |     *(.srodata.cst16) | ||
|  |     *(.srodata.cst8) | ||
|  |     *(.srodata.cst4) | ||
|  |     *(.srodata.cst2) | ||
|  |     *(.srodata .srodata.*) | ||
|  |     *(.sdata .sdata.*) | ||
|  |     *(.gnu.linkonce.s.*) | ||
|  |   } >dram AT>iram | ||
|  | 
 | ||
|  |   . = ALIGN(4); | ||
|  |   PROVIDE( _edata = . ); | ||
|  |   PROVIDE( edata = . ); | ||
|  | 
 | ||
|  |   PROVIDE( _fbss = . ); | ||
|  |   PROVIDE( __bss_start = . ); | ||
|  |   .bss            : | ||
|  |   { | ||
|  |     *(.sbss*) | ||
|  |     *(.gnu.linkonce.sb.*) | ||
|  |     *(.bss .bss.*) | ||
|  |     *(.gnu.linkonce.b.*) | ||
|  |     *(COMMON) | ||
|  |     . = ALIGN(4); | ||
|  |   } >dram | ||
|  | 
 | ||
|  |   . = ALIGN(8); | ||
|  |   PROVIDE( _end = . ); | ||
|  |   PROVIDE( end = . ); | ||
|  | 
 | ||
|  |   .stack ORIGIN(dram) + LENGTH(dram) - __stack_size : | ||
|  |   { | ||
|  |     PROVIDE( _heap_end = . ); | ||
|  |     . = __stack_size; | ||
|  |     PROVIDE( _sp = . ); | ||
|  |   } >dram | ||
|  | } | ||
|  | 
 | ||
|  | INCLUDE "rom.addrs.ld" |