1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22! 23! "@(#)SYS.h 1.14 88/02/08" 24! Copyright (c) 1986, 1996 by Sun Microsystems, Inc. 25! All rights reserved. 26! 27 28#include <sys/syscall.h> 29#include <machine/asm_linkage.h> 30#include "PIC.h" 31 32#define SV_ERESTART 91 /* ERESTART is returned by the kernel for 33 restartable system calls */ 34 35#define WINDOWSIZE (16*4) 36 37 .global .cerror 38 39#define SYSCALL(x) \ 40 ENTRY(x); \ 41 mov SYS_/**/x, %g1; \ 42 t 8; \ 43 CERROR(o5) 44 45#define BSDSYSCALL(x) \ 46 ENTRY(_/**/x); \ 47 mov SYS_/**/x, %g1; \ 48 t 8; \ 49 CERROR(o5) 50 51/* 52 * SYSREENTRY provides the entry sequence for restartable system calls. 53 */ 54#define SYSREENTRY(x) \ 55 ENTRY(x); \ 56 st %o0,[%sp+68]; \ 57.restart_/**/x: 58 59#define PSEUDO(x, y) \ 60 ENTRY(x); \ 61 mov SYS_/**/y, %g1; \ 62 t 8; 63 64/* 65 * SYSCALL_RESTART provides the most common restartable system call sequence. 66 */ 67#define SYSCALL_RESTART(x) \ 68 SYSREENTRY(x); \ 69 mov SYS_/**/x, %g1; \ 70 t 8; \ 71 SYSRESTART(.restart_/**/x) 72 73/* 74 * SYSREENTRY provides the entry sequence for restartable system calls. 75 */ 76#define SYSREENTRY(x) \ 77 ENTRY(x); \ 78 st %o0,[%sp+68]; \ 79.restart_/**/x: 80 81/* 82 * SYSRESTART provides the error handling sequence for restartable 83 * system calls. 84 */ 85#ifdef PIC 86#define SYSRESTART(x) \ 87 bcc noerr; \ 88 cmp %o0, SV_ERESTART; \ 89 be,a x; \ 90 ld [%sp+68], %o0; \ 91 PIC_SETUP(o5); \ 92 ld [%o5 + .cerror], %o5; \ 93 jmp %o5; \ 94 .empty; \ 95noerr: nop ; 96#else 97#define SYSRESTART(x) \ 98 bcc noerr; \ 99 cmp %o0, SV_ERESTART; \ 100 be,a x; \ 101 ld [%sp+68], %o0; \ 102 ba .cerror; \ 103 .empty; \ 104noerr: nop ; 105#endif 106 107#define RET retl; nop; 108 109#ifdef PIC 110#define CERROR(free_reg) \ 111 bcc noerr; \ 112 PIC_SETUP(free_reg); \ 113 .empty; \ 114 ld [%free_reg+ .cerror],%free_reg; \ 115 jmp %free_reg; \ 116 .empty; \ 117noerr: nop; 118#else 119#define CERROR(free_reg) \ 120 bcc noerr; \ 121 .empty; \ 122 sethi %hi(.cerror), %free_reg;\ 123 or %free_reg, %lo(.cerror), %free_reg;\ 124 jmp %free_reg;\ 125 .empty;\ 126noerr: nop; 127#endif 128