* i386/cygmon.ld: Add entry for .gcc_except_table. 2000-10-25 Mark Salter <msalter@redhat.com> * i386/cygmon-crt0.S: Use __USER_LABEL_PREFIX__ for symbols. Always use __start for start symbol. * i386/cygmon-salib.c: Don't build __do_global_[cd]tors for AOUT. Disable file I/O extensions to make Plum Hall happy. * i386/cygmon.ld: Set __start as entry point. * i386/Makefile.in: Support IS_AOUT. * i386/configure.in: Support IS_AOUT. * i386/configure: Regenerated. * i386/cygmon-salib.c: * i386/cygmon-gmon.c (_mcount): It's _etext.
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*
 | 
						|
 * 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
 |