215 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Copyright (c) 2006 CodeSourcery Inc
 | 
						|
Copyright (c) 2019 Mentor Graphics
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
 | 
						|
m68k Semihosting Protocol
 | 
						|
-------------------------
 | 
						|
 | 
						|
The instruction used to trigger a semihosting request depends on the
 | 
						|
m68k processor variant.  On ColdFire, "halt" is used; on other processors
 | 
						|
(which don't implement "halt"), "bkpt #0" may be used.
 | 
						|
 | 
						|
Additionally, a special code sequence is used to distinguish
 | 
						|
semihosting requests from other uses of the instruction used to
 | 
						|
trigger it.  The semihosting instruction is immediately preceded by a
 | 
						|
"nop" aligned to a 4-byte boundary, and followed by an invalid sentinel
 | 
						|
instruction 0x4e7bf000 ("movec %sp,0").  The debug agent handling the
 | 
						|
semihosting request must adjust the program counter to skip over the
 | 
						|
sentinel instruction before continuing execution.
 | 
						|
 | 
						|
Registers d0 and d1 are used to pass parameters to the semihosting call.
 | 
						|
d0 contains a request code.  d1 is typically a pointer to a 4-longword
 | 
						|
parameter block, except for the exit and simulator initialization operations
 | 
						|
where it is an immediate integer value.
 | 
						|
 | 
						|
The result of the operation is returned in the first word of the
 | 
						|
parameter block.  The second word is used to return an errno value,
 | 
						|
encoded per the "Errno Values" section of the RSP documentation in the
 | 
						|
GDB User Manual.
 | 
						|
 | 
						|
The supported d0 request codes are:
 | 
						|
 | 
						|
#define HOSTED_EXIT  0
 | 
						|
 | 
						|
  Terminate program execution; send a 'W' stop reply to GDB.
 | 
						|
 | 
						|
  d1 contains the exit code, as an immediate integer rather than indirectly
 | 
						|
  in a parameter block.  This semihosting request isn't expected to return.
 | 
						|
 | 
						|
#define HOSTED_INIT_SIM 1
 | 
						|
 | 
						|
  Do simulator initialization, such as allocation of memory for the
 | 
						|
  stack and heap.  This semihosting request may be triggered from
 | 
						|
  startup code (crt0.S).
 | 
						|
 | 
						|
  On entry to the semihosting request, d1 contains the default initial
 | 
						|
  stack pointer as an immediate value, typically the high end of
 | 
						|
  memory defined by the linker script.  If the simulator needs to
 | 
						|
  dynamically allocate memory for the stack, it should set both d1 and
 | 
						|
  sp (a7) to the new stack pointer value.
 | 
						|
 | 
						|
#define HOSTED_OPEN 2
 | 
						|
 | 
						|
  Open file; 'Fopen' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] pointer to filename
 | 
						|
  [1] filename length
 | 
						|
  [2] open flags, encoded per the GDB RSP documentation
 | 
						|
  [3] mode, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] file descriptor or -1 on error
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_CLOSE 3
 | 
						|
 | 
						|
  Close file; 'Fclose' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_READ 4
 | 
						|
 | 
						|
  Read from file; 'Fread' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
  [1] pointer to buffer
 | 
						|
  [2] buffer size
 | 
						|
  
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] number of bytes read
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_WRITE 5
 | 
						|
 | 
						|
  Write to file; 'Fwrite' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
  [1] pointer to buffer
 | 
						|
  [2] byte count
 | 
						|
  
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] number of bytes written
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_LSEEK 6
 | 
						|
 | 
						|
  File seek; 'Flseek' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
  [1] high word of 64-bit offset
 | 
						|
  [2] low word of 64-bit offset
 | 
						|
  [3] seek flag, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] high word of 64-bit result
 | 
						|
  [1] low word of 64-bit result
 | 
						|
  [2] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_RENAME 7
 | 
						|
 | 
						|
  File rename; 'Frename' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] oldname pointer
 | 
						|
  [1] oldname length
 | 
						|
  [2] newname pointer
 | 
						|
  [3] newname length
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_UNLINK 8
 | 
						|
 | 
						|
  File unlink/delete; 'Funlink' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] filename pointer
 | 
						|
  [1] filename length
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_STAT 9
 | 
						|
 | 
						|
  File information; 'Fstat' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] filename pointer
 | 
						|
  [1] filename length
 | 
						|
  [2] pointer to stat buf, using the structure definition in the GDB RSP
 | 
						|
      documentation 
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_FSTAT 10
 | 
						|
 | 
						|
  File information; 'Ffstat' GDB fileio request.
 | 
						|
  
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
  [1] pointer to stat buf, using the structure definition in the GDB RSP
 | 
						|
      documentation 
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_GETTIMEOFDAY 11
 | 
						|
 | 
						|
  Get current time; 'Fgettimeofday' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] timeval pointer, using the structure definition in the GDB RSP
 | 
						|
      documentation
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_ISATTY 12
 | 
						|
 | 
						|
 Return true if the file descriptor is the GDB console; 'Fisatty' GDB fileio
 | 
						|
 request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] file descriptor
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 | 
						|
 | 
						|
#define HOSTED_SYSTEM 13
 | 
						|
 | 
						|
  System call; 'Fsystem' GDB fileio request.
 | 
						|
 | 
						|
  d1 points to a parameter block containing:
 | 
						|
  [0] command pointer
 | 
						|
  [1] command length
 | 
						|
 | 
						|
  Return values in parameter block:
 | 
						|
  [0] return status
 | 
						|
  [1] errno, encoded per the GDB RSP documentation
 |