diff options
Diffstat (limited to 'c/src/lib/libbsp/m68k/mvme167')
-rw-r--r-- | c/src/lib/libbsp/m68k/mvme167/bsp_specs | 6 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mvme167/startup/linkcmds | 278 |
2 files changed, 109 insertions, 175 deletions
diff --git a/c/src/lib/libbsp/m68k/mvme167/bsp_specs b/c/src/lib/libbsp/m68k/mvme167/bsp_specs index d59875e3e6..615f7c8b44 100644 --- a/c/src/lib/libbsp/m68k/mvme167/bsp_specs +++ b/c/src/lib/libbsp/m68k/mvme167/bsp_specs @@ -20,8 +20,12 @@ elflinkcmds%s}}} *startfile: %{!qrtems: %(old_startfile)} %{qrtems: \ %{!qrtems_debug: start.o%s} \ -%{qrtems_debug: start_g.o%s} %{qelf crti.o%s crtbegin.o%s}} +%{qrtems_debug: start_g.o%s} \ +crti.o%s crtbegin.o%s} *link: %{!qrtems: %(old_link)} %{qrtems: -dc -dp -N -e start} +*endfile: +%{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s crtn.o%s} + diff --git a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds index 739552c670..8ddee103c5 100644 --- a/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds +++ b/c/src/lib/libbsp/m68k/mvme167/startup/linkcmds @@ -29,9 +29,6 @@ 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; @@ -49,175 +46,108 @@ MEMORY 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 . */ -} + ram : { + . = .; + } >ram + + /* + * Text, data and bss segments + */ + .text : { + *(.text) + + /* + * 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(.fini) + + /* + * C++ constructors/destructors + * + * 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. + */ + . = ALIGN (16); + *crtbegin.o(.ctors) + *(.ctors) + *crtend.o(.ctors) + *crtbegin.o(.dtors) + *(.dtors) + *crtend.o(.dtors) + + /* + * Exception frame info + */ + . = ALIGN (16); + *(.eh_frame) + /* + * Read-only data + */ + . = ALIGN (16); + _rodata_start = . ; + *(.rodata) + *(.gnu.linkonce.r*) + + . = ALIGN (16); + PROVIDE (_etext = .); + } >ram + .data : { + PROVIDE (_copy_start = .); + *(.data) + *(.gnu.linkonce.d*) + *(.gcc_except_table) + . = ALIGN (16); + PROVIDE (_edata = .); + PROVIDE (_copy_end = .); + } >ram + .bss : { + PROVIDE (_bss_start = .); + PROVIDE (_clear_start = .); + *(.bss) + *(COMMON) + . = ALIGN (16); + PROVIDE (end = .); + + . += StackSize; + PROVIDE (_stack_init = .); + + . = ALIGN (16); + PROVIDE (_HeapStart = .); + . += HeapSize; + PROVIDE (_HeapEnd = .); + PROVIDE (_clear_end = .); + + PROVIDE (_WorkspaceBase = .); + } >ram +} |