1*d0dcd65cSjoerg/* $NetBSD: cerror.S,v 1.13 2013/11/30 20:20:42 joerg Exp $ */ 25aefcfdcSbjh21 35aefcfdcSbjh21/*- 45aefcfdcSbjh21 * Copyright (c) 1990 The Regents of the University of California. 55aefcfdcSbjh21 * All rights reserved. 65aefcfdcSbjh21 * 75aefcfdcSbjh21 * Redistribution and use in source and binary forms, with or without 85aefcfdcSbjh21 * modification, are permitted provided that the following conditions 95aefcfdcSbjh21 * are met: 105aefcfdcSbjh21 * 1. Redistributions of source code must retain the above copyright 115aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer. 125aefcfdcSbjh21 * 2. Redistributions in binary form must reproduce the above copyright 135aefcfdcSbjh21 * notice, this list of conditions and the following disclaimer in the 145aefcfdcSbjh21 * documentation and/or other materials provided with the distribution. 15eb7c1594Sagc * 3. Neither the name of the University nor the names of its contributors 165aefcfdcSbjh21 * may be used to endorse or promote products derived from this software 175aefcfdcSbjh21 * without specific prior written permission. 185aefcfdcSbjh21 * 195aefcfdcSbjh21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 205aefcfdcSbjh21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 215aefcfdcSbjh21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 225aefcfdcSbjh21 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 235aefcfdcSbjh21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 245aefcfdcSbjh21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 255aefcfdcSbjh21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 265aefcfdcSbjh21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 275aefcfdcSbjh21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 285aefcfdcSbjh21 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 295aefcfdcSbjh21 * SUCH DAMAGE. 305aefcfdcSbjh21 * 315aefcfdcSbjh21 * from: @(#)cerror.s 5.1 (Berkeley) 4/23/90 325aefcfdcSbjh21 */ 335aefcfdcSbjh21 345aefcfdcSbjh21#include "SYS.h" 355aefcfdcSbjh21 362a674d4fSmattENTRY_NP(CERROR) 375aefcfdcSbjh21#ifdef _REENTRANT 38cb89adbbSmatt#if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__) 392a674d4fSmatt .fnstart 402a674d4fSmatt .cfi_startproc 412a674d4fSmatt#endif 422a674d4fSmatt push {r4, lr} 43cb89adbbSmatt#if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__) 442a674d4fSmatt .save {r4, lr} 452a674d4fSmatt .cfi_def_cfa_offset 8 462a674d4fSmatt .cfi_offset 14, -4 472a674d4fSmatt .cfi_offset 4, -8 482a674d4fSmatt#endif 495aefcfdcSbjh21 mov r4, r0 50*d0dcd65cSjoerg bl PLT_SYM(_C_LABEL(__errno)) 515aefcfdcSbjh21 str r4, [r0] 522a674d4fSmatt#ifdef __thumb__ 532a674d4fSmatt movs r0, #0 542a674d4fSmatt mvns r0, r0 555aefcfdcSbjh21#else 562a674d4fSmatt mvn r0, #0 572a674d4fSmatt#endif 582a674d4fSmatt mov r1, r0 592a674d4fSmatt pop {r4, pc} 60cb89adbbSmatt#if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__) 612a674d4fSmatt .cfi_endproc 622a674d4fSmatt .fnend 632a674d4fSmatt#endif 642a674d4fSmatt#else /* !_REENTRANT */ 65cb89adbbSmatt#if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__) 662a674d4fSmatt .fnstart 672a674d4fSmatt .cfi_startproc 682a674d4fSmatt#endif 694d12bfcdSjoerg#ifdef __PIC__ 705aefcfdcSbjh21 /* Setup the GOT */ 711b907e18Sthorpej ldr r3, .Lgot 722a674d4fSmatt add r3, r3, pc /* pc = &.LPIC0 */ 731b907e18Sthorpej ldr r1, .Lerrno 742a674d4fSmatt.LPIC0: ldr r1, [r3, r1] 755aefcfdcSbjh21#else 761b907e18Sthorpej ldr r1, .Lerrno 774d12bfcdSjoerg#endif /* __PIC__ */ 785aefcfdcSbjh21 str r0, [r1] 792a674d4fSmatt#ifdef __thumb__ 802a674d4fSmatt movs r0, #0 812a674d4fSmatt mvns r0, r0 822a674d4fSmatt#else 832a674d4fSmatt mvn r0, #0 842a674d4fSmatt#endif /* __thumb__ */ 852a674d4fSmatt mov r1, r0 86ed6e0e9eSrearnsha RET 87cb89adbbSmatt#if defined(__ARM_EABI__) && defined(__UNWIND_TABLES__) 882a674d4fSmatt .cfi_endproc 892a674d4fSmatt .fnend 902a674d4fSmatt#endif 915aefcfdcSbjh21 924d12bfcdSjoerg#ifdef __PIC__ 935aefcfdcSbjh21 .align 0 941b907e18Sthorpej.Lgot: 952a674d4fSmatt .word _C_LABEL(_GLOBAL_OFFSET_TABLE_) - .LPIC0 964d12bfcdSjoerg#endif /* __PIC__ */ 975aefcfdcSbjh21 .globl _C_LABEL(errno) 985aefcfdcSbjh21 991b907e18Sthorpej.Lerrno: 1005feec233Smatt .word PIC_SYM(_C_LABEL(errno), GOT) 1015aefcfdcSbjh21#endif /* _REENTRANT */ 1022a674d4fSmattEND(CERROR) 103