Peter Maydell <peter.mayd...@linaro.org> writes:
> The guest can use the semihosting API to open a handle > corresponding to QEMU's own stdin, stdout, or stderr. > When the guest closes this handle, we should not > close the underlying host stdin/stdout/stderr > the way we would do if the handle corresponded to > a host fd we'd opened on behalf of the guest in SYS_OPEN. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > target/arm/arm-semi.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c > index 788fe61b51a..8718fd01948 100644 > --- a/target/arm/arm-semi.c > +++ b/target/arm/arm-semi.c > @@ -403,6 +403,15 @@ static uint32_t host_closefn(ARMCPU *cpu, GuestFD *gf) > { > CPUARMState *env = &cpu->env; > > + /* > + * Only close the underlying host fd if it's one we opened on behalf > + * of the guest in SYS_OPEN. > + */ > + if (gf->hostfd == STDIN_FILENO || > + gf->hostfd == STDOUT_FILENO || > + gf->hostfd == STDERR_FILENO) { > + return 0; > + } > return set_swi_errno(env, close(gf->hostfd)); > } -- Alex Bennée