diff options
Diffstat (limited to 'libgloss/m68k/idpgdb.ld')
-rw-r--r-- | libgloss/m68k/idpgdb.ld | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/libgloss/m68k/idpgdb.ld b/libgloss/m68k/idpgdb.ld new file mode 100644 index 0000000..9d24e28 --- /dev/null +++ b/libgloss/m68k/idpgdb.ld @@ -0,0 +1,146 @@ +STARTUP(crt0.o) +OUTPUT_ARCH(m68k) +/* Uncomment this if you want srecords. This is needed for a.out + * if you plan to use GDB. +OUTPUT_FORMAT(srec) + */ + +SEARCH_DIR(.) +GROUP(-lidpgdb -lc -lgcc) +__DYNAMIC = 0; + +/* + * Setup the memory map of the MC68ec0x0 Board (IDP) + * stack grows down from high memory. This works for + * both the rom68k and the mon68k monitors. + * + * The memory map look like this: + * +--------------------+ <- low memory + * | .text | + * | _etext | + * | ctor list | the ctor and dtor lists are for + * | dtor list | C++ support + * +--------------------+ + * | .data | initialized data goes here + * | _edata | + * +--------------------+ + * | .bss | + * | __bss_start | start of bss, cleared by crt0 + * | _end | start of heap, used by sbrk() + * +--------------------+ + * . . + * . . + * . . + * | __stack | top of stack + * +--------------------+ + */ + +/* + * When the IDP is not remapped (see rom68k's MP command in the + * "M68EC0x0IDP Users Manual", the first 64K bytes are reserved; + * Otherwise the first 256K bytes are reserved. + * + * The following memory map describes a unmapped IDP w/2MB RAM. + */ + +MEMORY +{ + ram (rwx) : ORIGIN = 0x00010000, LENGTH = 2M-64K + rom0 : ORIGIN = 0x00800000, LENGTH = 1M + rom1 : ORIGIN = 0x00900000, LENGTH = 1M +} + +/* + * allocate the stack to be at the top of memory, since the stack + * grows down + */ + +PROVIDE (__stack = 2M - 8); + +/* + * Initalize some symbols to be zero so we can reference them in the + * crt0 without core dumping. These functions are all optional, but + * we do this so we can have our crt0 always use them if they exist. + * This is so BSPs work better when using the crt0 installed with gcc. + * We have to initalize them twice, so we cover a.out (which prepends + * an underscore) and coff object file formats. + */ +PROVIDE (hardware_init_hook = 0); +PROVIDE (_hardware_init_hook = 0); +PROVIDE (software_init_hook = 0); +PROVIDE (_software_init_hook = 0); +/* + * stick everything in ram (of course) + */ +SECTIONS +{ + .text : + { + CREATE_OBJECT_SYMBOLS + *(.text) + + . = ALIGN(0x4); + /* These are for running static constructors and destructors under ELF. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + + *(.rodata) + + . = ALIGN(0x4); + *(.gcc_except_table) + + . = ALIGN(0x4); + *(.eh_frame) + + . = ALIGN(0x4); + __INIT_SECTION__ = . ; + LONG (0x4e560000) /* linkw %fp,#0 */ + *(.init) + SHORT (0x4e5e) /* unlk %fp */ + SHORT (0x4e75) /* rts */ + + . = ALIGN(0x4); + __FINI_SECTION__ = . ; + LONG (0x4e560000) /* linkw %fp,#0 */ + *(.fini) + SHORT (0x4e5e) /* unlk %fp */ + SHORT (0x4e75) /* rts */ + + _etext = .; + *(.lit) + } > ram + + .data : + { + *(.shdata) + *(.data) + _edata = .; + } > ram + + .bss : + { + . = ALIGN(0x4); + __bss_start = . ; + *(.shbss) + *(.bss) + *(COMMON) + _end = ALIGN (0x8); + __end = _end; + } > ram + + .stab 0 (NOLOAD) : + { + *(.stab) + } + + .stabstr 0 (NOLOAD) : + { + *(.stabstr) + } +} |