From owner-svn-src-projects@FreeBSD.ORG Wed Nov 12 13:19:32 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id B5900F37; Wed, 12 Nov 2014 13:19:32 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A1676E66; Wed, 12 Nov 2014 13:19:32 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sACDJWQS070465; Wed, 12 Nov 2014 13:19:32 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id sACDJVs3070455; Wed, 12 Nov 2014 13:19:31 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <201411121319.sACDJVs3070455@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Wed, 12 Nov 2014 13:19:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r274431 - in projects/arm64: lib/libc/arm64 lib/libc/arm64/sys sys/arm64/arm64 sys/arm64/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Nov 2014 13:19:32 -0000 Author: andrew Date: Wed Nov 12 13:19:30 2014 New Revision: 274431 URL: https://svnweb.freebsd.org/changeset/base/274431 Log: Set the C bit in spsr to indicate when syscalls fail, and use it to set errno on failure. Added: projects/arm64/lib/libc/arm64/sys/cerror.S - copied, changed from r274430, projects/arm64/sys/arm64/include/asm.h Modified: projects/arm64/lib/libc/arm64/SYS.h projects/arm64/lib/libc/arm64/sys/Makefile.inc projects/arm64/sys/arm64/arm64/vm_machdep.c projects/arm64/sys/arm64/include/asm.h Modified: projects/arm64/lib/libc/arm64/SYS.h ============================================================================== --- projects/arm64/lib/libc/arm64/SYS.h Wed Nov 12 13:19:25 2014 (r274430) +++ projects/arm64/lib/libc/arm64/SYS.h Wed Nov 12 13:19:30 2014 (r274431) @@ -48,6 +48,7 @@ END(__sys_##name) ENTRY(__sys_##name); \ WEAK_REFERENCE(__sys_##name, _##name); \ _SYSCALL(name); \ + b.cs PIC_SYM(cerror, PLT); \ ret; \ END(__sys_##name) @@ -56,6 +57,7 @@ ENTRY(__sys_##name); \ WEAK_REFERENCE(__sys_##name, name); \ WEAK_REFERENCE(__sys_##name, _##name); \ _SYSCALL(name); \ + b.cs PIC_SYM(cerror, PLT); \ ret; \ END(__sys_##name) Modified: projects/arm64/lib/libc/arm64/sys/Makefile.inc ============================================================================== --- projects/arm64/lib/libc/arm64/sys/Makefile.inc Wed Nov 12 13:19:25 2014 (r274430) +++ projects/arm64/lib/libc/arm64/sys/Makefile.inc Wed Nov 12 13:19:30 2014 (r274431) @@ -2,7 +2,8 @@ SRCS+= __vdso_gettc.c -#MDASM= Ovfork.S brk.S cerror.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S syscall.S +#MDASM= Ovfork.S brk.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S syscall.S +MDASM= cerror.S # Don't generate default code for these syscalls: NOASM= break.o exit.o getlogin.o openbsd_poll.o sstk.o vfork.o yield.o Copied and modified: projects/arm64/lib/libc/arm64/sys/cerror.S (from r274430, projects/arm64/sys/arm64/include/asm.h) ============================================================================== --- projects/arm64/sys/arm64/include/asm.h Wed Nov 12 13:19:25 2014 (r274430, copy source) +++ projects/arm64/lib/libc/arm64/sys/cerror.S Wed Nov 12 13:19:30 2014 (r274431) @@ -25,26 +25,17 @@ * */ -#ifndef _MACHINE_ASM_H_ -#define _MACHINE_ASM_H_ +#include +__FBSDID("$FreeBSD$"); -#undef __FBSDID -#if !defined(lint) && !defined(STRIP_FBSDID) -#define __FBSDID(s) .ident s -#else -#define __FBSDID(s) /* nothing */ -#endif - -#define _C_LABEL(x) x - -#define ENTRY(sym) \ - .text; .globl sym; .align 2; sym: -#define END(sym) .size sym, . - sym - -#define WEAK_REFERENCE(sym, alias) \ - .weak alias; \ - .set alias,sym - -#define UINT64_C(x) (x) - -#endif /* _MACHINE_ASM_H_ */ +ENTRY(cerror) + sub sp, sp, #16 + stp x0, lr, [sp] + bl PIC_SYM(_C_LABEL(__error), PLT) + ldp x1, lr, [sp] + str x1, [x0] + movn x0, #0 + movn x1, #0 + add sp, sp, #16 + ret +END(cerror) Modified: projects/arm64/sys/arm64/arm64/vm_machdep.c ============================================================================== --- projects/arm64/sys/arm64/arm64/vm_machdep.c Wed Nov 12 13:19:25 2014 (r274430) +++ projects/arm64/sys/arm64/arm64/vm_machdep.c Wed Nov 12 13:19:30 2014 (r274431) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -115,6 +116,7 @@ cpu_set_syscall_retval(struct thread *td case 0: frame->tf_x[0] = td->td_retval[0]; frame->tf_x[1] = td->td_retval[1]; + frame->tf_spsr &= ~PSR_C; /* carry bit */ break; case ERESTART: frame->tf_elr -= 4; @@ -122,6 +124,7 @@ cpu_set_syscall_retval(struct thread *td case EJUSTRETURN: break; default: + frame->tf_spsr |= PSR_C; /* carry bit */ frame->tf_x[0] = error; break; } Modified: projects/arm64/sys/arm64/include/asm.h ============================================================================== --- projects/arm64/sys/arm64/include/asm.h Wed Nov 12 13:19:25 2014 (r274430) +++ projects/arm64/sys/arm64/include/asm.h Wed Nov 12 13:19:30 2014 (r274431) @@ -47,4 +47,10 @@ #define UINT64_C(x) (x) +#if defined(PIC) +#define PIC_SYM(x,y) x ## @ ## y +#else +#define PIC_SYM(x,y) x +#endif + #endif /* _MACHINE_ASM_H_ */