From: Sandra Loosemore <sandra@codesourcery.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>, Marek Vasut <marex@denx.de>
Subject: Re: [Qemu-devel] [PATCH v5 2/2] Add Nios II semihosting support.
Date: Thu, 7 Mar 2019 20:13:26 -0700 [thread overview]
Message-ID: <7d4097aa-4888-82f6-3e4e-eeeb8de9f55b@codesourcery.com> (raw)
In-Reply-To: <CAFEAcA-Ocow8GzPCPO=346hnc4CZ6M02TwVp-e6G2EjY5-FESQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 669 bytes --]
On 3/7/19 7:58 AM, Peter Maydell wrote:
> On Wed, 13 Feb 2019 at 04:02, Sandra Loosemore <sandra@codesourcery.com> wrote:
>>
>> This patch adds support for libgloss semihosting to Nios II bare-metal
>> emulation.
>>
>> Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
>> Signed-off-by: Julian Brown <julian@codesourcery.com>
>
> Do you have a link to the spec that defines this semihosting
> ABI, please ?
Well, I just wrote some derived from the comments in the libgloss
sources; see the attachment. :-)
FWIW this is pretty much a direct copy of the m68k semihosting protocol,
which CodeSourcery contributed ages ago to both libgloss and qemu.
-Sandra
[-- Attachment #2: nios2-semi.txt --]
[-- Type: text/plain, Size: 4776 bytes --]
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
next prev parent reply other threads:[~2019-03-08 3:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-13 3:45 [Qemu-devel] [PATCH v5 0/2] Nios II generic board config and semihosting Sandra Loosemore
2019-02-13 3:45 ` [Qemu-devel] [PATCH v5 1/2] Add generic Nios II board Sandra Loosemore
2019-03-07 14:57 ` Peter Maydell
2019-03-08 23:51 ` Sandra Loosemore
2019-03-09 14:27 ` Peter Maydell
2019-02-13 3:46 ` [Qemu-devel] [PATCH v5 2/2] Add Nios II semihosting support Sandra Loosemore
2019-03-07 14:58 ` Peter Maydell
2019-03-08 3:13 ` Sandra Loosemore [this message]
2019-03-08 16:04 ` Peter Maydell
2019-03-08 17:01 ` Sandra Loosemore
2019-03-08 18:21 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7d4097aa-4888-82f6-3e4e-eeeb8de9f55b@codesourcery.com \
--to=sandra@codesourcery.com \
--cc=marex@denx.de \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).