summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds223
1 files changed, 223 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds b/c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds
new file mode 100644
index 0000000000..927d5b932a
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/elflinkcmds
@@ -0,0 +1,223 @@
+/*
+ * This file contains directives for the GNU linker which are specific
+ * to the Motorola MVME167 board. This linker script produces ELF
+ * executables.
+ *
+ * Copyright (c) 1999, National Research Council of Canada.
+ * Some of this material was copied from binutils-2.9.4 linker scripts,
+ * and is therefore likely to be copyrighted by the Free Software
+ * Foundation, even though explicit copyright notices did not appear in
+ * those files.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+/* These are not really needed here */
+OUTPUT_FORMAT("elf32-m68k")
+OUTPUT_ARCH(m68k)
+ENTRY(_start)
+
+/* Base address and size of RAM on the MVME167 */
+
+RAM_SIZE = 4M;
+RAM_START = 0x00800000;
+RAM_END = RAM_START + RAM_SIZE;
+
+/*
+ * Declare some sizes.
+ * XXX: The assignment of ". += XyzSize;" fails in older gld's if the
+ * number used there is not constant. If this happens to you, edit
+ * the lines marked XXX below to use a constant value.
+ */
+HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
+StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
+
+MEMORY
+{
+ /* The location of RAM is the address space is configurable.
+ This is where we put one board. The base address should be
+ passed as a parameter when building multiprocessor images
+ where each board resides at a different address. */
+ ram : org = 0x00800000, l = 4M
+ rom : org = 0xFF800000, l = 4M
+ sram : org = 0xFFE00000, l = 128K
+}
+
+SECTIONS
+{
+ /*
+ * We want the entry point to be the first thing in memory.
+ * Merge all read-only data into the .text section.
+ */
+ .text 0x00800000 :
+ {
+ text_start = . ;
+
+ *(.text)
+ *(.text.*)
+ *(.stub)
+
+ /* C++ constructors/destructors */
+ *(.gnu.linkonce.t*)
+
+ /* Initialization and finalization code.
+ *
+ * Various files can provide initialization and finalization functions.
+ * crtbegin.o and crtend.o are two instances. The body of these functions
+ * are in .init and .fini sections. We accumulate the bodies here, and
+ * prepend function prologues from crti.o and function epilogues from
+ * crtn.o. crti.o must be linked first; crtn.o must be linked last.
+ * Because these are wildcards, it doesn't matter if the user does not
+ * actually link against crti.o and crtn.o; the linker won't look for a
+ * file to match a wildcard. The wildcard also means that it doesn't
+ * matter which directory crti.o and crtn.o are in.
+ */
+ PROVIDE (_init = .);
+ *crti.o(.init)
+ *(.init)
+ *crtn.o(.init)
+
+ PROVIDE (_fini = .);
+ *crti.o(.fini)
+ *(.fini)
+ *crtn.o(.init)
+
+ . = ALIGN (16);
+
+ /* C++ constructors and destructors for static objects.
+ *
+ * gcc uses crtbegin.o to find the start of the constructors and
+ * destructors 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. The constructor and destructor list are terminated in crtend.o.
+ * The same comments apply to it.
+ */
+ PROVIDE (__CTOR_LIST__ = .);
+ *crtbegin.o(.ctors)
+ *(.ctors)
+ *crtend.o(.ctors)
+ PROVIDE (__CTOR_END__ = .);
+
+ PROVIDE (__DTOR_LIST__ = .);
+ *crtbegin.o(.dtors)
+ *(.dtors)
+ *crtend.o(.dtors)
+ PROVIDE (__DTOR_END__ = .);
+
+ . = ALIGN (16);
+
+ /* Exception frame info */
+ *(.eh_frame)
+
+ . = ALIGN (16);
+
+ /* Do we have any of these with egcs-1.x and higher? */
+ *(.gcc_exc)
+
+ . = ALIGN (16);
+
+ _rodata_start = . ;
+ *(.rodata)
+ *(.rodata.*)
+ *(.gnu.linkonce.r*)
+ *(.rodata1)
+ _erodata = .;
+
+ _etext = .;
+ PROVIDE (etext = .);
+
+ } >ram =0x4e75
+
+ . = ALIGN (16);
+
+ .data :
+ {
+ data_start = .;
+
+ *(.data)
+ *(.data.*)
+ *(.data1)
+ *(.sdata)
+ *(.gnu.linkonce.d*)
+ *(.gcc_except_table)
+
+ . = ALIGN (16);
+ _edata = .;
+ PROVIDE (edata = .);
+ } >ram
+
+ .bss :
+ {
+ bss_start = .;
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ *(.sbss)
+ *(.scommon)
+
+ . = ALIGN (16);
+ _end = .;
+ PROVIDE (end = .);
+ } >ram
+
+ _HeapStart = .;
+ . += HeapSize; /* XXX -- Old gld can't handle this */
+ _HeapEnd = .;
+ _StackStart = .;
+ . += StackSize; /* XXX -- Old gld can't handle this */
+ /* . += 0x10000; */ /* HeapSize for old gld */
+ /* . += 0x1000; */ /* StackSize for old gld */
+ . = ALIGN (16);
+ _StackEnd = .;
+ stack_init = .;
+ clear_end = .;
+
+ _WorkspaceBase = .;
+
+ /* 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) }
+ .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) }
+ /* These must appear regardless of . */
+}
+