This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6870

-- gerrit

commit 559a71cbb1e7d507eaac58fc8fa8758508b8b0e1
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Fri Mar 4 09:26:19 2022 +0100

    semihosting: fix mode flags for local host open()
    
    Commit dbbac5f11d66 ("semihosting: use open mode flags from GDB,
    not from sys/stat.h") fixes the conversion of the mode flags from
    ARM semihosting encoding for SEMIHOSTING_SYS_OPEN to GDB mapping
    for open().
    Doing this, it breaks the conversion to local host's OS mapping
    for open().
    
    Split the conversion array to one for GDB and one for local host.
    The local host conversion array is taken directly from the old
    code.
    
    Change-Id: I385321ddd32c3ac5cf6da3f1ce9eff76b05dd527
    Fixes: dbbac5f11d66 ("semihosting: use open mode flags from GDB, not from 
sys/stat.h")
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>
    Reported-by: Erhan Kurubas <erhan.kuru...@espressif.com>

diff --git a/src/target/semihosting_common.c b/src/target/semihosting_common.c
index 9e60de5722..1320e51300 100644
--- a/src/target/semihosting_common.c
+++ b/src/target/semihosting_common.c
@@ -68,7 +68,7 @@ enum {
 };
 
 /* GDB remote protocol does not differentiate between text and binary open 
modes. */
-static const int open_modeflags[12] = {
+static const int open_gdb_modeflags[12] = {
        TARGET_O_RDONLY,
        TARGET_O_RDONLY,
        TARGET_O_RDWR,
@@ -83,6 +83,21 @@ static const int open_modeflags[12] = {
        TARGET_O_RDWR   | TARGET_O_CREAT | TARGET_O_APPEND
 };
 
+static const int open_host_modeflags[12] = {
+       O_RDONLY,
+       O_RDONLY | O_BINARY,
+       O_RDWR,
+       O_RDWR   | O_BINARY,
+       O_WRONLY | O_CREAT | O_TRUNC,
+       O_WRONLY | O_CREAT | O_TRUNC  | O_BINARY,
+       O_RDWR   | O_CREAT | O_TRUNC,
+       O_RDWR   | O_CREAT | O_TRUNC  | O_BINARY,
+       O_WRONLY | O_CREAT | O_APPEND,
+       O_WRONLY | O_CREAT | O_APPEND | O_BINARY,
+       O_RDWR   | O_CREAT | O_APPEND,
+       O_RDWR   | O_CREAT | O_APPEND | O_BINARY
+};
+
 static int semihosting_common_fileio_info(struct target *target,
        struct gdb_fileio_info *fileio_info);
 static int semihosting_common_fileio_end(struct target *target, int result,
@@ -746,7 +761,7 @@ int semihosting_common(struct target *target)
                                                        fileio_info->identifier 
= "open";
                                                        fileio_info->param_1 = 
addr;
                                                        fileio_info->param_2 = 
len;
-                                                       fileio_info->param_3 = 
open_modeflags[mode];
+                                                       fileio_info->param_3 = 
open_gdb_modeflags[mode];
                                                        fileio_info->param_4 = 
0644;
                                                }
                                        } else {
@@ -779,7 +794,7 @@ int semihosting_common(struct target *target)
                                                         * otherwise it will 
fail to reopen a previously
                                                         * written file */
                                                        semihosting->result = 
open((char *)fn,
-                                                                       
open_modeflags[mode],
+                                                                       
open_host_modeflags[mode],
                                                                        0644);
                                                        semihosting->sys_errno 
= errno;
                                                        
LOG_DEBUG("open('%s')=%d", fn,

-- 

Reply via email to