Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/i386/cygmon-crt0.S')
-rw-r--r--libgloss/i386/cygmon-crt0.S73
1 files changed, 38 insertions, 35 deletions
diff --git a/libgloss/i386/cygmon-crt0.S b/libgloss/i386/cygmon-crt0.S
index 1c4535e07..9be020917 100644
--- a/libgloss/i386/cygmon-crt0.S
+++ b/libgloss/i386/cygmon-crt0.S
@@ -1,7 +1,7 @@
/*
* crt0 startup code for user programs running under Cygmon
*
- * Copyright (c) 1998, 2000 Cygnus Support
+ * 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
@@ -14,9 +14,11 @@
* they apply.
*/
-#define _S2(P,X) P ## X
-#define _S1(P,X) _S2(P,X)
-#define SYM(X) _S1(__USER_LABEL_PREFIX__,X)
+#ifndef NEED_UNDERSCORE
+#define SYM(X) X
+#else
+#define SYM(X) _ ## X
+#endif
.data
.align 8
@@ -29,51 +31,52 @@ SYM(argc):
.text
.align 4
- .globl __start
-__start:
+ .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
*/
- movl $__stack, %eax
- testl %eax, %eax
- jz 1f
- movl %eax, %esp
+ lea __stack,%eax
+ cmpl $0,%eax
+ jz 1f
+ mov %eax, %esp
1:
mov $0, %ebp
- movl $__bss_start, %edi
- movl $__bss_end, %ecx
- subl %edi, %ecx
- xorl %eax, %eax
- rep; stosb
+ 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(__sigtramp)
- pushl $0
- call SYM(__install_signal_handler)
- popl %eax
+ pushl $SYM(__do_global_dtors)
+ call SYM(atexit)
+ add $4, %esp
- pushl $SYM(__do_global_dtors)
- call SYM(atexit)
- popl %eax
+ call SYM(__do_global_ctors)
- call SYM(__do_global_ctors)
+ pushl $SYM(argc)
+ call SYM(__get_program_arguments)
+ add $4, %esp
- 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
+ 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
+ pushl %eax
call SYM(exit)
3:
- jmp 3b
+ jmp 3b