semihosting: fix mode flags for local host open()
Commitdbbac5f11d
("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:dbbac5f11d
("semihosting: use open mode flags from GDB, not from sys/stat.h") Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reported-by: Erhan Kurubas <erhan.kurubas@espressif.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6870 Tested-by: jenkins
This commit is contained in:
parent
92c4e634d7
commit
2cafa8be73
|
@ -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,
|
||||
|
@ -886,7 +901,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 {
|
||||
|
@ -922,7 +937,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,
|
||||
|
|
Loading…
Reference in New Issue