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 = . ;
*(.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);
*(.eh_fram) .data :
. = ALIGN (16); {
data_start = .;
*(.gcc_exc)
. = ALIGN (16); *(.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.
* C++ constructors Symbols in the DWARF debugging sections are relative to the beginning
*/ of the section so we begin them at 0. */
__CTOR_LIST__ = .; /* DWARF 1 */
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) .debug 0 : { *(.debug) }
*(.ctors) .line 0 : { *(.line) }
LONG(0)
__CTOR_END__ = .; /* GNU DWARF 1 extensions */
__DTOR_LIST__ = .; .debug_srcinfo 0 : { *(.debug_srcinfo) }
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) .debug_sfnames 0 : { *(.debug_sfnames) }
*(.dtors)
LONG(0) /* DWARF 1.1 and DWARF 2 */
__DTOR_END__ = .; .debug_aranges 0 : { *(.debug_aranges) }
etext = ALIGN( 0x10 ) ; .debug_pubnames 0 : { *(.debug_pubnames) }
} >ram
/* DWARF 2 */
.data ADDR( .text ) + SIZEOF( .text ): .debug_info 0 : { *(.debug_info) }
{ .debug_abbrev 0 : { *(.debug_abbrev) }
data_start = . ; .debug_line 0 : { *(.debug_line) }
*(.data) .debug_frame 0 : { *(.debug_frame) }
edata = ALIGN( 0x10 ) ; .debug_str 0 : { *(.debug_str) }
} >ram .debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
.bss ADDR( .data ) + SIZEOF( .data ):
{ /* SGI/MIPS DWARF 2 extensions */
bss_start = . ; .debug_weaknames 0 : { *(.debug_weaknames) }
*(.bss) .debug_funcnames 0 : { *(.debug_funcnames) }
*(COMMON) .debug_typenames 0 : { *(.debug_typenames) }
end = . ; .debug_varnames 0 : { *(.debug_varnames) }
_end = . ; /* These must appear regardless of . */
_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 = .;
} >ram
} }