diff options
author | Ryan Flux <ryan.flux@emsolutions.com.au> | 2011-10-04 10:50:49 +1000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2011-10-06 22:22:25 +0200 |
commit | 331b43717229eaad2a95bf420f5100079bd53683 (patch) | |
tree | 784606042014321101c611ef4650b1b6aacff76a /libc/sysdeps/linux/microblaze/setjmp.S | |
parent | cc5499a6a678e4caf1b06f33192de84d5ab88fd5 (diff) |
microblaze mmu/elf/shared lib support
microblaze can either be with mmu or without
If with, use elf rather than flat, and support shared libs
Signed-off-by: Ryan Flux <ryan.flux@emsolutions.com.au>
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps/linux/microblaze/setjmp.S')
-rw-r--r-- | libc/sysdeps/linux/microblaze/setjmp.S | 32 |
1 files changed, 31 insertions, 1 deletions
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 |