xref: /netbsd-src/lib/libc/arch/arm/sys/cerror.S (revision d0dcd65c8818fac5646aa0b4c0c3e8f53c4c0514)
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