333 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			333 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/******************************************************************************
 | 
						|
begin-header
 | 
						|
 | 
						|
  DO NOT EDIT. THIS FILE IS MACHINE-GENERATED 
 | 
						|
  FROM THE TEMPLATE FILE gmap_default.ld.
 | 
						|
  ALL EDITS WILL BE ERASED WITH NEXT MeP-Integrator RUN. 
 | 
						|
 | 
						|
  Custom linker script for the MeP Module default.
 | 
						|
end-header
 | 
						|
*******************************************************************************/
 | 
						|
 | 
						|
OUTPUT_FORMAT("elf32-mep-little", "elf32-mep",
 | 
						|
	      "elf32-mep-little")
 | 
						|
OUTPUT_ARCH(mep)
 | 
						|
ENTRY(_reset)
 | 
						|
 | 
						|
MEMORY
 | 
						|
{
 | 
						|
/* begin-memory */
 | 
						|
  VEC	(r) : ORIGIN = 0x00000000, LENGTH = 0x000000b8
 | 
						|
  VEC_WARM	(w) : ORIGIN = 0x00200000, LENGTH = 0x000000b8
 | 
						|
  HWINIT	(r) : ORIGIN = 0x000000b8, LENGTH = 0x00000148
 | 
						|
  RAM1	(r) : ORIGIN = 0x00000200, LENGTH = 0x001ffe00
 | 
						|
  RAM2	(w) : ORIGIN = 0x00800000, LENGTH = 0x00800000
 | 
						|
/*RAM3	(w) : ORIGIN = 0x80000000, LENGTH = 0x00800000 */
 | 
						|
  IMEM0	(w) : ORIGIN = 0x002000b8, LENGTH = 0x00003f48
 | 
						|
  IMEM1	(w) : ORIGIN = 0x00204000, LENGTH = 0x00004000
 | 
						|
  DMEM0	(w) : ORIGIN = 0x00220000, LENGTH = 0x00008000
 | 
						|
  DMEM1	(w) : ORIGIN = 0x00228000, LENGTH = 0x00008000
 | 
						|
  DMEM2	(w) : ORIGIN = 0x00230000, LENGTH = 0x00008000
 | 
						|
  DMEM3	(w) : ORIGIN = 0x00238000, LENGTH = 0x00008000
 | 
						|
/* end-memory */
 | 
						|
}
 | 
						|
 | 
						|
SECTIONS
 | 
						|
{
 | 
						|
  /* Sections to be placed in the vec area.  */
 | 
						|
  .vec : { *(.vec) } >VEC /* VEC-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the HWINIT area.  */
 | 
						|
  .hwinit : { *(.hwinit) } >HWINIT /* HWINIT-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the ROM area.  */
 | 
						|
  .gnu.version   : { *(.gnu.version)	} >RAM1 /* ROM-section */
 | 
						|
  .gnu.version_d : { *(.gnu.version_d)	} >RAM1 /* ROM-section */
 | 
						|
  .gnu.version_r : { *(.gnu.version_r)	} >RAM1 /* ROM-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the romdata.s area.  */
 | 
						|
  .srodata :
 | 
						|
  {
 | 
						|
    __sdabase = . + 0x8000;
 | 
						|
    *(.srodata) *(.srodata.*) *(.gnu.linkonce.srd.*)
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the data.s area.  */
 | 
						|
  .sdata     : 
 | 
						|
  {
 | 
						|
    *(.sdata) 
 | 
						|
    *(.sdata.*)
 | 
						|
    *(.gnu.linkonce.s.*)
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .sbss      :
 | 
						|
  {
 | 
						|
    PROVIDE (__sbss_start = .);
 | 
						|
    PROVIDE (___sbss_start = .);
 | 
						|
    *(.dynsbss)
 | 
						|
    *(.sbss)
 | 
						|
    *(.sbss.*)
 | 
						|
    *(.gnu.linkonce.sb.*)
 | 
						|
    *(.scommon)
 | 
						|
    PROVIDE (__sbss_end = .);
 | 
						|
    PROVIDE (___sbss_end = .);
 | 
						|
    /* Assert maximum size */
 | 
						|
    __assert_tiny_size = ASSERT ((. < __sdabase) || ((. - __sdabase) <= 0x8000),
 | 
						|
	 		         "tiny section overflow");
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the data.m area.  */
 | 
						|
  .data    :
 | 
						|
  {
 | 
						|
    __data_start = . ;
 | 
						|
    *(.data)
 | 
						|
    *(.data.*)
 | 
						|
    *(.gnu.linkonce.d.*)
 | 
						|
    SORT(CONSTRUCTORS)
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .data1   : { *(.data1) } >RAM2 /* DATA-section */
 | 
						|
  .eh_frame : { KEEP (*(.eh_frame))} >RAM2 /* DATA-section */
 | 
						|
  .gcc_except_table : { *(.gcc_except_table) *(.gcc_except_table.*) } >RAM2 /* DATA-section */
 | 
						|
  .dynamic       : { *(.dynamic) } >RAM2 /* DATA-section */
 | 
						|
  .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))
 | 
						|
    /* We don't want to include the .ctor section from
 | 
						|
       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 ) .ctors))
 | 
						|
    KEEP (*(SORT(.ctors.*)))
 | 
						|
    KEEP (*(.ctors))
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .dtors         :
 | 
						|
  {
 | 
						|
    KEEP (*crtbegin.o(.dtors))
 | 
						|
    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
 | 
						|
    KEEP (*(SORT(.dtors.*)))
 | 
						|
    KEEP (*(.dtors))
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .jcr :
 | 
						|
  {
 | 
						|
    . = ALIGN(4);
 | 
						|
    *(.jcr)
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .got :
 | 
						|
  {
 | 
						|
    *(.got.plt) *(.got)
 | 
						|
    _edata = .;
 | 
						|
    PROVIDE (edata = .);
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
  .based :
 | 
						|
  {
 | 
						|
    __tpbase = .;
 | 
						|
    *(.based) *(.based.*) *(.gnu.linkonce.based.*)
 | 
						|
    /* Assert maximum size */
 | 
						|
    __assert_based_size = ASSERT ((. - __tpbase) <= 0x80,
 | 
						|
	                          "based section overflow");
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  .bss       :
 | 
						|
  {
 | 
						|
    __bss_start = .;
 | 
						|
    *(.dynbss)
 | 
						|
    *(.bss)
 | 
						|
    *(.bss.*)
 | 
						|
    *(.gnu.linkonce.b.*)
 | 
						|
    *(COMMON)
 | 
						|
    /* Align here to ensure that the .bss section occupies space up to
 | 
						|
      _end.  Align after .bss to ensure correct alignment even if the
 | 
						|
      .bss section disappears because there are no input sections.  */
 | 
						|
    . = ALIGN(32 / 8);
 | 
						|
    _end = .;
 | 
						|
    PROVIDE (end = .);
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the code.m area.  */
 | 
						|
  .init          : 
 | 
						|
  { 
 | 
						|
    KEEP (*(.init))
 | 
						|
  } >RAM2 /* CODE-section */
 | 
						|
  .plt      : { *(.plt)	} >RAM2 /* DATA-section */
 | 
						|
  .text      :
 | 
						|
  {
 | 
						|
    *(.text)
 | 
						|
    *(.text.*)
 | 
						|
    *(.stub)
 | 
						|
    /* .gnu.warning sections are handled specially by elf32.em.  */
 | 
						|
    *(.gnu.warning)
 | 
						|
    *(.gnu.linkonce.t.*)
 | 
						|
  } >RAM2 /* CODE-section */ =0
 | 
						|
  .vtext ALIGN(8)    :
 | 
						|
  {
 | 
						|
    *(.vtext) *(.vtext.*) *(.gnu.linkonce.v.*)
 | 
						|
  } >RAM2 /* CODE-section */
 | 
						|
  .fini      :
 | 
						|
  {
 | 
						|
    KEEP (*(.fini))
 | 
						|
    PROVIDE (__etext = .);
 | 
						|
    PROVIDE (_etext = .);
 | 
						|
    PROVIDE (etext = .);
 | 
						|
  } >RAM2 /* CODE-section */ =0
 | 
						|
 | 
						|
  /* Sections to be placed in the romdata.m area.  */
 | 
						|
  .rodata   : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } >RAM2 /* DATA-section */
 | 
						|
  .rodata1   : { *(.rodata1) } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the code.l area.  */
 | 
						|
  .ftext : {  *(.ftext) *(.ftext.*) *(.gnu.linkonce.ft.*) } >RAM2 /* CODE-section */
 | 
						|
  .vftext ALIGN(8)    :
 | 
						|
  { 
 | 
						|
    *(.vftext) *(.vftext.*) *(.gnu.linkonce.vf.*)
 | 
						|
  } >RAM2 /* CODE-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the romdata.l area.  */
 | 
						|
  .frodata :
 | 
						|
  {
 | 
						|
    *(.frodata) *(.frodata.*) *(.gnu.linkonce.frd.*)
 | 
						|
    __assert_near_size = ASSERT (. <= 0x1000000, "near section overflow");
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* Sections to be placed in the data.l area.  */
 | 
						|
  .far : { *(.far) *(.far.*) *(.gnu.linkonce.far.*) } >RAM2 /* DATA-section */
 | 
						|
  .farbss :
 | 
						|
  { PROVIDE (__farbss_start = .);
 | 
						|
    *(.farbss) *(.farbss.*)
 | 
						|
    PROVIDE (__farbss_end = .);
 | 
						|
  } >RAM2 /* DATA-section */
 | 
						|
 | 
						|
  /* END-mep-sections */
 | 
						|
 | 
						|
  .vec_warm :
 | 
						|
  {
 | 
						|
    /* vec_warm is a place for the startup code to write the interrupt
 | 
						|
       vectors.  Allow 0xb8 bytes of space aligned on a 4 byte boundary.  */
 | 
						|
    . = ALIGN(4);
 | 
						|
    vec_warm = .;
 | 
						|
    . += 0xb8;
 | 
						|
  } >VEC_WARM
 | 
						|
 | 
						|
  /* begin-stack-table */
 | 
						|
  __stack50 = (__stack - (0 *  (__stack_size / 1)) + 15) / 16 * 16;
 | 
						|
 | 
						|
  .rostacktab :
 | 
						|
  {
 | 
						|
    /* Emit a table describing the location of the different stacks.  */
 | 
						|
    . = ALIGN(4);
 | 
						|
    __stack_table = .;
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    LONG (__stack50);
 | 
						|
    __stack_end = .;
 | 
						|
  } >RAM2
 | 
						|
  /* end-stack-table */
 | 
						|
 | 
						|
  /* begin-heap */
 | 
						|
  /* End of DATA is 0x00800000 + 0x00800000. That's where the heap will end.  */
 | 
						|
  __heap_end = 0x00800000 + 0x00800000 - 1;
 | 
						|
  /* end-heap */
 | 
						|
 | 
						|
  /* Default stack size is 1M.  That's where the heap will start if there's
 | 
						|
     room.  If there's not enough room, allocate half of the remaining space
 | 
						|
     for stack and half for heap.  Align the heap on a 16 byte boundary.  */
 | 
						|
  __stack_size = (__stack_end + 0x100000 <= __heap_end + 1 
 | 
						|
	          ? 0x100000
 | 
						|
 		  : ((__heap_end + 1 - __stack_end) / 2));
 | 
						|
  __heap = (__stack_end + __stack_size + 15) / 16 * 16;
 | 
						|
 | 
						|
  /* Leave 16 bytes between the stack and the heap.  */
 | 
						|
  __stack = __heap - 0x10;
 | 
						|
 | 
						|
  /* Stabs debugging sections.  */
 | 
						|
  .stab 0 : { *(.stab) }
 | 
						|
  .stabstr 0 : { *(.stabstr) }
 | 
						|
  .stab.excl 0 : { *(.stab.excl) }
 | 
						|
  .stab.exclstr 0 : { *(.stab.exclstr) }
 | 
						|
  .stab.index 0 : { *(.stab.index) }
 | 
						|
  .stab.indexstr 0 : { *(.stab.indexstr) }
 | 
						|
  .comment 0 : { *(.comment) }
 | 
						|
  /* DWARF debug sections.
 | 
						|
     Symbols in the DWARF debugging sections are relative to the beginning
 | 
						|
     of the section so we begin them at 0.  */
 | 
						|
  /* DWARF 1 */
 | 
						|
  .debug          0 : { *(.debug) }
 | 
						|
  .line           0 : { *(.line) }
 | 
						|
  /* GNU DWARF 1 extensions */
 | 
						|
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
 | 
						|
  .debug_sfnames  0 : { *(.debug_sfnames) }
 | 
						|
  /* DWARF 1.1 and DWARF 2 */
 | 
						|
  .debug_aranges  0 : { *(.debug_aranges) }
 | 
						|
  .debug_pubnames 0 : { *(.debug_pubnames) }
 | 
						|
  /* DWARF 2 */
 | 
						|
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
 | 
						|
  .debug_abbrev   0 : { *(.debug_abbrev) }
 | 
						|
  .debug_line     0 : { *(.debug_line) }
 | 
						|
  .debug_frame    0 : { *(.debug_frame) }
 | 
						|
  .debug_str      0 : { *(.debug_str) }
 | 
						|
  .debug_loc      0 : { *(.debug_loc) }
 | 
						|
  .debug_macinfo  0 : { *(.debug_macinfo) }
 | 
						|
  .debug_ranges   0 : { *(.debug_ranges) }
 | 
						|
  /* SGI/MIPS DWARF 2 extensions */
 | 
						|
  .debug_weaknames 0 : { *(.debug_weaknames) }
 | 
						|
  .debug_funcnames 0 : { *(.debug_funcnames) }
 | 
						|
  .debug_typenames 0 : { *(.debug_typenames) }
 | 
						|
  .debug_varnames  0 : { *(.debug_varnames) }
 | 
						|
  /* These must appear regardless of  .  */
 | 
						|
}
 |