Now compiles for coff and elf.

This commit is contained in:
Joel Sherrill
1999-10-11 15:28:04 +00:00
parent 3fd73d16ee
commit f58f0b45fc

View File

@@ -1,21 +1,26 @@
/* /*
* This file contains directives for the GNU linker which are specific * 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. * Copyright (c) 1999, National Research Council of Canada.
* On-Line Applications Research Corporation (OAR). * Some of this material was copied from binutils-2.9.4 linker scripts,
* Copyright assigned to U.S. Government, 1994. * 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 * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at * found in the file LICENSE in this distribution or at
* http://www.OARcorp.com/rtems/license.html. * http://www.OARcorp.com/rtems/license.html.
* *
* Modifications of respective RTEMS file:
* Copyright (c) 1998, National Research Council of Canada
*
* $Id$ * $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 */ /* Base address and size of RAM on the MVME167 */
RAM_SIZE = 4M; RAM_SIZE = 4M;
@@ -33,71 +38,186 @@ StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
MEMORY 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 SECTIONS
{ {
.text 0x00800000 : /*
{ * We want the entry point to be the first thing in memory.
text_start = . ; * Merge all read-only data into the .text section.
*(.text) */
. = ALIGN (16); .text 0x00800000 :
{
text_start = . ;
*(.eh_fram) *(.text)
. = ALIGN (16); *(.text.*)
*(.stub)
*(.gcc_exc) /* C++ constructors/destructors */
. = ALIGN (16); *(.gnu.linkonce.t*)
/* /* Initialization and finalization code.
* C++ constructors *
*/ * Various files can provide initialization and finalization functions.
__CTOR_LIST__ = .; * crtbegin.o and crtend.o are two instances. The body of these functions
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) * are in .init and .fini sections. We accumulate the bodies here, and
*(.ctors) * prepend function prologues from crti.o and function epilogues from
LONG(0) * crtn.o. crti.o must be linked first; crtn.o must be linked last.
__CTOR_END__ = .; * Because these are wildcards, it doesn't matter if the user does not
__DTOR_LIST__ = .; * actually link against crti.o and crtn.o; the linker won't look for a
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) * file to match a wildcard. The wildcard also means that it doesn't
*(.dtors) * matter which directory crti.o and crtn.o are in.
LONG(0) */
__DTOR_END__ = .; PROVIDE (_init = .);
etext = ALIGN( 0x10 ) ; *crti.o(.init)
} >ram *(.init)
*crtn.o(.init)
.data ADDR( .text ) + SIZEOF( .text ): PROVIDE (_fini = .);
{ *crti.o(.fini)
data_start = . ; *(.fini)
*(.data) *crtn.o(.init)
edata = ALIGN( 0x10 ) ;
} >ram
.bss ADDR( .data ) + SIZEOF( .data ): . = ALIGN (16);
{
bss_start = . ;
*(.bss)
*(COMMON)
end = . ;
_end = . ;
_HeapStart = .; /* C++ constructors and destructors for static objects.
__HeapStart = .; *
. += HeapSize; /* XXX -- Old gld can't handle this */ * gcc uses crtbegin.o to find the start of the constructors and
_HeapEnd = .; * destructors so we make sure it is first. Because this is a wildcard,
__HeapEnd = .; * it doesn't matter if the user does not actually link against
_StackStart = .; * crtbegin.o; the linker won't look for a file to match a wildcard. The
__StackStart = .; * wildcard also means that it doesn't matter which directory crtbegin.o
. += StackSize; /* XXX -- Old gld can't handle this */ * is in. The constructor and destructor list are terminated in crtend.o.
/* . += 0x10000; */ /* HeapSize for old gld */ * The same comments apply to it.
/* . += 0x1000; */ /* StackSize for old gld */ */
. = ALIGN (16); PROVIDE (__CTOR_LIST__ = .);
_StackEnd = .; *crtbegin.o(.ctors)
__StackEnd = .; *(.ctors)
stack_init = .; *crtend.o(.ctors)
clear_end = .; PROVIDE (__CTOR_END__ = .);
_WorkspaceBase = .; PROVIDE (__DTOR_LIST__ = .);
__WorkspaceBase = .; *crtbegin.o(.dtors)
} >ram *(.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 . */
} }