/****************************************************************** ******************************************************************* *** *** *** Linker script for xstormy16-elf-gcc *** *** For SID RAM=0x7E00 *** *** ROM=0x78000 *** *** *** ******************************************************************* ******************************************************************/ OUTPUT_FORMAT("elf32-xstormy16", "elf32-xstormy16", "elf32-xstormy16") OUTPUT_ARCH(xstormy16) ENTRY(_start) SEARCH_DIR( . ) GROUP(-lc -lsim -lgcc) PROVIDE( __target_package = 0xff); __malloc_start = 0x7E00; MEMORY { RAM (w) : ORIGIN = 0x00000, LENGTH = 0x07E00 CHIP (r) : ORIGIN = 0x07f00, LENGTH = 0x00100 ROM (!w) : ORIGIN = 0x08000, LENGTH = 0x78000 } SECTIONS { /* Zero initialized data with the below100 attribute. */ .bss_below100 : { SHORT(0) __bss_start = .; *(.bss_below100) *(.bss_below100.*) . = ALIGN(2); } > RAM /* Non-zero initialized data with the below100 attribute. */ .data_below100 : AT ( __rdata ) { __data_start = . ; *(.data_0) *(.data_below100) *(.data_below100.*) . = ALIGN(2); } > RAM = 0 /* Normal non-zero initialized data. */ .data : AT ( __rdata + SIZEOF(.data_below100) ) { *(.data) *(.data.*) *(.gnu.linkonce.d.*) SORT(CONSTRUCTORS) . = ALIGN(2); __data_end = . ; } > RAM =0 /* Normal zero initialized data. */ .bss : AT (LOADADDR(.data) + SIZEOF(.data)) { *(.dynbss) *(.bss) *(.bss.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(2); __bss_end = .; } > RAM /* The top of stack. */ __stack = .; /* Target chip info. */ .chip_info : { KEEP(*(.chip_info)) } > CHIP =0 /* Reset and interrupt vectors at 8000. */ .int_vec : { KEEP(*(.int_vec)) } > ROM =0 /* Read only data. */ .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } > ROM =0 /* C++ Construcrtors and destructors. */ .ctors : { KEEP (*crtbegin.o(.ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } > ROM =0 .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } > ROM =0 /* Pointer lookup table.. */ .plt : { *(.plt) } > ROM =0 /* Other information. */ .jcr : { KEEP (*(.jcr)) } > ROM =0 .eh_frame : { KEEP (*(.eh_frame)) } > ROM =0 .gcc_except_table : { KEEP (*(.gcc_except_table)) } > ROM =0 /* Initialization values for data. */ .data_init (NOLOAD) : { __rdata = .; . += SIZEOF(.data_below100); . += SIZEOF(.data); . += SIZEOF(.bss); } > ROM /* Executable code. */ .text : { *(.text) *(.text.*) *(.stub) *(.gnu.warning) *(.gnu.linkonce.t.*) } > ROM =0 /* Startup/finish code. */ .init : { KEEP (*crti.o(.init)) KEEP (*(EXCLUDE_FILE (*crtn.o ) .init)) KEEP (*(SORT(.init.*))) KEEP (*(.init)) } > ROM =0 .fini : { KEEP (*crti.o(.fini)) KEEP (*(EXCLUDE_FILE (*crtn.o ) .fini)) KEEP (*(SORT(.fini.*))) KEEP (*(.fini)) } > ROM =0 /* Stab 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) } /* 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) } }