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 <kei...@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