From 09ccfcee505586c0427bf0131e727592b9d2c233 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Wed, 28 Feb 2001 18:41:57 +0000 Subject: 2001-02-28 Will Cohen * src/libgloss/m68k/Makefile.in: Updated copyright and added rules to build simulator related libraries. (SIM_SCRIPTS): New variable. (SIM_LDFLAGS): New variable. (SIM_BSP): New variable. (SIM_CRT0): New variable. (SIM_OBJS): New variable. (SIM_TEST): New variable. (SIM_INSTALL): new variable. * src/libgloss/m68k/sim-abort.c: New file. * src/libgloss/m68k/sim-crt0.S: New file. * src/libgloss/m68k/sim-errno.c: New file. * src/libgloss/m68k/sim-funcs.c: New file. * src/libgloss/m68k/sim-inbyte.c: New file. * src/libgloss/m68k/sim-print.c: New file. * src/libgloss/m68k/sim-sbrk.c: New file. * src/libgloss/m68k/sim.ld: New file. * src/libgloss/m68k/simulator.S: New file. --- libgloss/m68k/sim-crt0.S | 121 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 libgloss/m68k/sim-crt0.S (limited to 'libgloss/m68k/sim-crt0.S') diff --git a/libgloss/m68k/sim-crt0.S b/libgloss/m68k/sim-crt0.S new file mode 100644 index 000000000..bc255142c --- /dev/null +++ b/libgloss/m68k/sim-crt0.S @@ -0,0 +1,121 @@ +/* + * crt0.S -- startup file for m68k-coff + * + * Copyright (c) 1995, 1996, 1998, 2001 Cygnus Support + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +#include "asm.h" + + .title "crt0.S for m68k-coff" +#define STACKSIZE 0x4000 + +/* + * Define an empty environment. + */ + .data + .align 2 +SYM (environ): + .long 0 + + .align 2 + .text + +/* + * These symbols are defined in C code, so they need to always be + * named with SYM because of the difference between object file formats. + */ + +/* These are defined in C code. */ + .extern SYM (main) + .extern SYM (exit) + .extern SYM (atexit) + .extern SYM(__do_global_dtors) + +/* + * These values are set in the linker script, so they must be + * explicitly named here without SYM. + */ + .extern __stack + .extern __bss_start + .extern _end + +/* + * set things up so the application will run. This *must* be called start. + */ + .global SYM (start) + +SYM (start): + /* See if user supplied their own stack (__stack != 0). If not, then + * default to using the value of %sp as set by the ROM monitor. + */ + movel IMM(__stack), a0 + cmpl IMM(0), a0 + jbeq 1f + movel a0, sp +1: + /* set up initial stack frame */ + link a6, IMM(-8) + +/* + * zero out the bss section. + */ + movel IMM(__bss_start), d1 + movel IMM(_end), d0 + cmpl d0, d1 + jbeq 3f + movl d1, a0 + subl d1, d0 + subql IMM(1), d0 +2: + clrb (a0)+ +#ifndef __mcf5200__ + dbra d0, 2b + clrw d0 + subql IMM(1), d0 + jbcc 2b +#else + subql IMM(1), d0 + jbpl 2b +#endif + +3: + +/* + * call the main routine from the application to get it going. + * main (argc, argv, environ) + * we pass argv as a pointer to NULL. + */ + +#ifdef ADD_DTORS + /* put __do_global_dtors in the atexit list so the destructors get run */ + movel IMM (SYM(__do_global_dtors)),(sp) + jsr SYM (atexit) +#endif + movel IMM (__FINI_SECTION__),(sp) + jsr SYM (atexit) + + jsr __INIT_SECTION__ + + pea 0 + pea SYM (environ) + pea sp@(4) + pea 0 + jsr SYM (main) + movel d0, sp@- + +/* + * drop down into exit incase the user doesn't. This should drop + * control back to the ROM monitor, if there is one. This calls the + * exit() from the C library so the C++ tables get cleaned up right. + */ + jsr SYM (exit) -- cgit v1.2.3