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