diff options
author | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-17 22:48:54 +0000 |
---|---|---|
committer | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-17 22:48:54 +0000 |
commit | 03261851a10dd2d6900a0a00a7515a0a46fb5d76 (patch) | |
tree | 7c22ac6cbbc99fd5cd1b5426853be8d4fd7bfcf1 /libgloss/m32r/trapmon0.c | |
parent | fae4c299f14fc23e2829c8656992eba21f79242a (diff) | |
download | cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.tar.gz cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.tar.bz2 cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.zip |
20000317 sourceware import
Diffstat (limited to 'libgloss/m32r/trapmon0.c')
-rw-r--r-- | libgloss/m32r/trapmon0.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libgloss/m32r/trapmon0.c b/libgloss/m32r/trapmon0.c new file mode 100644 index 000000000..44bf6a586 --- /dev/null +++ b/libgloss/m32r/trapmon0.c @@ -0,0 +1,53 @@ +/* + * Mon2000 Trap handler (syscall interface). + * + * This trap handler is linked into the mon2000 libgloss (libmon). + */ +#include <reent.h> +#include "syscall.h" + +int __trap0 (int function, int p1, int p2, int p3, struct _reent *r) +{ + int rc = 0; + + switch (function) { + case SYS_exit: + /* loop so GDB can't go past system exit call */ + while (1) { + asm volatile (" + ldi r0, #0 + trap #15 ; return control to Mon2000"); + } + break; + + case SYS_write: + { + int i; + + for( i=0; i<p3; i++ ) { + asm volatile (" + ldi r0, #2 + ldi r1, #15 ; load Ctrl-O (ASCII 15) + trap #15 ; write Ctrl-O for quoting purposes" ); + + asm volatile (" + ldi r0, #2 + ldb r1, %0 + trap #15 ; write character to console" + : /* no outputs */ + : "m" (((char*)p2)[i])); + } + + rc = p3; /* return number of chars written */ + break; + } + + default: + rc = 0; + break; + } + + return rc; +} + + |