Mercurial > flash_v2
diff packages/hal/powerpc/sim/current/src/sim.ld @ 0:3111d98ba7b3 ecos-v1_1-release
Initial commit of eCos version 1.1
| author | jlarmour |
|---|---|
| date | Tue, 11 May 1999 11:16:07 +0000 |
| parents | |
| children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/sim/current/src/sim.ld @@ -0,0 +1,237 @@ +//========================================================================== +// +// sim.ld +// +// Linker script for PowerPC simulator +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Cygnus Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.cygnus.com. +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos code, released September 30, 1998. +// +// The Initial Developer of the Original Code is Cygnus. Portions created +// by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg +// Date: 1998-02-17 +// Purpose: PowerPC simulator Linker script +// Description: This script is passed to the linker to define the memory +// of the PowerPC simulator. +// +//####DESCRIPTIONEND#### +// +//========================================================================== +STARTUP(vectors.o) +OUTPUT_FORMAT("elf32-powerpc") +OUTPUT_ARCH(powerpc) +ENTRY(reset_vector) +// Do we need any of these for elf? +// __DYNAMIC = 0; + +GROUP(libtarget.a libgcc.a) + +#include <pkgconf/hal.h> + +MEMORY +{ + + // In a RAM system, fake the division between ROM and + // RAM for testing. + ram_vectors : ORIGIN = 0x00000000, LENGTH = 0x2000 + rom_vectors : ORIGIN = 0x00002000, LENGTH = 0x2000 + ram : ORIGIN = 0x00004000, LENGTH = 496k + rom : ORIGIN = 0x00080000, LENGTH = 512k +} + +// Allocate the stack to be at the top of memory, since the stack +// grows down + +PROVIDE (__interrupt_stack = 0x00100000); + +// Initalize some symbols to be zero so we can reference them in the +// crt0 without core dumping. These functions are all optional, but +// we do this so we can have our crt0 always use them if they exist. +// This is so BSPs work better when using the crt0 installed gcc. +// We have to initalize them twice, so we cover a.out (which prepends +// an underscore) and coff object file formats. + +//PROVIDE (hardware_init_hook = 0); +//PROVIDE (software_init_hook = 0); + +SECTIONS +{ + // Read-only sections, merged into text segment: + .interp : { *(.interp) } >rom + .hash : { *(.hash) } >rom + .dynsym : { *(.dynsym) } >rom + .dynstr : { *(.dynstr) } >rom + .rel.text : { *(.rel.text) } >rom + .rela.text : { *(.rela.text) } >rom + .rel.data : { *(.rel.data) } >rom + .rela.data : { *(.rela.data) } >rom + .rel.rodata : { *(.rel.rodata) } >rom + .rela.rodata : { *(.rela.rodata) } >rom + .rel.got : { *(.rel.got) } >rom + .rela.got : { *(.rela.got) } >rom + .rel.got1 : { *(.rel.got1) } >rom + .rela.got1 : { *(.rela.got1) } >rom + .rel.got2 : { *(.rel.got2) } >rom + .rela.got2 : { *(.rela.got2) } >rom + .rel.ctors : { *(.rel.ctors) } >rom + .rela.ctors : { *(.rela.ctors) } >rom + .rel.dtors : { *(.rel.dtors) } >rom + .rela.dtors : { *(.rela.dtors) } >rom + .rel.init : { *(.rel.init) } >rom + .rela.init : { *(.rela.init) } >rom + .rel.fini : { *(.rel.fini) } >rom + .rela.fini : { *(.rela.fini) } >rom + .rel.bss : { *(.rel.bss) } >rom + .rela.bss : { *(.rela.bss) } >rom + .rel.plt : { *(.rel.plt) } >rom + .rela.plt : { *(.rela.plt) } >rom + .init : { + *(.init.head) + *(.init) + *(.init.tail) + } >rom =0 + .plt : { *(.plt) } >rom + .text : + { + _stext = .; + *(.text*) + *(.gnu.warning) + *(.gnu.linkonce*) + } >rom =0 + _etext = .; + PROVIDE (etext = .); + .fini : { + *(.fini.head) + *(.fini) + *(.fini.tail) + } >rom =0 + + .rodata1 : { *(.rodata1) } >rom + .rodata : { *(.rodata*) } >rom + __FIXUP_START__ = .; + .fixup : { *(.fixup) } >rom + __FIXUP_END__ = .; + __EXCEPT_START__ =.; + .gcc_except_table : { *(.gcc_except_table) } >rom + __EXCEPT_END__ =.; + // Read-write section, merged into data segment: + __rom_data_start = ALIGN(4); + .data : + AT( __rom_data_start ) + { + __ram_data_start = .; + PROVIDE( __ram_data_start = .); + + *(.data*) + __GOT1_START__ = .; + *(.got1) + __GOT1_END__ = .; + // Put .ctors and .dtors next to the .got2 section, so that the pointers + // get relocated with -mrelocatable. +#ifdef CYG_KERNEL_USE_INIT_PRIORITY + . = ALIGN(8); + __CTOR_LIST__ = .; + KEEP(*(SORT(.ctors*))) + __CTOR_END__ = .; + __DTOR_LIST__ = .; + KEEP(*(SORT(.dtors*))) + __DTOR_END__ = .; +#else + __CTOR_LIST__ = .; + *sched.o(.ctors*) + *clock.o(.ctors*) + *thread.o(.ctors*) + *(.ctors*) + __CTOR_END__ = .; + __DTOR_LIST__ = .; + *(.dtors*) + __DTOR_END__ = .; +#endif + __GOT2_START__ = .; + *(.got2) + __GOT2_END__ = .; + __GOT_START__ = .; + _GLOBAL_OFFSET_TABLE_ = . + 32768; + _SDA_BASE_ = .; + *(.got.plt) + *(.got) + __GOT_END__ = .; + *(.dynamic) + // We want the small data sections together, so single-instruction offsets + // can access them all, and initialized data all before uninitialized, so + // we can shorten the on-disk segment size. + __SDATA_START__ = .; + *(.sdata) + __SDATA2_START__ = .; + *(.sdata2) + } >ram + __ram_data_end = .; + PROVIDE( __ram_data_end = .); + _edata = .; + PROVIDE (edata = .); + __bss_start = .; + .sbss : + { + __SBSS_START__ = .; + *(.sbss*) + __SBSS_END__ = .; + __SBSS2_START__ = .; + *(.sbss2) + __SBSS2_END__ = .; + *(.scommon) + } >ram + + .bss : + { + *(.dynbss) + *(.bss) + *(COMMON) + } >ram + _end = . ; + PROVIDE (end = .); + + + __rom_ram_vectors_start = ALIGN(4); +#if 1 + .vectors : + { + *(.vectors) + } > ram_vectors +#else + .ram_vectors : + AT ( __rom_ram_vectors_start ) + { + __ram_vectors_start = .; + *(.ram_vectors) + __ram_vectors_end = .; + } >ram_vectors + + .rom_vectors : + { + *(.rom_vectors) + } >rom_vectors +#endif + +} +
