cerror.S revision 1.7
1/* $NetBSD: cerror.S,v 1.7 2011/01/15 07:31:13 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.7 2011/01/15 07:31:13 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 stw %r31,CALLFRAME_R31(%r1) 23 mr %r31,%r3 # stash away in callee-saved register 24 bl PIC_PLT(_C_LABEL(__errno)) 25 stw %r31,0(%r3) 26 lwz %r0,CALLFRAMELEN+CALLFRAME_LR(%r1) 27 lwz %r31,CALLFRAME_R31(%r1) 28 mtlr %r0 29 addi %r1,%r1,CALLFRAMELEN 30#else 31#ifdef PIC 32 mflr %r10 33 bl _GLOBAL_OFFSET_TABLE_@local-4 34 mflr %r4 35 lwz %r4,_C_LABEL(errno)@got(%r4) 36 stw %r3,0(%r4) 37 mtlr %r10 38#else 39 lis %r4,_C_LABEL(errno)@ha 40 stw %r3,_C_LABEL(errno)@l(%r4) 41#endif /* PIC */ 42#endif /* _REENTRANT */ 43 li %r3,-1 44 li %r4,-1 45 blr 46END(__cerror) 47