diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/microblaze/bits/uClibc_page.h | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/setjmp.S | 32 | ||||
| -rw-r--r-- | libc/sysdeps/linux/microblaze/vfork.S | 7 | 
3 files changed, 40 insertions, 1 deletions
| diff --git a/libc/sysdeps/linux/microblaze/bits/uClibc_page.h b/libc/sysdeps/linux/microblaze/bits/uClibc_page.h index 8fc81ae32..41b042262 100644 --- a/libc/sysdeps/linux/microblaze/bits/uClibc_page.h +++ b/libc/sysdeps/linux/microblaze/bits/uClibc_page.h @@ -31,7 +31,9 @@  #elif defined(CONFIG_MICROBLAZE_4K_PAGES)  #define PAGE_SHIFT		12  #else +#if !defined(CONFIG_MMU)  #warning Missing CONFIG_MICROBLAZE_nnK_PAGES, assuming 4K +#endif  #define PAGE_SHIFT		12  #endif diff --git a/libc/sysdeps/linux/microblaze/setjmp.S b/libc/sysdeps/linux/microblaze/setjmp.S index 7acb9ea5d..d01c74555 100644 --- a/libc/sysdeps/linux/microblaze/setjmp.S +++ b/libc/sysdeps/linux/microblaze/setjmp.S @@ -10,7 +10,24 @@   * directory of this archive for more details.   *   * Written by Miles Bader <miles@gnu.org> - */ + * + * PIC code based on glibc 2.3.6 */ + +/* +   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, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */  #define _SETJMP_H  #define _ASM @@ -22,7 +39,11 @@  	.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.  */  	.globl C_SYMBOL_NAME(_setjmp) @@ -31,6 +52,7 @@ C_SYMBOL_NAME(_setjmp):  	.globl C_SYMBOL_NAME(__sigsetjmp)  C_SYMBOL_NAME(__sigsetjmp): +1:  	/* Save registers relative to r5 (arg0)*/  	swi	r1, r5, 0			/* stack pointer */  	swi	r15, r5, 4			/* link register */ @@ -52,5 +74,13 @@ C_SYMBOL_NAME(__sigsetjmp):  	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 diff --git a/libc/sysdeps/linux/microblaze/vfork.S b/libc/sysdeps/linux/microblaze/vfork.S index c4b4dbf2f..57db5e543 100644 --- a/libc/sysdeps/linux/microblaze/vfork.S +++ b/libc/sysdeps/linux/microblaze/vfork.S @@ -36,7 +36,14 @@ __vfork:  	blti	r4, 1f			/* is r3 < -125? */  	bri	2f			/* normal return */  1:	sub 	r3, r3, r0		/* r3 = -r3 */ +#ifdef __PIC__ +	mfs	r3,rpc +	addik	r3,r3,_GLOBAL_OFFSET_TABLE_+8 +	lwi	r3,r3,C_SYMBOL_NAME(errno)@GOT +	sw	r3, r0, r3 +#else  	swi	r3, r0, C_SYMBOL_NAME(errno); +#endif  					/* state restore etc */  2:	rtsd	r15, 8			/* error return */  	nop | 
