URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [ld/] [scripttempl/] [elf32crx.sc] - Rev 818
Compare with Previous | Blame | View Log
# Linker Script for National Semiconductor's CRX-ELF32.# The next line should be uncommented if it is desired to link# without libstart.o and directly enter main.# ENTRY=_maintest -z "$ENTRY" && ENTRY=_startcat <<EOF/* Example Linker Script for linking NS CRX elf32 files. */OUTPUT_FORMAT("${OUTPUT_FORMAT}")OUTPUT_ARCH(${ARCH})${RELOCATING+ENTRY(${ENTRY})}/* Define memory regions. */MEMORY{rom : ORIGIN = 0x2, LENGTH = 3Mram : ORIGIN = 4M, LENGTH = 10M}/* Many sections come in three flavours. There is the 'real' section,like ".data". Then there are the per-procedure or per-variablesections, generated by -ffunction-sections and -fdata-sections in GCC,and useful for --gc-sections, which for a variable "foo" might be".data.foo". Then there are the linkonce sections, for which the linkereliminates duplicates, which are named like ".gnu.linkonce.d.foo".The exact correspondences are:Section Linkonce section.text .gnu.linkonce.t.foo.rdata .gnu.linkonce.r.foo.data .gnu.linkonce.d.foo.bss .gnu.linkonce.b.foo.debug_info .gnu.linkonce.wi.foo */SECTIONS{.init :{__INIT_START = .;KEEP (*(.init))__INIT_END = .;} > rom.fini :{__FINI_START = .;KEEP (*(.fini))__FINI_END = .;} > rom.jcr :{KEEP (*(.jcr))} > rom.text :{__TEXT_START = .;*(.text) *(.text.*) *(.gnu.linkonce.t.*)__TEXT_END = .;} > rom.rdata :{__RDATA_START = .;*(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata.*)__RDATA_END = .;} > rom.ctor ALIGN(4) :{__CTOR_START = .;/* The compiler uses crtbegin.o to find the startof the constructors, so we make sure it isfirst. Because this is a wildcard, itdoesn't matter if the user does notactually link against crtbegin.o; thelinker won't look for a file to match awildcard. The wildcard also means that itdoesn't matter which directory crtbegin.ois in. */KEEP (*crtbegin.o(.ctors))KEEP (*crtbegin?.o(.ctors))/* We don't want to include the .ctor section fromthe crtend.o file until after the sorted ctors.The .ctor section from the crtend file contains theend of ctors marker and it must be last */KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))KEEP (*(SORT(.ctors.*)))KEEP (*(.ctors))__CTOR_END = .;} > rom.dtor ALIGN(4) :{__DTOR_START = .;KEEP (*crtbegin.o(.dtors))KEEP (*crtbegin?.o(.dtors))KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))KEEP (*(SORT(.dtors.*)))KEEP (*(.dtors))__DTOR_END = .;} > rom.data :{__DATA_START = .;*(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)__DATA_END = .;} > ram AT > rom.bss (NOLOAD) :{__BSS_START = .;*(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)__BSS_END = .;} > ram/* You may change the sizes of the following sections to fit the actualsize your program requires.The heap and stack are aligned to the bus width, as a speed optimizationfor accessing data located there. */.heap (NOLOAD) :{. = ALIGN(4);__HEAP_START = .;. += 0x2000; __HEAP_MAX = .;} > ram.stack (NOLOAD) :{. = ALIGN(4);. += 0x6000;__STACK_START = .;} > ram.istack (NOLOAD) :{. = ALIGN(4);. += 0x100;__ISTACK_START = .;} > ram.comment 0 : { *(.comment) }/* DWARF debug sections.Symbols in the DWARF debugging sections are relative to the beginningof the section so we begin them at 0. */.debug_aranges 0 : { *(.debug_aranges) }.debug_pubnames 0 : { *(.debug_pubnames) }.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) }}__DATA_IMAGE_START = LOADADDR(.data);EOF
