Skip to content

Commit

Permalink
semihosting: Implement SYS_TMPNAM
Browse files Browse the repository at this point in the history
Part of Semihosting for AArch32 and AArch64 Release 2.0

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210107170717.2098982-9-keithp@keithp.com>
Message-Id: <20210108224256.2321-20-alex.bennee@linaro.org>
  • Loading branch information
keith-packard authored and stsquad committed Jan 18, 2021
1 parent 4d83403 commit 27e3b10
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions hw/semihosting/arm-compat-semi.c
Expand Up @@ -835,6 +835,7 @@ target_ulong do_common_semihosting(CPUState *cs)
CPUArchState *env = cs->env_ptr;
target_ulong args;
target_ulong arg0, arg1, arg2, arg3;
target_ulong ul_ret;
char * s;
int nr;
uint32_t ret;
Expand Down Expand Up @@ -998,8 +999,24 @@ target_ulong do_common_semihosting(CPUState *cs)

return guestfd_fns[gf->type].flenfn(cs, gf);
case TARGET_SYS_TMPNAM:
qemu_log_mask(LOG_UNIMP, "%s: SYS_TMPNAM not implemented", __func__);
return -1;
GET_ARG(0);
GET_ARG(1);
GET_ARG(2);
if (asprintf(&s, "/tmp/qemu-%x%02x", getpid(),
(int) (arg1 & 0xff)) < 0) {
return -1;
}
ul_ret = (target_ulong) -1;

/* Make sure there's enough space in the buffer */
if (strlen(s) < arg2) {
char *output = lock_user(VERIFY_WRITE, arg0, arg2, 0);
strcpy(output, s);
unlock_user(output, arg0, arg2);
ul_ret = 0;
}
free(s);
return ul_ret;
case TARGET_SYS_REMOVE:
GET_ARG(0);
GET_ARG(1);
Expand Down

0 comments on commit 27e3b10

Please sign in to comment.