Changeset View
Changeset View
Standalone View
Standalone View
lib/libsys/sparc64/SYS.h
- This file was copied from lib/libc/i386/SYS.h.
Show All 26 Lines | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | * | ||||
* @(#)SYS.h 5.5 (Berkeley) 5/7/91 | * @(#)SYS.h 5.5 (Berkeley) 5/7/91 | ||||
* from: FreeBSD: src/lib/libc/i386/SYS.h,v 1.20 2001/01/29 | |||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#include <sys/syscall.h> | #include <sys/syscall.h> | ||||
#include <machine/asm.h> | #include <machine/asm.h> | ||||
#include <machine/utrap.h> | |||||
#define SYSCALL(name) ENTRY(__sys_##name); \ | #define ERROR() \ | ||||
WEAK_REFERENCE(__sys_##name, name); \ | mov %o7, %g1 ; \ | ||||
WEAK_REFERENCE(__sys_##name, _##name); \ | call HIDENAME(cerror) ; \ | ||||
mov $SYS_##name,%eax; KERNCALL; \ | mov %g1, %o7 | ||||
jb HIDENAME(cerror) | |||||
#define RSYSCALL(name) SYSCALL(name); ret; END(__sys_##name) | #define _SYSENTRY(x) \ | ||||
ENTRY(__CONCAT(__sys_,x)) ; \ | |||||
.weak CNAME(x) ; \ | |||||
.type CNAME(x),@function ; \ | |||||
.set CNAME(x),CNAME(__CONCAT(__sys_,x)) ; \ | |||||
.weak CNAME(__CONCAT(_,x)) ; \ | |||||
.type CNAME(__CONCAT(_,x)), @function ; \ | |||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)) | |||||
#define PSEUDO(name) ENTRY(__sys_##name); \ | #define _SYSEND(x) \ | ||||
WEAK_REFERENCE(__sys_##name, _##name); \ | .size CNAME(__CONCAT(__sys_,x)), . - CNAME(__CONCAT(__sys_,x)) ; \ | ||||
mov $SYS_##name,%eax; KERNCALL; \ | .size CNAME(__CONCAT(_,x)), . - CNAME(__CONCAT(__sys_,x)) ; \ | ||||
jb HIDENAME(cerror); ret; \ | .size CNAME(__CONCAT(,x)), . - CNAME(__CONCAT(__sys_,x)) | ||||
END(__sys_##name) | |||||
/* gas messes up offset -- although we don't currently need it, do for BCS */ | #define _SYSCALL(x) \ | ||||
#define LCALL(x,y) .byte 0x9a ; .long y; .word x | mov __CONCAT(SYS_,x), %g1 ; \ | ||||
ta %xcc, ST_SYSCALL ; \ | |||||
bcc,a,pt %xcc, 1f ; \ | |||||
nop ; \ | |||||
ERROR() ; \ | |||||
1: | |||||
#define KERNCALL int $0x80 | #define RSYSCALL(x) \ | ||||
_SYSENTRY(x) ; \ | |||||
_SYSCALL(x) ; \ | |||||
retl ; \ | |||||
nop ; \ | |||||
_SYSEND(x) | |||||
#define PSEUDO(x) \ | |||||
ENTRY(__CONCAT(__sys_,x)) ; \ | |||||
.weak CNAME(__CONCAT(_,x)) ; \ | |||||
.type CNAME(__CONCAT(_,x)),@function ; \ | |||||
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)) ; \ | |||||
_SYSCALL(x) ; \ | |||||
retl ; \ | |||||
nop ; \ | |||||
.size CNAME(__CONCAT(__sys_,x)), . - CNAME(__CONCAT(__sys_,x)) ; \ | |||||
.size CNAME(__CONCAT(_,x)), . - CNAME(__CONCAT(__sys_,x)) |