diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/microblaze/crt1.S | 61 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/crti.S | 41 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/crtn.S | 45 | 
3 files changed, 147 insertions, 0 deletions
| diff --git a/libc/sysdeps/linux/microblaze/crt1.S b/libc/sysdeps/linux/microblaze/crt1.S new file mode 100644 index 000000000..e9564cfba --- /dev/null +++ b/libc/sysdeps/linux/microblaze/crt1.S @@ -0,0 +1,61 @@ +/* + * libc/sysdeps/linux/microblaze/crt1.S -- Initial program entry point for linux/microblaze + * + *  Copyright (C) 2009       Meyer Sound Laboratories + *  Copyright (C) 2003       John Williams <jwilliams@itee.uq.edu.au> + *  Copyright (C) 2001,2002  NEC Corporation + *  Copyright (C) 2001,2002  Miles Bader <miles@gnu.org> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file COPYING.LIB in the main + * directory of this archive for more details. + * + * Written by Miles Bader <miles@gnu.org> + */ + +#include <libc-symbols.h> + +/* Upon entry, the stack contains the following data: +	argc, argv[0], ..., argv[argc-1], 0, envp[0], ..., 0 +*/ + +	.text +	.globl C_SYMBOL_NAME(_start) +	.align 4 +C_SYMBOL_NAME(_start): + +	/* Load SDAs */ +	la	r2, r0, C_SYMBOL_NAME(_SDA2_BASE_) /* in the original source r2 was SDA, and r13 was SDA2, no idea why */ +	la	r13, r0, C_SYMBOL_NAME(_SDA_BASE_) + +	/* +	Preparing arguments for uClibc's startup routine. +	The routine has 6 arguments, so 5 of them are placed +	into registers, one on the stack +	*/ + +	la      r5, r0, C_SYMBOL_NAME(main) /* Arg 1: main() */ +	lw	r6, r0, r1		    /* Arg 2: argc   */ +	addi	r7, r1, 4		    /* Arg 3: argv   */ +	la	r8, r0, _init               /* Arg 4: init   */ +	la	r9, r0, _fini               /* Arg 5: fini   */ +	addk	r10,r0,r0                   /* Arg 6: rtld_fini = NULL */ + + +	/* Reserve space for __uClibc_main to save parameters +	   (Microblaze ABI stack calling convention) +	   and for stack_end argument to __uClibc_main  */ +	add 	r3, r1, r0 +	addi    r1, r1, -32 + +	/* tail-call uClibc's startup routine */ +	brid	C_SYMBOL_NAME(__uClibc_main) +	swi 	r3, r1, 28	/* Arg 7: stack end [DELAY SLOT] */ + +/* Define a symbol for the first piece of initialized data.  */ +	.data +	.globl __data_start +__data_start: +	.long 0 +	.weak data_start +	data_start = __data_start diff --git a/libc/sysdeps/linux/microblaze/crti.S b/libc/sysdeps/linux/microblaze/crti.S new file mode 100644 index 000000000..e00396897 --- /dev/null +++ b/libc/sysdeps/linux/microblaze/crti.S @@ -0,0 +1,41 @@ +/* + * libc/sysdeps/linux/microblaze/crti.S -- init/fini entry code for microblaze + *                                         (baselined with gcc 4.1.2) + * + *  Copyright (C) 2010       Digital Design Corporation + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file COPYING.LIB in the main + * directory of this archive for more details. + */ + +#define END_INIT +#define END_FINI +#define ALIGN +#include <libc-symbols.h> + +/*@HEADER_ENDS*/ + +	.section .init +	.align	2 +	.globl	_init +_init: +	addik	r1, r1, -32 +	swi	r19, r1, 28 +	addk	r19, r1, r0 +	swi	r15, r1, 0 + +	ALIGN +	END_INIT + +	.section .fini +	.align	2 +	.globl	_fini +_fini: +	addik	r1, r1, -32 +	swi	r19, r1, 28 +	addk	r19, r1, r0 +	swi	r15, r1, 0 + +	ALIGN +	END_FINI diff --git a/libc/sysdeps/linux/microblaze/crtn.S b/libc/sysdeps/linux/microblaze/crtn.S new file mode 100644 index 000000000..da8c920ef --- /dev/null +++ b/libc/sysdeps/linux/microblaze/crtn.S @@ -0,0 +1,45 @@ +/* + * libc/sysdeps/linux/microblaze/crtn.S -- init/fini exit code for microblaze + *                                         (baselined with gcc 4.1.2) + * + *  Copyright (C) 2010       Digital Design Corporation + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License.  See the file COPYING.LIB in the main + * directory of this archive for more details. + */ + +#define END_INIT +#define END_FINI +#define ALIGN +#include <libc-symbols.h> + +	.section .init +	.align	2 +	.globl	_init +	.ent	_init + +	lwi	r15, r1, 0 +	lwi	r19, r1, 28 +	rtsd	r15, 8 +	addik	r1, r1, 32	# Delay slot + +	.end	_init +$Lfe2: +	.size	_init,$Lfe2-_init + +	.section .fini +	.align	2 +	.globl	_fini +	.ent	_fini + +	lwi	r15, r1, 0 +	lwi	r19, r1, 28 +	rtsd	r15, 8 +	addik	r1, r1, 32	# Delay slot + +	.end	_fini +$Lfe3: +	.size	_fini,$Lfe3-_fini + +/*@TRAILER_BEGINS*/ | 
