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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [libgloss/] [i386/] [cygmon-crt0.S] - Rev 1005

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

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

#ifndef NEED_UNDERSCORE
#define SYM(X) X
#else
#define SYM(X) _ ## X
#endif

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

SYM(argc):
        .long   0

        .text
        .align 4

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

        lea __bss_start, %eax
2:
        movb $0,(%eax)
        inc %eax
        cmp $__bss_end,%eax
        jl 2b
        
2:
        pushl $SYM(__sigtramp)
        pushl $0
        call SYM(__install_signal_handler)
        add $4, %esp

        pushl $SYM(__do_global_dtors)
        call SYM(atexit)
        add $4, %esp

        call SYM(__do_global_ctors)

        pushl $SYM(argc)
        call SYM(__get_program_arguments)
        add $4, %esp

        pushl %eax
        lea SYM(argc), %ebx
        pushl (%ebx)
        call SYM(main)
        add $8, %esp

        /* 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.