summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m32c/m32cbsp/console/syscalls.S
blob: f4cabac940ebac4df2018d136aeee6163f9089bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
 *  System call support for simulator in gdb.
 *  Adapted from newlib 1.16.0.
 */

#define SYS_exit        1
#define SYS_open        2
#define SYS_close       3
#define SYS_read        4
#define SYS_write       5
#define SYS_lseek       6
#define SYS_unlink      7
#define SYS_getpid      8
#define SYS_kill        9
#define SYS_fstat       10
#define SYS_sbrk        11

#define POUND #
#define SYSCALL(N) mov.b POUND N,0x400

#define S(n) _sys_##n: .global _sys_##n | SYSCALL(SYS_##n) | rts

S(write)
S(exit)
S(sbrk)

       .global _abort
_abort:
        /* This is for debuggers.  The simulator stops here too. */
        brk

        /* Else, fall back on the simulator's "kill me" option.  */
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
        mov.w   #42,r1
#else
        mov.w   #42,r0
#endif

        SYSCALL(SYS_kill)

        /* Else, exit. */
        jmp.a   __exit