11.11Sjoerg/*	$NetBSD: cerror.S,v 1.11 2013/09/12 15:36:15 joerg Exp $	*/
21.1Sthorpej
31.1Sthorpej#include "SYS.h"
41.7Smatt#include "assym.h"
51.7Smatt
61.7Smatt#if defined(LIBC_SCCS) && !defined(lint)
71.11Sjoerg__RCSID("$NetBSD: cerror.S,v 1.11 2013/09/12 15:36:15 joerg Exp $")
81.7Smatt#endif /* LIBC_SCCS && !lint */
91.1Sthorpej
101.5Skleink#ifndef _REENTRANT
111.5Skleink	.globl	_C_LABEL(errno)
121.5Skleink#endif
131.11Sjoerg#ifdef __PIC__
141.10Smatt	.protected _C_LABEL(__cerror)
151.7Smatt#endif
161.1Sthorpej
171.4SkleinkENTRY(__cerror)
181.5Skleink#ifdef _REENTRANT
191.6Smatt	mflr	%r0
201.7Smatt	stwu	%r1,-CALLFRAMELEN(%r1)		# allocate new stack frame
211.7Smatt	stw	%r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
221.11Sjoerg#ifdef __PIC__
231.8Smatt	stw	%r30,CALLFRAME_R30(%r1)
241.8Smatt	PIC_TOCSETUP(__cerror, %r30)
251.8Smatt#endif
261.7Smatt	stw	%r31,CALLFRAME_R31(%r1)
271.8Smatt	mr	%r31,%r3		# stash away in callee-saved register
281.5Skleink	bl	PIC_PLT(_C_LABEL(__errno))
291.6Smatt	stw	%r31,0(%r3)
301.7Smatt	lwz	%r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
311.7Smatt	lwz	%r31,CALLFRAME_R31(%r1)
321.11Sjoerg#ifdef __PIC__
331.8Smatt	lwz	%r30,CALLFRAME_R30(%r1)
341.8Smatt#endif
351.6Smatt	mtlr	%r0
361.7Smatt	addi	%r1,%r1,CALLFRAMELEN
371.5Skleink#else
381.11Sjoerg#ifdef __PIC__
391.6Smatt	mflr	%r10
401.8Smatt	PIC_GOTSETUP(%r4)
411.6Smatt	lwz	%r4,_C_LABEL(errno)@got(%r4)
421.6Smatt	stw	%r3,0(%r4)
431.6Smatt	mtlr	%r10
441.1Sthorpej#else
451.6Smatt	lis	%r4,_C_LABEL(errno)@ha
461.6Smatt	stw	%r3,_C_LABEL(errno)@l(%r4)
471.11Sjoerg#endif /* __PIC__ */
481.5Skleink#endif /* _REENTRANT */
491.6Smatt	li	%r3,-1
501.6Smatt	li	%r4,-1
511.1Sthorpej	blr
521.7SmattEND(__cerror)
53