1/* $NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $ */ 2 3#include "SYS.h" 4#include "assym.h" 5 6#if defined(LIBC_SCCS) && !defined(lint) 7__RCSID("$NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $") 8#endif /* LIBC_SCCS && !lint */ 9 10#ifndef _REENTRANT 11 .globl _C_LABEL(errno) 12#endif 13#ifdef PIC 14 .hidden _C_LABEL(__cerror) 15#endif 16 17ENTRY(__cerror) 18#ifdef _REENTRANT 19 mflr %r0 20 stwu %r1,-CALLFRAMELEN(%r1) # allocate new stack frame 21 stw %r0,CALLFRAMELEN+CALLFRAME_LR(%r1) 22#ifdef PIC 23 stw %r30,CALLFRAME_R30(%r1) 24 PIC_TOCSETUP(__cerror, %r30) 25#endif 26 stw %r31,CALLFRAME_R31(%r1) 27 mr %r31,%r3 # stash away in callee-saved register 28 bl PIC_PLT(_C_LABEL(__errno)) 29 stw %r31,0(%r3) 30 lwz %r0,CALLFRAMELEN+CALLFRAME_LR(%r1) 31 lwz %r31,CALLFRAME_R31(%r1) 32#ifdef PIC 33 lwz %r30,CALLFRAME_R30(%r1) 34#endif 35 mtlr %r0 36 addi %r1,%r1,CALLFRAMELEN 37#else 38#ifdef PIC 39 mflr %r10 40 PIC_GOTSETUP(%r4) 41 lwz %r4,_C_LABEL(errno)@got(%r4) 42 stw %r3,0(%r4) 43 mtlr %r10 44#else 45 lis %r4,_C_LABEL(errno)@ha 46 stw %r3,_C_LABEL(errno)@l(%r4) 47#endif /* PIC */ 48#endif /* _REENTRANT */ 49 li %r3,-1 50 li %r4,-1 51 blr 52END(__cerror) 53