Next: glue.c, Previous: idp.ld, Up: Code Listings [Contents]
/*
* crt0.S -- startup file for m68k-coff
*
*/
.title "crt0.S for m68k-coff"
/* These are predefined by new versions of GNU cpp. */
#ifndef __USER_LABEL_PREFIX__
#define __USER_LABEL_PREFIX__ _
#endif
#ifndef __REGISTER_PREFIX__
#define __REGISTER_PREFIX__
#endif
/* ANSI concatenation macros. */
#define CONCAT1(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a ## b
/* Use the right prefix for global labels. */
#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
/* Use the right prefix for registers. */
#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
#define d0 REG (d0)
#define d1 REG (d1)
#define d2 REG (d2)
#define d3 REG (d3)
#define d4 REG (d4)
#define d5 REG (d5)
#define d6 REG (d6)
#define d7 REG (d7)
#define a0 REG (a0)
#define a1 REG (a1)
#define a2 REG (a2)
#define a3 REG (a3)
#define a4 REG (a4)
#define a5 REG (a5)
#define a6 REG (a6)
#define fp REG (fp)
#define sp REG (sp)
/*
* Set up some room for a stack. We just grab a chunk of memory.
*/
.set stack_size, 0x2000
.comm SYM (stack), stack_size
/*
* Define an empty environment.
*/
.data
.align 2
SYM (environ):
.long 0
.align 2
.text
.global SYM (stack)
.global SYM (main)
.global SYM (exit)
/*
* This really should be __bss_start, not SYM (__bss_start).
*/
.global __bss_start
/*
* start -- set things up so the application will run.
*/
SYM (start):
link a6, #-8
moveal #SYM (stack) + stack_size, sp
/*
* zerobss -- zero out the bss section
*/
moveal #__bss_start, a0
moveal #SYM (end), a1
1:
movel #0, (a0)
leal 4(a0), a0
cmpal a0, a1
bne 1b
/*
* Call the main routine from the application to get it going.
* main (argc, argv, environ)
* We pass argv as a pointer to NULL.
*/
pea 0
pea SYM (environ)
pea sp@(4)
pea 0
jsr SYM (main)
movel d0, sp@-
/*
* _exit -- Exit from the application. Normally we cause a user trap
* to return to the ROM monitor for another run.
*/
SYM (exit):
trap #0
Next: glue.c, Previous: idp.ld, Up: Code Listings [Contents]