fixes for host gcc 4.6.1
[zpugcc/jano.git] / toolchain / gcc / libgloss / i386 / cygmon-crt0.S
blob1c4535e07bd2aef2cabd621ac695b7187ae62267
1 /*
2  * crt0 startup code for user programs running under Cygmon
3  *
4  * Copyright (c) 1998, 2000 Cygnus Support
5  *
6  * The authors hereby grant permission to use, copy, modify, distribute,
7  * and license this software and its documentation for any purpose, provided
8  * that existing copyright notices are retained in all copies and that this
9  * notice is included verbatim in any distributions. No written agreement,
10  * license, or royalty fee is required for any of the authorized uses.
11  * Modifications to this software may be copyrighted by their authors
12  * and need not follow the licensing terms described here, provided that
13  * the new terms are clearly indicated on the first page of each file where
14  * they apply.
15  */
17 #define _S2(P,X) P ## X
18 #define _S1(P,X) _S2(P,X)
19 #define SYM(X) _S1(__USER_LABEL_PREFIX__,X)
21 .data
22         .align  8
23 SYM(environ):
24         .long   0
26 SYM(argc):
27         .long   0
29         .text
30         .align 4
32         .globl __start
33 __start:
34         /* see if the stack is already setup. if not, then default
35          *  to using the value of %sp as set by the ROM monitor
36          */
37         movl    $__stack, %eax
38         testl   %eax, %eax
39         jz      1f
40         movl    %eax, %esp
42         mov $0, %ebp
44         movl    $__bss_start, %edi
45         movl    $__bss_end, %ecx
46         subl    %edi, %ecx
47         xorl    %eax, %eax
48         rep; stosb
50         pushl   $SYM(__sigtramp)
51         pushl   $0
52         call    SYM(__install_signal_handler)
53         popl    %eax
55         pushl   $SYM(__do_global_dtors)
56         call    SYM(atexit)
57         popl    %eax
59         call    SYM(__do_global_ctors)
61         pushl   $SYM(argc)
62         call    SYM(__get_program_arguments)
63         popl    %ecx
65         movl    SYM(argc), %ecx
66         pushl   %eax
67         pushl   %ecx
68         call    SYM(main)
69         popl    %ecx
70         popl    %edx
72         /* call exit from the C library so atexit gets called, and the
73          * C++ destructors get run. This calls our exit routine below    
74          * when it's done.
75          */
76         pushl   %eax
77         call    SYM(exit)
79         jmp     3b