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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [newlib-1.18.0/] [libgloss/] [i386/] [cygmon-crt0.S] - Rev 207

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 * crt0 startup code for user programs running under Cygmon
 *
 * Copyright (c) 1998, 2000 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.
 */

#define _S2(P,X) P ## X
#define _S1(P,X) _S2(P,X)
#define SYM(X) _S1(__USER_LABEL_PREFIX__,X)

.data
        .align  8
SYM(environ):
        .long   0

SYM(argc):
        .long   0

        .text
        .align 4

        .globl __start
__start:
        /* see if the stack is already setup. if not, then default
         *  to using the value of %sp as set by the ROM monitor
         */
        movl    $__stack, %eax
        testl   %eax, %eax
        jz      1f
        movl    %eax, %esp
1:
        mov $0, %ebp

        movl    $__bss_start, %edi
        movl    $__bss_end, %ecx
        subl    %edi, %ecx
        xorl    %eax, %eax
        rep; stosb

        pushl   $SYM(__sigtramp)
        pushl   $0
        call    SYM(__install_signal_handler)
        popl    %eax

        pushl   $SYM(__do_global_dtors)
        call    SYM(atexit)
        popl    %eax

        call    SYM(__do_global_ctors)

        pushl   $SYM(argc)
        call    SYM(__get_program_arguments)
        popl    %ecx

        movl    SYM(argc), %ecx
        pushl   %eax
        pushl   %ecx
        call    SYM(main)
        popl    %ecx
        popl    %edx

        /* call exit from the C library so atexit gets called, and the
         * C++ destructors get run. This calls our exit routine below    
         * when it's done.
         */
        pushl   %eax
        call    SYM(exit)
3:
        jmp     3b

Go to most recent revision | 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.