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