OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [sysdeps/] [m68k/] [crt/] [gcrt0.S] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * Copyright (c) 1993 Eric Youngdale, Peter MacDonald, David Engel
 * and Hongjiu Lu.
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. The name of the above contributors may not be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/* Notice of general intent:
 *
 * The linux operating system generally contains large amounts of code
 * that fall under the GNU General Public License, or GPL for short.
 * This file contains source code that by it's very nature would always
 * be linked with an application program, and because of this a GPL type
 * of copyright on this file would place restrictions upon the
 * distribution of binary-only commercial software.  Since the goal of the
 * Linux project as a whole is not to discourage the development and
 * distribution of commercial software for Linux, this file has been placed
 * under a more relaxed BSD-style of copyright.
 *
 * It is the general understanding of the above contributors that a
 * program executable linked to a library containing code that falls
 * under the GPL or GLPL style of license is not subject to the terms of
 * the GPL or GLPL license if the program executable(s) that are supplied
 * are linked to a shared library form of the GPL or GLPL library, and as long
 * as the form of the shared library is such that it is possible for
 * the end user to modify and rebuild the library and use it in
 * conjunction with the program executable.
 */

#ifdef __ELF__
#define _main main
#define _atexit atexit
#define _exit exit
#define ___libc_init __libc_init
#define _setlocale setlocale
#define ___setfpucw __setfpucw
#define ___fpu_control __fpu_control
#define ___environ __environ
#define ____brk_addr ___brk_addr
#define _monstartup monstartup
#define __mcleanup _mcleanup
#define __entry _start
#define d0 %D0
#define d1 %D1
#define a0 %A0
#define sp %SP
#endif

        .file "gcrt0.S"

#if defined (__ELF__) && defined (CALL_DEFAULT_LOCALE)
        .section .rodata
        .align 4
        .type ___null_string,@object
        .size ___null_string,4
___null_string:
        .long .L_shared_dummy__
.L_shared_dummy__:
        .asciz ""
#endif

        .text
___crt_dummy__:
#ifndef __ELF__
__entry:
/*
 * The first thing we do is try to load the shared library. If that
 * fails, it won't return.
 */
        jbsr ___load_shared_libraries
#else
/* ELF stuff here */
.globl _start
.type _start,@function
_start:
        /* First locate the start of the environment variables */
        movel sp@+,d0
        movel sp,a0
        pea sp@(4,d0:l:4)
        movel a0,sp@-
        movel d0,sp@-
#endif
#if 0
/*
 *      This is important, and was missing from the new version...
 */
        moveq #45,d0
        moveq #0,d1
        trap  #0
        movel d0,____brk_addr
#endif
/*
 *      Setup profiling
 */
        pea   __mcleanup
        jbsr  _atexit
        addql #4,sp
        pea   _etext
        pea   __entry
        jbsr  _monstartup
        addql #8,sp
/*
 *      Setup ___environ and call _main
 */
        movel sp@(8),___environ
        movel ___fpu_control,sp@-
        jbsr  ___setfpucw
        addql #4,sp
/* Some functions may be needed. */
        jbsr  ___libc_init    
#ifdef CALL_DEFAULT_LOCALE
/* Set up the default locale */
        movel ___null_string,sp@-
        pea DEFAULT_LOCALE
        jbsr _setlocale
        addql #8,sp
#endif
#ifdef ELF_INIT_FINI
        pea _fini
        jbsr atexit
        addql #4,sp
        jbsr _init
#endif
        jbsr  _main
        movel d0,sp@-
        jbsr  _exit
/*
 *      Just in case _exit fails... We use trap #0 for __exit().
 */
        addql #4,sp
done:
        moveq #1,d0
        trap  #0
        bras  done

#ifdef __ELF__
        .size   _start,.-_start
        .globl __environ
        .data   
        .type __environ,@object
        .align 4
__environ:
        .long 0 
        .size __environ,4
        .weak environ
        environ = __environ
#else
        .align  2
#ifdef CALL_DEFAULT_LOCALE
___null_string:
        .long ___shared_dummy__
#endif
___shared_dummy__:
        .asciz ""
        .stabs "___SHARED_LIBRARIES__",25,0,0,___shared_dummy__

        .data
        .align  2
___shared_dummy1__:
        .long 0xfeeb1ed3  /* Magic number used by DLL code to make sure this
                             is a real list */

        .stabs "__SHARABLE_CONFLICTS__",25,0,0,___shared_dummy1__
#endif

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.