diff nuc-fw/finlink/xram.lds @ 80:39b1c369b67f

nuc-fw: links to an ELF image
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Fri, 16 Aug 2013 02:25:58 +0000
parents
children dd13211c9f10
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nuc-fw/finlink/xram.lds	Fri Aug 16 02:25:58 2013 +0000
@@ -0,0 +1,87 @@
+/*
+ * This linker script is used when building the ramImage version of
+ * FreeCalypso firmware: the version which is to be test-run via fc-xram
+ * without touching the flash.  Everything is loaded into IRAM or XRAM,
+ * and in this ld script we pretend as if the actual flash memory
+ * does not exist.
+ */
+
+ENTRY(_FlashorXram_entry)
+
+MEMORY {
+	IRAM : ORIGIN = 0x00800000, LENGTH = 512K
+	XRAM : ORIGIN = 0x01000000, LENGTH = 8M
+}
+
+SECTIONS {
+	/* XIP code, using XRAM to emulate flash */
+	xip.text : {
+		*(xip.text*)
+		xipcode.o(.text*)
+		*libplus.xip.a:(.text*)
+		*libsprintf.a:(.text*)
+	} > XRAM
+
+	/* copy-to-IRAM code */
+	iram.text 0x80001C : {
+		/* the 7 exception and interrupt vectors @ 0x80001C */
+		*(iram.vectors)
+		*(iram.text*)
+		iramcode.o(.text*)
+		*libplus.iram.a:(.text*)
+		*libc.a:(.text*)
+		*libgcc.a:(.text*)
+	} > IRAM AT> XRAM
+	__iramtext_ram_addr = ADDR(iram.text);
+	__iramtext_flash_addr = LOADADDR(iram.text);
+	__iramtext_size = SIZEOF(iram.text);
+
+	/* all .rodata will stay in flash */
+	.rodata : {
+		*(.rodata*)
+	} > XRAM
+
+	/* all .data will go into XRAM */
+	.data : {
+		*(.data*)
+	} > XRAM
+
+	/* we have two kinds of BSS: internal and external */
+	int.bss (NOLOAD) : {
+		*(int.bss*)
+		iramcode.o(.bss* COMMON)
+		*libplus.iram.a:(.bss* COMMON)
+		*libc.a:(.bss* COMMON)
+		*libgcc.a:(.bss* COMMON)
+		. = ALIGN(4);
+	} > IRAM
+	__intbss_start = ADDR(int.bss);
+	__intbss_size = SIZEOF(int.bss);
+
+	ext.bss (NOLOAD) : {
+		*(ext.bss*)
+		xipcode.o(.bss* COMMON)
+		*libplus.xip.a:(.bss* COMMON)
+		*libsprintf.a:(.bss* COMMON)
+		. = ALIGN(4);
+	} > XRAM
+	__extbss_start = ADDR(ext.bss);
+	__extbss_size = SIZEOF(ext.bss);
+
+	/* finally, we have "raw RAM": like BSS, but we don't zero it out */
+	int.ram (NOLOAD) : {
+		*(int.ram*)
+		*(system_stack)
+		*(irq_stack)
+		*(fiq_stack)
+		*(timer_hisr_stack)
+		. = ALIGN(4);
+		_iram_end = .;
+	} > IRAM
+
+	ext.ram (NOLOAD) : {
+		*(ext.ram*)
+		. = ALIGN(4);
+		_xram_end = .;
+	} > XRAM
+}