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 */

-- 

Reply via email to