diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/microblaze/__longjmp.S | 92 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/setjmp.S | 43 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/sysdep.h | 25 | 
3 files changed, 89 insertions, 71 deletions
diff --git a/libc/sysdeps/linux/microblaze/__longjmp.S b/libc/sysdeps/linux/microblaze/__longjmp.S index c7fce3435..0e0e2f45e 100644 --- a/libc/sysdeps/linux/microblaze/__longjmp.S +++ b/libc/sysdeps/linux/microblaze/__longjmp.S @@ -1,45 +1,51 @@ -/* - * libc/sysdeps/linux/microblaze/longjmp.S -- `longjmp' for microblaze - * - *  Copyright (C) 2003  John Williams <jwilliams@itee.uq.edu.au> - *  Copyright (C) 2001  NEC Corporation - *  Copyright (C) 2001  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> - -	.text -	.globl C_SYMBOL_NAME(__longjmp) -	.align 4 -C_SYMBOL_NAME(__longjmp): -	/* load registers from memory to r5 (arg0) */ -	lwi	r1, r5, 0 -	lwi	r15, r5, 4 -	lwi	r2,  r5, 8 -	lwi	r13, r5, 12 -	lwi	r18, r5, 16 -	lwi	r19, r5, 20 -	lwi	r20, r5, 24 -	lwi	r21, r5, 28 -	lwi	r22, r5, 32 -	lwi	r23, r5, 36 -	lwi	r24, r5, 40 -	lwi	r25, r5, 44 -	lwi	r26, r5, 48 -	lwi	r27, r5, 52 -	lwi	r28, r5, 56 -	lwi	r29, r5, 60 -	lwi	r30, r5, 64 -	lwi	r31, r5, 68 - -	addi	r3, r0, 1		/* return val */ -	rtsd	r15, 8			/* normal return */ -	nop +/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library.  If not, see +   <http://www.gnu.org/licenses/>.  */ + +#include <sysdep.h> + +ENTRY(__longjmp) + +    lwi     r1, r5, 0 +    lwi     r15, r5, 4 +    lwi     r2,  r5, 8 +    lwi     r13, r5, 12 +    lwi     r18, r5, 16 +    lwi     r19, r5, 20 +    lwi     r20, r5, 24 +    lwi     r21, r5, 28 +    lwi     r22, r5, 32 +    lwi     r23, r5, 36 +    lwi     r24, r5, 40 +    lwi     r25, r5, 44 +    lwi     r26, r5, 48 +    lwi     r27, r5, 52 +    lwi     r28, r5, 56 +    lwi     r29, r5, 60 +    lwi     r30, r5, 64 +    lwi     r31, r5, 68 + +    addk  r3,r6,r0 +    beqi  r3,L(return_1) +    rtsd  r15,8 +    nop +L(return_1): +    rtsd  r15,8 +    addik r3,r0,1	/* delay slot.  */ + +END(__longjmp)  libc_hidden_def(__longjmp) diff --git a/libc/sysdeps/linux/microblaze/setjmp.S b/libc/sysdeps/linux/microblaze/setjmp.S index 3c1d8a1dd..b40850cae 100644 --- a/libc/sysdeps/linux/microblaze/setjmp.S +++ b/libc/sysdeps/linux/microblaze/setjmp.S @@ -28,27 +28,21 @@     License along with the GNU C Library; if not, see     <http://www.gnu.org/licenses/>.  */ -#include <libc-symbols.h> +#include <sysdep.h> -	.text -	.globl C_SYMBOL_NAME(setjmp) -	.align 4 -C_SYMBOL_NAME(setjmp): -#ifdef __PIC__ -	brid	1f -#else -	braid	C_SYMBOL_NAME(__sigsetjmp) -#endif -	addi	r6, r0, 1			/* Save the signal mask.  */ +ENTRY(_setjmp) +	addik   r6, r0, 0 +END(_setjmp) +libc_hidden_def(_setjmp) -	.globl C_SYMBOL_NAME(_setjmp) -C_SYMBOL_NAME(_setjmp): -	and	r6, r0, r0			/* Don't save the signal mask.  */ +ENTRY(setjmp) +	brid    1f +	addik   r6, r0, 1 +END(setjmp) +libc_hidden_def(setjmp) -	.globl C_SYMBOL_NAME(__sigsetjmp) -C_SYMBOL_NAME(__sigsetjmp): +ENTRY(__sigsetjmp)  1: -	/* Save registers relative to r5 (arg0)*/  	swi	r1, r5, 0			/* stack pointer */  	swi	r15, r5, 4			/* link register */  	swi	r2,  r5, 8			/* SDA and SDA2 ptrs */ @@ -68,14 +62,7 @@ C_SYMBOL_NAME(__sigsetjmp):  	swi	r30, r5, 64  	swi	r31, r5, 68 -	/* Make a tail call to __sigjmp_save; it takes the same args.  */ -#ifdef __PIC__ -	mfs   r12,rpc -	addik r12,r12,_GLOBAL_OFFSET_TABLE_+8 -	lwi   r12,r12,__sigjmp_save@GOT -	brad  r12 -	nop -#else -	braid	C_SYMBOL_NAME(__sigjmp_save) -	nop -#endif +	bri __sigjmp_save + +END(__sigsetjmp) +libc_hidden_def(__sigsetjmp) diff --git a/libc/sysdeps/linux/microblaze/sysdep.h b/libc/sysdeps/linux/microblaze/sysdep.h new file mode 100644 index 000000000..1f01a2a1d --- /dev/null +++ b/libc/sysdeps/linux/microblaze/sysdep.h @@ -0,0 +1,25 @@ +#include <common/sysdep.h> + +#ifdef  __ASSEMBLER__ + +/* Syntactic details of assembler.  */ + +# define ALIGNARG(log2) log2 +# define ASM_SIZE_DIRECTIVE(name) .size name,.-name + +/* Define an entry point visible from C.  */ +# define ENTRY(name)                          \ +  .globl C_SYMBOL_NAME(name);                 \ +  .type C_SYMBOL_NAME(name),@function;        \ +  .align ALIGNARG(2);                         \ +  C_LABEL(name) + +# undef END +# define END(name) ASM_SIZE_DIRECTIVE(name) + +/* Local label name for asm code.  */ +# ifndef L +#  define L(name) $L##name +# endif + +#endif  | 
