cerror.S revision 1.7
11.7Smatt/*	$NetBSD: cerror.S,v 1.7 2011/01/15 07:31:13 matt Exp $	*/
21.1Sthorpej
31.1Sthorpej#include "SYS.h"
41.7Smatt#include "assym.h"
51.7Smatt
61.7Smatt#if defined(LIBC_SCCS) && !defined(lint)
71.7Smatt__RCSID("$NetBSD: cerror.S,v 1.7 2011/01/15 07:31:13 matt Exp $")
81.7Smatt#endif /* LIBC_SCCS && !lint */
91.1Sthorpej
101.5Skleink#ifndef _REENTRANT
111.5Skleink	.globl	_C_LABEL(errno)
121.5Skleink#endif
131.7Smatt#ifdef PIC
141.7Smatt	.hidden	_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.7Smatt	stw	%r31,CALLFRAME_R31(%r1)
231.7Smatt	mr	%r31,%r3			# stash away in callee-saved register
241.5Skleink	bl	PIC_PLT(_C_LABEL(__errno))
251.6Smatt	stw	%r31,0(%r3)
261.7Smatt	lwz	%r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
271.7Smatt	lwz	%r31,CALLFRAME_R31(%r1)
281.6Smatt	mtlr	%r0
291.7Smatt	addi	%r1,%r1,CALLFRAMELEN
301.5Skleink#else
311.1Sthorpej#ifdef PIC
321.6Smatt	mflr	%r10
331.3Stsubai	bl	_GLOBAL_OFFSET_TABLE_@local-4
341.6Smatt	mflr	%r4
351.6Smatt	lwz	%r4,_C_LABEL(errno)@got(%r4)
361.6Smatt	stw	%r3,0(%r4)
371.6Smatt	mtlr	%r10
381.1Sthorpej#else
391.6Smatt	lis	%r4,_C_LABEL(errno)@ha
401.6Smatt	stw	%r3,_C_LABEL(errno)@l(%r4)
411.5Skleink#endif /* PIC */
421.5Skleink#endif /* _REENTRANT */
431.6Smatt	li	%r3,-1
441.6Smatt	li	%r4,-1
451.1Sthorpej	blr
461.7SmattEND(__cerror)
47