libc/libgloss/m68k/bdm-semihost.h

58 lines
1.8 KiB
C

/*
* 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")