target/nios2/nios2-semi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Instead of using the function number (which is always zero), fetch the
application-provided exit code argument and pass that to the two exit
functions.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
target/nios2/nios2-semi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c
index 3738774976..ffd1f095f6 100644
--- a/target/nios2/nios2-semi.c
+++ b/target/nios2/nios2-semi.c
@@ -133,8 +133,9 @@ void do_nios2_semihosting(CPUNios2State *env)
args = env->regs[R_ARG1];
switch (nr) {
case HOSTED_EXIT:
- gdb_exit(env->regs[R_ARG0]);
- exit(env->regs[R_ARG0]);
+ GET_ARG(0);
+ gdb_exit(arg0);
+ exit(arg0);
case HOSTED_OPEN:
GET_ARG(0);
--
2.40.1
On Mon, 31 Jul 2023 at 23:42, Keith Packard via <qemu-devel@nongnu.org> wrote:
>
> Instead of using the function number (which is always zero), fetch the
> application-provided exit code argument and pass that to the two exit
> functions.
>
> Signed-off-by: Keith Packard <keithp@keithp.com>
> ---
> target/nios2/nios2-semi.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c
> index 3738774976..ffd1f095f6 100644
> --- a/target/nios2/nios2-semi.c
> +++ b/target/nios2/nios2-semi.c
> @@ -133,8 +133,9 @@ void do_nios2_semihosting(CPUNios2State *env)
> args = env->regs[R_ARG1];
> switch (nr) {
> case HOSTED_EXIT:
> - gdb_exit(env->regs[R_ARG0]);
> - exit(env->regs[R_ARG0]);
> + GET_ARG(0);
> + gdb_exit(arg0);
> + exit(arg0);
The spec
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/nios2/nios2-semi.txt;hb=HEAD
says that for HOSTED_EXIT the exit code is in r5,
not in a parameter block pointed to by r5. That
would imply that the correct change is to use
R_ARG1 rather than R_ARG0 here.
thanks
-- PMM
> says that for HOSTED_EXIT the exit code is in r5, > not in a parameter block pointed to by r5. That > would imply that the correct change is to use > R_ARG1 rather than R_ARG0 here. Ah, thanks -- I hadn't managed to find the actual standard yet. I'll resubmit with that fixed. -- -keith
On Tue, 1 Aug 2023 at 16:10, Keith Packard <keithp@keithp.com> wrote: > > > > says that for HOSTED_EXIT the exit code is in r5, > > not in a parameter block pointed to by r5. That > > would imply that the correct change is to use > > R_ARG1 rather than R_ARG0 here. > > Ah, thanks -- I hadn't managed to find the actual standard yet. Yeah, the closest to a "standard" we have for nios2 is that I asked the Codesourcery folks to document it in the libgloss sources and put the URL to it in a comment at the top of nios2-semi.c, given that there's no official spec and the original and main guest-side user is libgloss. m68k is in a similar position only without the URL in our source file :-) -- PMM
> Yeah, the closest to a "standard" we have for nios2 is that > I asked the Codesourcery folks to document it in the libgloss > sources and put the URL to it in a comment at the top of > nios2-semi.c, given that there's no official spec and the > original and main guest-side user is libgloss. > m68k is in a similar position only without the URL > in our source file :-) Yeah, we had the same ask when getting risc-v semihosting merged. For that, I actually pushed through an "official" risc-v standard. I kinda wish I'd used the m68k model instead of the arm model as that provides simple POSIX semantics... https://github.com/riscv-software-src/riscv-semihosting/blob/main/riscv-semihosting-spec.adoc -- -keith
On Tue, 1 Aug 2023 at 16:28, Keith Packard <keithp@keithp.com> wrote: > > > > Yeah, the closest to a "standard" we have for nios2 is that > > I asked the Codesourcery folks to document it in the libgloss > > sources and put the URL to it in a comment at the top of > > nios2-semi.c, given that there's no official spec and the > > original and main guest-side user is libgloss. > > m68k is in a similar position only without the URL > > in our source file :-) > > Yeah, we had the same ask when getting risc-v semihosting merged. For > that, I actually pushed through an "official" risc-v standard. I kinda > wish I'd used the m68k model instead of the arm model as that provides > simple POSIX semantics... Yeah, there's a lot of stuff in the Arm semihosting API that I wouldn't put in there for a from-new version that didn't need to handle legacy guests. Notably the "errno" concept is badly underspecified and/or broken. On an architecture with a decent number of registers it would probably also make sense to use them rather than having every single call put its args in memory. thanks -- PMM
© 2016 - 2026 Red Hat, Inc.