OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [sparc64/] [sys/] [syscallasm.h] - Blame information for rev 148

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
#ifndef _SYSCALLASM_H_
2
#define _SYSCALLASM_H_
3
 
4
/*
5
 * This file defines the system calls for SPARC for the assembler.
6
 * Anything C-ish is not allowed in this file.
7
 * C files should include syscall.h.
8
 */
9
 
10
#include <sys/syscall.h>
11
 
12
/* Some macros for writing assember syscall stubs.  */
13
 
14
#ifdef __svr4__
15
#define TEXT_SECTION    .section ".text"
16
#define DATA_SECTION    .section ".data"
17
#define ALIGN(x)        .align x
18
#define GLOBAL(sym)     .global sym
19
#define WORD(x)         .long x
20
#define ASM_SYMBOL(name) name
21
#define ASM_PRIVATE_SYMBOL(name) _##name
22
#define SYSCALL_TRAP    8
23
#else
24
#define TEXT_SECTION    .text
25
#define DATA_SECTION    .data
26
#define ALIGN(x)        .align x
27
#define GLOBAL(sym)     .global sym
28
#define WORD(x)         .word x
29
#define ASM_SYMBOL(name) _##name
30
#define ASM_PRIVATE_SYMBOL(name) name
31
#define SYSCALL_TRAP    0
32
#endif
33
 
34
#define defsyscall(name, n) \
35
        TEXT_SECTION ;                  \
36
        ALIGN (4) ;                     \
37
        GLOBAL (ASM_SYMBOL (name)) ;    \
38
ASM_SYMBOL (name):                      \
39
        mov     n,%g1 ;                 \
40
        ta      %icc,SYSCALL_TRAP ;     \
41
        bcc     noerr ;                 \
42
        sethi   %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;         \
43
        or      %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;     \
44
        jmpl    %g1+%g0,%g0 ;           \
45
        nop ;                           \
46
noerr:                                  \
47
        jmpl    %o7+8,%g0 ;             \
48
        nop
49
 
50
/* Support for reentrant syscalls.  The "struct _reent *" arg is always the
51
   the first one.  After that we allow up to four additional args.  We could
52
   allow more, but that's all we need for now.
53
 
54
   It may seem inefficient to have the reent arg be the first one as it means
55
   copying all the other args into place (as opposed to making the reent arg
56
   the last one in which case there wouldn't be any copying).  I chose a clean
57
   design over an extra four instructions in a system call.  All other
58
   reentrant functions use the first arg this way.  */
59
 
60
#define defsyscall_r(name, n) \
61
        TEXT_SECTION ;                  \
62
        ALIGN (4) ;                     \
63
        GLOBAL (ASM_SYMBOL (name)) ;    \
64
ASM_SYMBOL (name):                      \
65
        mov     n,%g1 ;                 \
66
        mov     %o0,%o5 ;               \
67
        mov     %o1,%o0 ;               \
68
        mov     %o2,%o1 ;               \
69
        mov     %o3,%o2 ;               \
70
        mov     %o4,%o3 ;               \
71
        ta      %icc,SYSCALL_TRAP ;     \
72
        bcc     noerr ;                 \
73
        sethi   %hi (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ;       \
74
        or      %g1,%lo (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ;   \
75
        jmpl    %g1+%g0,%g0 ;           \
76
        mov     %o5,%o1 ;               \
77
noerr:                                  \
78
        jmpl    %o7+8,%g0 ;             \
79
        nop
80
 
81
#define seterrno() \
82
        sethi   %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;         \
83
        or      %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;     \
84
        jmpl    %g1+%g0,%g0 ;           \
85
        nop
86
 
87
#endif /* _SYSCALLASM_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.