231 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Scala
		
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Scala
		
	
	
	
SRAM_ORIGIN=0x03000000
 | 
						|
SRAM_LENGTH=0x00100000
 | 
						|
 | 
						|
# HEAPEND must be in the same memory region as DATA.  STACK should be
 | 
						|
# above HEAPEND, also in the same region, for configurations which
 | 
						|
# need __stack.
 | 
						|
 | 
						|
case $MODE in
 | 
						|
    rom)
 | 
						|
	CRT0=rom
 | 
						|
	TEXT=rom
 | 
						|
	DATA=sram
 | 
						|
	DATALOAD="rom"
 | 
						|
	STACK=0x030ffffc
 | 
						|
	HEAPEND=0x03080000
 | 
						|
	;;
 | 
						|
    sram)
 | 
						|
	CRT0=ram
 | 
						|
	TEXT=sram
 | 
						|
	DATA=sdram
 | 
						|
	STACK=0x021ffffc
 | 
						|
	HEAPEND=0x02180000
 | 
						|
	# Leave the rest of SDRAM for manual use.
 | 
						|
	;;
 | 
						|
    sdram)
 | 
						|
	CRT0=ram
 | 
						|
	TEXT=sdram
 | 
						|
	DATA=sdram
 | 
						|
	STACK=0x021ffffc
 | 
						|
	HEAPEND=0x02180000
 | 
						|
	# Leave the rest of SDRAM for manual use.
 | 
						|
	;;
 | 
						|
    redboot)
 | 
						|
	CRT0=redboot
 | 
						|
	# We need to avoid the area used by RedBoot
 | 
						|
	SRAM_ORIGIN=0x3080000
 | 
						|
	SRAM_LENGTH=0x80000
 | 
						|
	# Put code for RedBoot apps in SRAM, since the fido1100 has
 | 
						|
	# trouble running code from SDRAM.
 | 
						|
	TEXT=sram
 | 
						|
	DATA=sdram
 | 
						|
	STACK=0
 | 
						|
	HEAPEND=0x027f0000
 | 
						|
	;;
 | 
						|
    *)
 | 
						|
	ERROR
 | 
						|
	;;
 | 
						|
esac
 | 
						|
 | 
						|
cat <<EOF
 | 
						|
/*
 | 
						|
 * Setup the memory map of the Innovasic SBC 
 | 
						|
 * stack grows down from high memory.
 | 
						|
 *
 | 
						|
 * The memory map for the ROM model looks like this:
 | 
						|
 *
 | 
						|
 * +--------------------+ <-address 0 in Flash
 | 
						|
 * | .vector_table      |
 | 
						|
 * +--------------------+ <- low memory
 | 
						|
 * | .text              |
 | 
						|
 * |        _etext      |
 | 
						|
 * |        ctor list   | the ctor and dtor lists are for
 | 
						|
 * |        dtor list   | C++ support
 | 
						|
 * +--------------------+
 | 
						|
 * | DCACHE_CODE        | code to be loaded into DCACHE
 | 
						|
 * |     _dcache_start  |
 | 
						|
 * |     _dcache_end    |
 | 
						|
 * +--------------------+
 | 
						|
 * | .data              | initialized data goes here
 | 
						|
 * +--------------------+
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * +--------------------+ <- The beginning of the SRAM area
 | 
						|
 * | .data              | a wriable copy of data goes here.
 | 
						|
 * |        _edata      |
 | 
						|
 * +--------------------+
 | 
						|
 * | .bss               |
 | 
						|
 * |        __bss_start | start of bss, cleared by crt0
 | 
						|
 * |        _end        | start of heap, used by sbrk()
 | 
						|
 * |        _heapend    |    End   of heap, used by sbrk()
 | 
						|
 * +--------------------+
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * |        __stack     | top of stack
 | 
						|
 * +--------------------+
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * The memory map for the RAM model looks like this:
 | 
						|
 *
 | 
						|
 * +--------------------+ <- The beginning of the SRAM or SDRAM area.
 | 
						|
 * | .vector_table      |
 | 
						|
 * +--------------------+ <- low memory
 | 
						|
 * | .text              |
 | 
						|
 * |        _etext      |
 | 
						|
 * |        ctor list   | the ctor and dtor lists are for
 | 
						|
 * |        dtor list   | C++ support
 | 
						|
 * +--------------------+
 | 
						|
 * | DCACHE_CODE        | code to be loaded into DCACHE
 | 
						|
 * |     _dcache_start  |
 | 
						|
 * |     _dcache_end    |
 | 
						|
 * +--------------------+
 | 
						|
 * | .data              | initialized data goes here
 | 
						|
 * |        _edata      |
 | 
						|
 * +--------------------+
 | 
						|
 * | .bss               |
 | 
						|
 * |        __bss_start | start of bss, cleared by crt0
 | 
						|
 * |        _end        | start of heap, used by sbrk()
 | 
						|
 * |        _heapend    |    End   of heap, used by sbrk()
 | 
						|
 * +--------------------+
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * .                    .
 | 
						|
 * |        __stack     | top of stack
 | 
						|
 * +--------------------+
 | 
						|
 */
 | 
						|
 | 
						|
STARTUP(fido-${CRT0}-crt0.o)
 | 
						|
OUTPUT_ARCH(m68k)
 | 
						|
ENTRY(_start);
 | 
						|
GROUP(-l${IO} -lfido -lc -lgcc)
 | 
						|
 | 
						|
MEMORY {
 | 
						|
  /* Flash ROM.  */
 | 
						|
  rom (rx)      : ORIGIN = 0x0000000, LENGTH = 0x800000
 | 
						|
  /* Internal SRAM.  */
 | 
						|
  int_ram (rwx) : ORIGIN = 0x1000000, LENGTH = 0x6000
 | 
						|
  /* External SDRAM.  */
 | 
						|
  sdram (rwx)   : ORIGIN = 0x2000000, LENGTH = 0x800000
 | 
						|
  /* External SRAM.  */
 | 
						|
  sram (rwx)     : ORIGIN = ${SRAM_ORIGIN}, LENGTH = ${SRAM_LENGTH}
 | 
						|
}
 | 
						|
 | 
						|
SECTIONS {
 | 
						|
  /* The interrupt vector is placed at the beginning of ${TEXT},
 | 
						|
     as required at reset.  */
 | 
						|
  .vector_table : {
 | 
						|
    *(.vector_table)
 | 
						|
  } > ${TEXT}
 | 
						|
 | 
						|
  /* Text section.  */
 | 
						|
  .text :
 | 
						|
  {
 | 
						|
    *(.text .text.*)
 | 
						|
    *(.gnu.linkonce.t.*)
 | 
						|
 | 
						|
    . = ALIGN(0x4);
 | 
						|
    /* These are for running static constructors and destructors under ELF.  */
 | 
						|
    KEEP (*crtbegin.o(.ctors))
 | 
						|
    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
 | 
						|
    KEEP (*(SORT(.ctors.*)))
 | 
						|
    KEEP (*crtend.o(.ctors))
 | 
						|
    KEEP (*crtbegin.o(.dtors))
 | 
						|
    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
 | 
						|
    KEEP (*(SORT(.dtors.*)))
 | 
						|
    KEEP (*crtend.o(.dtors))
 | 
						|
 | 
						|
    . = ALIGN(0x4);
 | 
						|
    KEEP (*crtbegin.o(.jcr))
 | 
						|
    KEEP (*(EXCLUDE_FILE (*crtend.o) .jcr))
 | 
						|
    KEEP (*crtend.o(.jcr))
 | 
						|
 | 
						|
    *(.rodata .rodata.*)
 | 
						|
    *(.gnu.linkonce.r.*)
 | 
						|
    *(.gcc_except_table) 
 | 
						|
    *(.eh_frame)
 | 
						|
 | 
						|
    . = ALIGN(0x2);
 | 
						|
    _init = . ;
 | 
						|
    LONG (0x4e560000)	/* linkw %fp,#0 */
 | 
						|
    *(.init)
 | 
						|
    SHORT (0x4e5e)	/* unlk %fp */
 | 
						|
    SHORT (0x4e75)	/* rts */
 | 
						|
 | 
						|
    _fini = . ;
 | 
						|
    LONG (0x4e560000)	/* linkw %fp,#0 */
 | 
						|
    *(.fini)
 | 
						|
    SHORT (0x4e5e)	/* unlk %fp */
 | 
						|
    SHORT (0x4e75)	/* rts */
 | 
						|
    . = ALIGN(0x800);   /* align to a 2K dcache boundary */
 | 
						|
    _dcache_start = .;
 | 
						|
    *(DCACHE_CODE)
 | 
						|
    _dcache_end = .;
 | 
						|
    _etext = .;
 | 
						|
    *(.lit)
 | 
						|
    . = ALIGN(0x4);
 | 
						|
    __start_romdata = .;
 | 
						|
  } > ${TEXT}
 | 
						|
 | 
						|
  /* Initialized data section.  */
 | 
						|
  .data :
 | 
						|
  {
 | 
						|
    _data = .;
 | 
						|
    *(.got.plt) *(.got)
 | 
						|
    *(.shdata);
 | 
						|
    *(.data .data.*)
 | 
						|
    *(.gnu.linkonce.d.*)
 | 
						|
    _edata_cksum = .;
 | 
						|
    *(checksum);
 | 
						|
    _edata = .;
 | 
						|
  } > ${DATA} ${DATALOAD:+AT>} ${DATALOAD}
 | 
						|
 | 
						|
  /* Zero-initialized data.  */ 
 | 
						|
  .bss :
 | 
						|
  {
 | 
						|
    . = ALIGN(0x4);
 | 
						|
    __bss_start = . ;
 | 
						|
    *(.shbss)
 | 
						|
    *(.bss .bss.*)
 | 
						|
    *(.gnu.linkonce.b.*)
 | 
						|
    *(COMMON)
 | 
						|
    _end =  ALIGN (0x8);
 | 
						|
    __end = _end;
 | 
						|
  } > ${DATA}
 | 
						|
 | 
						|
  /* Specially designated data is placed in the internal RAM.  */
 | 
						|
  fast_memory :
 | 
						|
  {
 | 
						|
    . = ALIGN(0x4);
 | 
						|
    __fast_start = .;
 | 
						|
    *(FAST_RAM)
 | 
						|
    __fast_stop = .;
 | 
						|
  } > int_ram
 | 
						|
}
 | 
						|
 | 
						|
PROVIDE (__stack = ${STACK});
 | 
						|
 | 
						|
PROVIDE (_heapend = ${HEAPEND});
 | 
						|
EOF
 |