58 lines
1.8 KiB
C
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")
|
||
|
|