/*
 * crt0.S for the Blackfin processor
 *
 * Copyright (C) 2006 Analog Devices, Inc.
 *
 * 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.
 */

	.text
	.align 	2

	.global	__start
__start:

	/* Start by setting up a stack */
	link 0xc;
	/* Zero the memory in the .bss section.  */

	p0.l = __edata;
	p0.h = __edata;
	p1.l = __end;
	p1.h = __end;
	p1 -= p0;
	r0 = 0;
	lsetup (L$L$clear_bss, L$L$clear_bss) lc0 = p1;
L$L$clear_bss:
	B [p0++] = r0;

#ifdef __BFIN_FDPIC__
	/* Set up GOT pointer.  */
	P0.L = __ROFIXUP_END__;
	P0.H = __ROFIXUP_END__;
	P4 = [P0 - 4];
#endif

	/* Need to set up standard file handles */
	/*  Parse string at r1 */

	p0.l = __init;
	p0.h = __init;
	P3 = P4;
	call	(p0)

	p0.l = _atexit;
	p0.h = _atexit;
#ifdef __BFIN_FDPIC__
	r0 = [P4 + __fini@FUNCDESC_GOT17M4];
	P3 = P4;
#else
	r0.l = __fini;
	r0.h = __fini;
#endif
	call	(p0)

	p0.l = ___setup_argv_and_call_main;
	p0.h = ___setup_argv_and_call_main;
	P3 = P4;
	call	(p0)

	p0.l = _exit;
	p0.h = _exit;
	P3 = P4;
	jump	(p0)		/* Should not return.  */
	nop;
