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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [sparc/] [libsys/] [syscallasm.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
#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 "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      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
   ??? Of course this scheme breaks down if we need to support 6 or more args.
60
 
61
   And of course the system calls aren't *really* reentrant.  The intent
62
   is to exercise the reentrancy framework rather than provide/claim
63
   real reentrancy for this port.
64
*/
65
 
66
#define defsyscall_r(name, n) \
67
        TEXT_SECTION ;                  \
68
        ALIGN (4) ;                     \
69
        GLOBAL (ASM_SYMBOL (name)) ;    \
70
ASM_SYMBOL (name):                      \
71
        mov     n,%g1 ;                 \
72
        mov     %o0,%o5 ;               \
73
        mov     %o1,%o0 ;               \
74
        mov     %o2,%o1 ;               \
75
        mov     %o3,%o2 ;               \
76
        mov     %o4,%o3 ;               \
77
        ta      SYSCALL_TRAP ;          \
78
        bcc     noerr ;                 \
79
        sethi   %hi (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ;       \
80
        or      %g1,%lo (ASM_PRIVATE_SYMBOL (cerror_r)),%g1 ;   \
81
        jmpl    %g1+%g0,%g0 ;           \
82
        mov     %o5,%o1 ;               \
83
noerr:                                  \
84
        jmpl    %o7+8,%g0 ;             \
85
        nop
86
 
87
#define seterrno() \
88
        sethi   %hi (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;         \
89
        or      %g1,%lo (ASM_PRIVATE_SYMBOL (cerror)),%g1 ;     \
90
        jmpl    %g1+%g0,%g0 ;           \
91
        nop
92
 
93
#endif /* _SYSCALLASM_H_ */

powered by: WebSVN 2.1.0

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