Add semihosting docs for nios2 and m68k
Author: Sandra Loosemore <sandra@codesourcery.com> Date: Wed Mar 13 20:22:16 2019 -0700 Add semihosting documentation for nios2 and m68k. QEMU maintainers have asked for a specification of the nios2 semihosting interface. Since it's essentially a copy of the m68k implementation, this patch adds a document for that target as well.
This commit is contained in:
parent
004d8adfa2
commit
1cff36cdd7
|
@ -0,0 +1,214 @@
|
||||||
|
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
|
|
@ -0,0 +1,197 @@
|
||||||
|
Copyright (c) 2006 CodeSourcery Inc
|
||||||
|
Copyright (c) 2018, 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.
|
||||||
|
|
||||||
|
|
||||||
|
Nios II Semihosting Protocol
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The runtime (libgloss) indicates a semihosting request to the debug
|
||||||
|
agent by issuing a "break 1" instruction. r4 and r5 are used to pass
|
||||||
|
parameters per the normal C ABI on nios2.
|
||||||
|
|
||||||
|
r4 contains a request code. r5 is typically a pointer to a 4-word
|
||||||
|
parameter block, except for the exit operation 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 r4 request codes are:
|
||||||
|
|
||||||
|
#define HOSTED_EXIT 0
|
||||||
|
|
||||||
|
Terminate program execution; send a 'W' stop reply to GDB.
|
||||||
|
|
||||||
|
r5 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
|
||||||
|
|
||||||
|
Reserved/unimplemented.
|
||||||
|
|
||||||
|
#define HOSTED_OPEN 2
|
||||||
|
|
||||||
|
Open file; 'Fopen' GDB fileio request.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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.
|
||||||
|
|
||||||
|
r5 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
|
Loading…
Reference in New Issue