This is an automated email from Gerrit. "Pavel Kirienko <pavel.kirie...@gmail.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6803
-- gerrit commit 84ae1d36aafd844bbde4033306b58e809ffb7e99 Author: Pavel Kirienko <pavel.kirie...@gmail.com> Date: Sun Jan 9 21:05:01 2022 +0200 semihosting: Fix return value handling for semihosting calls SYS_READ and SYS_WRITE (ticket #232) ARM/RISC-V semihosting calls SYS_READ/SYS_WRITE require inversion of the result value as described in "Semihosting for AArch32 and AArch64". Prior to this patch, this was done correctly only if (semihosting->is_fileio==false). This patch has been tested with STM32F446. Change-Id: I1b34c8d8393f7dfa66ee6539904a2eaf8f9154b0 Signed-off-by: Pavel Kirienko <pavel.kirie...@gmail.com> diff --git a/src/target/semihosting_common.c b/src/target/semihosting_common.c index 1b65e126c..ba3223e72 100644 --- a/src/target/semihosting_common.c +++ b/src/target/semihosting_common.c @@ -1397,17 +1397,11 @@ static int semihosting_common_fileio_end(struct target *target, int result, */ switch (semihosting->op) { case SEMIHOSTING_SYS_WRITE: /* 0x05 */ + case SEMIHOSTING_SYS_READ: /* 0x06 */ if (result < 0) - semihosting->result = fileio_info->param_3; + semihosting->result = fileio_info->param_3; /* Zero bytes read/written. */ else - semihosting->result = 0; - break; - - case SEMIHOSTING_SYS_READ: /* 0x06 */ - if (result == (int)fileio_info->param_3) - semihosting->result = 0; - if (result <= 0) - semihosting->result = fileio_info->param_3; + semihosting->result = (int64_t)fileio_info->param_3 - result; break; case SEMIHOSTING_SYS_SEEK: /* 0x0a */ --