summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-12 12:56:07 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-12 12:56:07 +0000
commit50bb7627337aa780c4e8e6f3cbded85d2c80381b (patch)
tree0f6b313ab0e87a1471f42b4ee243130e5bf1b334 /c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM
parent2000-10-12 John S Gwynne <jgwynne@mrcday.com> (diff)
downloadrtems-50bb7627337aa780c4e8e6f3cbded85d2c80381b.tar.bz2
2000-10-12 John S Gwynne <jgwynne@mrcday.com>
* start/start.c: Modified to support generation of ram_init. * start/ram_init.ld, BSP/start/ram_init.sed: New files. These changes enable RTEMS to automatically generate the ram_init file used by gdb with the BDM patches. The 332 has on-board chip select lines (for RAM and FLASH) that must be configured before use of these peripherals. These patches parse data from start.c where the chip select lines are configured in the runtime executable and automatically generates the gdb initialization file using the same settings. A great time saver. A similar file, ram_init_FW (flash writable), is also generated that the flash programming tool uses. * start/Makefile.am: Modified to support above. * CPU/sim.h: Modified to support above. * startup/except_vect_332_ROM.S: Moved to start so it would not be included in libbsp.a. Moving it to start ensures it is available as a single object file. * start/except_vect_332_ROM.S: Moved from startup. * startup/linkcmds, startup/linkcmds_ROM: Fixes to the memory map shown in the comments.
Diffstat (limited to 'c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM')
-rw-r--r--c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM211
1 files changed, 148 insertions, 63 deletions
diff --git a/c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM b/c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM
index acfee4c07f..bdc7206975 100644
--- a/c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM
+++ b/c/src/lib/libbsp/m68k/efi332/startup/linkcmds_ROM
@@ -8,6 +8,7 @@ STARTUP(except_vect_332_ROM.o)
__DYNAMIC = 0;
/*
+ * The memory map looks like this:
* ROM:
* +--------------------+ <- low memory
* | .text |
@@ -22,30 +23,38 @@ __DYNAMIC = 0;
*
* RAM:
* +--------------------+ <- low memory
+ * | _RamBase |
* | .data | initialized data goes here
* | _sdata |
* | _edata |
* +--------------------+
* | .bss |
- * | __bss_start | start of bss, cleared by crt0
+ * | _clear_start| start of bss, cleared by crt0
* | _end | start of heap, used by sbrk()
* +--------------------+
+ * | _WorkspaceBase
+ * | work space |
+ * | heapStart |
* | heap space |
- * | _ENDHEAP |
- * | stack space |
- * | __stack | top of stack
+ * | _RamEnd | top of stack
* +--------------------+ <- high memory
*/
+/*
+ * Declare some sizes.
+ */
+_RamBase = DEFINED(_RamBase) ? _RamBase : 0x80000;
+_RamSize = DEFINED(_RamSize) ? _RamSize : 0x40000;
+_RamEnd = _RamBase + _RamSize;
+_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x10000;
+_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000;
+
MEMORY
{
rom : ORIGIN = 0x00000, LENGTH = 256K
- ram : ORIGIN = 0x80000, LENGTH = 512K
+ ram : ORIGIN = 0x80000, LENGTH = 256K
}
-_RamBase = DEFINED(_RamBase) ? _RamBase : 0x080000;
-
-__end_of_ram = 0x100000;
_copy_data_from_rom = 1;
/*
@@ -53,69 +62,145 @@ _copy_data_from_rom = 1;
*/
SECTIONS
{
- .text :
- {
- CREATE_OBJECT_SYMBOLS
- text_start = .;
- _text_start = .;
+ ram : {
+ . = .;
+ } >ram
+
+ /*
+ * Text, data and bss segments
+ */
+ .text : {
*(.text)
- . = ALIGN (16);
- *(.eh_fram)
- . = ALIGN (16);
+ /*
+ * 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)
- etext = ALIGN(0x10);
- _etext = .;
- __CTOR_LIST__ = .;
- LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ /*
+ * 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)
- LONG(0)
- __CTOR_END__ = .;
- __DTOR_LIST__ = .;
- LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *crtend.o(.ctors)
+ *crtbegin.o(.dtors)
*(.dtors)
- LONG(0)
- __DTOR_END__ = .;
- *(.lit)
- *(.shdata)
- _endtext = .;
- } > rom
- .gcc_exc :
- AT ( ADDR(.text) + SIZEOF( .text ) )
- {
- *(.gcc_exc)
- } > ram
+ *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 = .);
+ } >rom
.data :
+ AT ( ADDR(.text) + SIZEOF( .text ) )
{
- data_start = .;
- _data_start = .;
- _sdata = . ;
+ PROVIDE (_copy_start = .);
*(.data)
- CONSTRUCTORS
- edata = ALIGN(0x10);
- _edata = .;
- } > ram
- .shbss :
- {
- *(.shbss)
- } > ram
- .bss :
- {
- __bss_start = ALIGN(0x8);
- bss_start = .;
- _bss_start = .;
+ *(.gnu.linkonce.d*)
+ *(.gcc_except_table)
+ . = ALIGN (16);
+ PROVIDE (_edata = .);
+ PROVIDE (_copy_end = .);
+ } >ram
+ .bss : {
+ _clear_start = .;
*(.bss)
*(COMMON)
- end = .;
- _end = ALIGN(0x8);
- __end = ALIGN(0x8);
- } > ram
- .stab . (NOLOAD) :
- {
- [ .stab ]
- }
- .stabstr . (NOLOAD) :
- {
- [ .stabstr ]
- }
+ . = ALIGN (16);
+ PROVIDE (end = .);
+
+ . += _StackSize;
+ . = ALIGN (16);
+ _stack_init = .;
+ _clear_end = .;
+
+ _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 . */
}