diff options
Diffstat (limited to 'REORG.TODO/sysdeps/unix/sh/sysdep.S')
-rw-r--r-- | REORG.TODO/sysdeps/unix/sh/sysdep.S | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/unix/sh/sysdep.S b/REORG.TODO/sysdeps/unix/sh/sysdep.S new file mode 100644 index 0000000000..85298581a0 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sh/sysdep.S @@ -0,0 +1,116 @@ +/* Copyright (C) 1999-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> +#define _ERRNO_H +#include <bits/errno.h> + +ENTRY(__syscall_error) +#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN + /* We translate the system's EWOULDBLOCK error into EAGAIN. + The GNU C library always defines EWOULDBLOCK==EAGAIN. + EWOULDBLOCK_sys is the original number. */ + mov.l .L1, r1 + cmp/eq r1, r0 + bf skip + nop + mov.l .L2, r0 +skip: +#endif + /* Store it in errno... */ +#ifndef SHARED +#ifndef _LIBC_REENTRANT + mov.l .L3, r1 + mov.l r0, @r1 +#else + mov.l .L3, r1 + sts.l pr, @-r15 + cfi_adjust_cfa_offset (4) + cfi_rel_offset (pr, 0) + mov.l r0, @-r15 + cfi_adjust_cfa_offset (4) + jsr @r1 + nop + mov.l @r15+, r1 + cfi_adjust_cfa_offset (-4) + lds.l @r15+, pr + cfi_adjust_cfa_offset (-4) + cfi_restore (pr) + mov.l r1, @r0 +#endif +#else + mov.l r12, @-r15 + cfi_adjust_cfa_offset (4) + cfi_rel_offset (r12, 0) +#ifndef _LIBC_REENTRANT + mov r0, r2 + mov.l 0f, r12 + mova 0f, r0 + add r0, r12 + mov.l .L3, r0 + mov.l @(r0,r12), r1 + mov.l r2, @r1 +#else + mov.l r0, @-r15 + cfi_adjust_cfa_offset (4) + sts.l pr, @-r15 + cfi_adjust_cfa_offset (4) + cfi_rel_offset (pr, 0) + mov.l 0f, r12 + mova 0f, r0 + add r0, r12 + mov.l .L3, r1 + mova .L3, r0 + add r0, r1 + jsr @r1 + nop + lds.l @r15+, pr + cfi_adjust_cfa_offset (-4) + cfi_restore (pr) + mov.l @r15+, r1 + cfi_adjust_cfa_offset (-4) + mov.l r1, @r0 +#endif + mov.l @r15+, r12 + cfi_adjust_cfa_offset (-4) + cfi_restore (r12) +#endif + /* And just kick back a -1. */ + rts + mov #-1, r0 + + .align 2 +#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN +.L1: .long EWOULDBLOCK_sys +.L2: .long EAGAIN +#endif +#ifndef SHARED +#ifndef _LIBC_REENTRANT +.L3: .long C_SYMBOL_NAME(errno) +#else +.L3: .long C_SYMBOL_NAME(__errno_location) +#endif +#else +0: + .long _GLOBAL_OFFSET_TABLE_ +#ifndef _LIBC_REENTRANT +.L3: .long C_SYMBOL_NAME(errno@GOT) +#else +.L3: .long C_SYMBOL_NAME(__errno_location@PLT) +#endif +#endif +END(__syscall_error) |