| 1 | /* | 
|---|
| 2 |  | 
|---|
| 3 | Copyright (c) 2011 Red Hat Incorporated. | 
|---|
| 4 | All rights reserved. | 
|---|
| 5 |  | 
|---|
| 6 | Redistribution and use in source and binary forms, with or without  | 
|---|
| 7 | modification, are permitted provided that the following conditions are met:  | 
|---|
| 8 |  | 
|---|
| 9 |     Redistributions of source code must retain the above copyright  | 
|---|
| 10 |     notice, this list of conditions and the following disclaimer. | 
|---|
| 11 |  | 
|---|
| 12 |     Redistributions in binary form must reproduce the above copyright | 
|---|
| 13 |     notice, this list of conditions and the following disclaimer in the | 
|---|
| 14 |     documentation and/or other materials provided with the distribution. | 
|---|
| 15 |  | 
|---|
| 16 |     The name of Red Hat Incorporated may not be used to endorse  | 
|---|
| 17 |     or promote products derived from this software without specific  | 
|---|
| 18 |     prior written permission. | 
|---|
| 19 |  | 
|---|
| 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"  | 
|---|
| 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  | 
|---|
| 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 
|---|
| 23 | DISCLAIMED.  IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY | 
|---|
| 24 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 
|---|
| 25 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
|---|
| 26 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  | 
|---|
| 27 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|---|
| 28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
|---|
| 29 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  | 
|---|
| 30 |  | 
|---|
| 31 | */ | 
|---|
| 32 |  | 
|---|
| 33 | #include "syscall.h" | 
|---|
| 34 | #include "vregs.h" | 
|---|
| 35 |  | 
|---|
| 36 | #define SYS__exit  SYS_exit | 
|---|
| 37 |  | 
|---|
| 38 |         .macro syscall_body  number | 
|---|
| 39 |          /* The RL78 doesn't really have an "interrupt" upcode, just | 
|---|
| 40 |             BRK, which we emulate exactly.  We use the STOP opcode, | 
|---|
| 41 |             which is a breakpoint in the simulator.  */ | 
|---|
| 42 |         mov     A, #\number | 
|---|
| 43 |         stop | 
|---|
| 44 |         ret | 
|---|
| 45 |         .endm | 
|---|
| 46 |        | 
|---|
| 47 |         .macro do_syscall  name number | 
|---|
| 48 | __\name: | 
|---|
| 49 |         .global __\name | 
|---|
| 50 | _\name: | 
|---|
| 51 |         .weak _\name | 
|---|
| 52 |         syscall_body \number | 
|---|
| 53 |         .endm | 
|---|
| 54 |  | 
|---|
| 55 |    .macro       syscall_returns name number | 
|---|
| 56 | __\name: | 
|---|
| 57 |         .global __\name | 
|---|
| 58 | _\name: | 
|---|
| 59 |         .weak _\name | 
|---|
| 60 |         mov     r8, #\number | 
|---|
| 61 |         ret | 
|---|
| 62 |         .endm | 
|---|
| 63 |  | 
|---|
| 64 | #define S(name)         do_syscall      name, SYS_##name | 
|---|
| 65 | #define SYSCALL(number) syscall_body    number | 
|---|
| 66 | #define ERR(name)       syscall_returns name, -1 | 
|---|
| 67 | #define OK(name)        syscall_returns name, 0 | 
|---|
| 68 | #define RET(name,val)   syscall_returns name, val | 
|---|