diff options
Diffstat (limited to 'libgloss/m68k/bdm-semihost.h')
-rw-r--r-- | libgloss/m68k/bdm-semihost.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libgloss/m68k/bdm-semihost.h b/libgloss/m68k/bdm-semihost.h new file mode 100644 index 000000000..4d6e2b9cc --- /dev/null +++ b/libgloss/m68k/bdm-semihost.h @@ -0,0 +1,57 @@ +/* + * bdm semihosting support. + * + * Copyright (c) 2006 CodeSourcery Inc + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* Semihosting uses a user trap handler containing a HALT + instruction. This wakes the debugger to perform some action. */ + +/* This is the semihosting trap hander */ +#define BDM_TRAPNUM 15 + +/* This register holds the function enumeration for a semihosting + command. */ +#define BDM_FUNC_REG "d0" + +/* This register holds the argument for the semihosting call. For most + functions, this is a pointer to a block of memory that holds the input + and output parameters for the remote file i/o operation. */ +#define BDM_ARG_REG "d1" + +/* Codes for BDM_FUNC_REG. */ + +#define BDM_EXIT 0 +#define BDM_PUTCHAR 1 /* Obsolete */ +#define BDM_OPEN 2 +#define BDM_CLOSE 3 +#define BDM_READ 4 +#define BDM_WRITE 5 +#define BDM_LSEEK 6 +#define BDM_RENAME 7 +#define BDM_UNLINK 8 +#define BDM_STAT 9 +#define BDM_FSTAT 10 +#define BDM_GETTIMEOFDAY 11 +#define BDM_ISATTY 12 +#define BDM_SYSTEM 13 + +/* Here is the macro that generates the trap. */ + +#define BDM_TRAP(func, arg) \ + __asm__ __volatile__ ("move.l %0,%/" BDM_ARG_REG "\n" \ + "moveq %1,%/" BDM_FUNC_REG "\n" \ + "trap %2" \ + :: "rmi" (arg), "n" (func), "n" (BDM_TRAPNUM) \ + : BDM_FUNC_REG,BDM_ARG_REG,"memory") + |