mirror of git://sourceware.org/git/glibc.git
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| /* 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>
 | |
| 
 | |
| /* This source produces 3 functions:
 | |
|    __sigsetjmp (jmpbuf,savemask)
 | |
|    setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 1)
 | |
|    _setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 0)
 | |
| */
 | |
| 
 | |
| #ifndef setjmp_name
 | |
| # define setjmp_name __sigsetjmp
 | |
| # define SET_MASK_ARG
 | |
| #else
 | |
| # define SET_MASK_ARG    addik r6,r0,SAVEMASK
 | |
| #endif
 | |
| 
 | |
| ENTRY (setjmp_name)
 | |
|     swi   r1,r5,0
 | |
|     swi   r2,r5,4
 | |
|     swi   r13,r5,8
 | |
|     swi   r14,r5,12
 | |
|     swi   r15,r5,16
 | |
|     swi   r16,r5,20
 | |
|     swi   r17,r5,24
 | |
|     swi   r18,r5,28
 | |
|     swi   r19,r5,32
 | |
|     swi   r20,r5,36
 | |
|     swi   r21,r5,40
 | |
|     swi   r22,r5,44
 | |
|     swi   r23,r5,48
 | |
|     swi   r24,r5,52
 | |
|     swi   r25,r5,56
 | |
|     swi   r26,r5,60
 | |
|     swi   r27,r5,64
 | |
|     swi   r28,r5,68
 | |
|     swi   r29,r5,72
 | |
|     swi   r30,r5,76
 | |
|     swi   r31,r5,80
 | |
| 
 | |
|     SET_MASK_ARG
 | |
| 
 | |
|     /* Make a tail call to __sigjmp_save; it takes the same args.  */
 | |
| #ifdef	PIC
 | |
|     /* We cannot use the PLT, because it requires that r20 be set, but
 | |
|        we can't save and restore our caller's value.  Instead, we do an
 | |
|        indirect jump through the GOT, using the temporary register
 | |
|        %ecx, which is call-clobbered.  */
 | |
|     mfs   r12,rpc
 | |
|     addik r12,r12,_GLOBAL_OFFSET_TABLE_+8
 | |
|     lwi   r12,r12,__sigjmp_save@GOT
 | |
|     brad  r12
 | |
| #else
 | |
|     brid  __sigjmp_save
 | |
| #endif
 | |
|     nop
 | |
| END (setjmp_name)
 | |
| 
 | |
| libc_hidden_def (setjmp_name)
 |