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