diff --git a/target-arm/arm-semi.c b/target-arm/arm-semi.c index 74a67e9fdd..a2a7369567 100644 --- a/target-arm/arm-semi.c +++ b/target-arm/arm-semi.c @@ -436,12 +436,19 @@ uint32_t do_arm_semihosting(CPUARMState *env) size_t input_size; size_t output_size; int status = 0; +#if !defined(CONFIG_USER_ONLY) + const char *cmdline; +#endif GET_ARG(0); GET_ARG(1); input_size = arg1; /* Compute the size of the output string. */ #if !defined(CONFIG_USER_ONLY) - output_size = strlen(semihosting_get_cmdline()) + 1; + cmdline = semihosting_get_cmdline(); + if (cmdline == NULL) { + cmdline = ""; /* Default to an empty line. */ + } + output_size = strlen(cmdline) + 1; /* Count terminating 0. */ #else unsigned int i; @@ -472,7 +479,7 @@ uint32_t do_arm_semihosting(CPUARMState *env) /* Copy the command-line arguments. */ #if !defined(CONFIG_USER_ONLY) - pstrcpy(output_buffer, output_size, semihosting_get_cmdline()); + pstrcpy(output_buffer, output_size, cmdline); #else if (output_size == 1) { /* Empty command-line. */