mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* All files with FSF copyright notices: Update copyright dates using scripts/update-copyrights. * locale/programs/charmap-kw.h: Regenerated. * locale/programs/locfile-kw.h: Likewise.
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* Copyright (C) 1997-2018 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)
 |