xref: /netbsd-src/lib/libc/arch/powerpc/sys/cerror.S (revision 4d12bfcd155352508213ace5ccc59ce930ea2974)
1*4d12bfcdSjoerg/*	$NetBSD: cerror.S,v 1.11 2013/09/12 15:36:15 joerg Exp $	*/
25ef4bdf6Sthorpej
35ef4bdf6Sthorpej#include "SYS.h"
4cf88c389Smatt#include "assym.h"
5cf88c389Smatt
6cf88c389Smatt#if defined(LIBC_SCCS) && !defined(lint)
7*4d12bfcdSjoerg__RCSID("$NetBSD: cerror.S,v 1.11 2013/09/12 15:36:15 joerg Exp $")
8cf88c389Smatt#endif /* LIBC_SCCS && !lint */
95ef4bdf6Sthorpej
109d7ea652Skleink#ifndef _REENTRANT
115ef4bdf6Sthorpej	.globl	_C_LABEL(errno)
129d7ea652Skleink#endif
13*4d12bfcdSjoerg#ifdef __PIC__
14fc3d31dbSmatt	.protected _C_LABEL(__cerror)
15cf88c389Smatt#endif
169d7ea652Skleink
176348b7d5SkleinkENTRY(__cerror)
189d7ea652Skleink#ifdef _REENTRANT
191cddd41eSmatt	mflr	%r0
20cf88c389Smatt	stwu	%r1,-CALLFRAMELEN(%r1)		# allocate new stack frame
21cf88c389Smatt	stw	%r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
22*4d12bfcdSjoerg#ifdef __PIC__
23b79441d4Smatt	stw	%r30,CALLFRAME_R30(%r1)
24b79441d4Smatt	PIC_TOCSETUP(__cerror, %r30)
25b79441d4Smatt#endif
26cf88c389Smatt	stw	%r31,CALLFRAME_R31(%r1)
271cddd41eSmatt	mr	%r31,%r3		# stash away in callee-saved register
289d7ea652Skleink	bl	PIC_PLT(_C_LABEL(__errno))
291cddd41eSmatt	stw	%r31,0(%r3)
30cf88c389Smatt	lwz	%r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
31cf88c389Smatt	lwz	%r31,CALLFRAME_R31(%r1)
32*4d12bfcdSjoerg#ifdef __PIC__
33b79441d4Smatt	lwz	%r30,CALLFRAME_R30(%r1)
34b79441d4Smatt#endif
351cddd41eSmatt	mtlr	%r0
36cf88c389Smatt	addi	%r1,%r1,CALLFRAMELEN
379d7ea652Skleink#else
38*4d12bfcdSjoerg#ifdef __PIC__
391cddd41eSmatt	mflr	%r10
40b79441d4Smatt	PIC_GOTSETUP(%r4)
411cddd41eSmatt	lwz	%r4,_C_LABEL(errno)@got(%r4)
421cddd41eSmatt	stw	%r3,0(%r4)
431cddd41eSmatt	mtlr	%r10
445ef4bdf6Sthorpej#else
451cddd41eSmatt	lis	%r4,_C_LABEL(errno)@ha
461cddd41eSmatt	stw	%r3,_C_LABEL(errno)@l(%r4)
47*4d12bfcdSjoerg#endif /* __PIC__ */
489d7ea652Skleink#endif /* _REENTRANT */
491cddd41eSmatt	li	%r3,-1
501cddd41eSmatt	li	%r4,-1
515ef4bdf6Sthorpej	blr
52cf88c389SmattEND(__cerror)
53