summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-11 15:28:04 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-11 15:28:04 +0000
commitf58f0b45fc029cc26e3aa0c601d411e68c0aee45 (patch)
tree9f454ba990cb878bd0cb94ab339442559ec6300a /c
parentAdded file system guide. (diff)
downloadrtems-f58f0b45fc029cc26e3aa0c601d411e68c0aee45.tar.bz2
Now compiles for coff and elf.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/m68k/mvme167/startup/linkcmds250
1 files changed, 185 insertions, 65 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
index a1f285a09d..739552c670 100644
--- a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds
@@ -1,21 +1,26 @@
/*
* This file contains directives for the GNU linker which are specific
- * to the Motorola MVME167 board.
+ * to the Motorola MVME167 board. This linker script produces ELF
+ * executables.
*
- * COPYRIGHT (c) 1989-1998.
- * On-Line Applications Research Corporation (OAR).
- * Copyright assigned to U.S. Government, 1994.
+ * 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.
*
- * Modifications of respective RTEMS file:
- * Copyright (c) 1998, National Research Council of Canada
- *
* $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;
@@ -33,71 +38,186 @@ StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
MEMORY
{
- ram : org = 0x00800000, l = 4M
+ /* 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
{
- .text 0x00800000 :
- {
- text_start = . ;
- *(.text)
- . = ALIGN (16);
-
- *(.eh_fram)
- . = ALIGN (16);
-
- *(.gcc_exc)
- . = ALIGN (16);
+ /*
+ * 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);
- /*
- * C++ constructors
- */
- __CTOR_LIST__ = .;
- LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
- *(.ctors)
- LONG(0)
- __CTOR_END__ = .;
- __DTOR_LIST__ = .;
- LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
- *(.dtors)
- LONG(0)
- __DTOR_END__ = .;
- etext = ALIGN( 0x10 ) ;
- } >ram
+ .data :
+ {
+ data_start = .;
+
+ *(.data)
+ *(.data.*)
+ *(.data1)
+ *(.sdata)
+ *(.gnu.linkonce.d*)
+ *(.gcc_except_table)
+
+ . = ALIGN (16);
+ _edata = .;
+ PROVIDE (edata = .);
+ } >ram
- .data ADDR( .text ) + SIZEOF( .text ):
- {
- data_start = . ;
- *(.data)
- edata = ALIGN( 0x10 ) ;
- } >ram
+ .bss :
+ {
+ bss_start = .;
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ *(.sbss)
+ *(.scommon)
+
+ . = ALIGN (16);
+ _end = .;
+ PROVIDE (end = .);
+ } >ram
- .bss ADDR( .data ) + SIZEOF( .data ):
- {
- bss_start = . ;
- *(.bss)
- *(COMMON)
- end = . ;
- _end = . ;
+ _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 = .;
- _HeapStart = .;
- __HeapStart = .;
- . += HeapSize; /* XXX -- Old gld can't handle this */
- _HeapEnd = .;
- __HeapEnd = .;
- _StackStart = .;
- __StackStart = .;
- . += StackSize; /* XXX -- Old gld can't handle this */
- /* . += 0x10000; */ /* HeapSize for old gld */
- /* . += 0x1000; */ /* StackSize for old gld */
- . = ALIGN (16);
- _StackEnd = .;
- __StackEnd = .;
- stack_init = .;
- clear_end = .;
+ _WorkspaceBase = .;
- _WorkspaceBase = .;
- __WorkspaceBase = .;
- } >ram
+ /* 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 . */
}
+