This is an automated email from Gerrit.

Muhammad Omair Javaid ([email protected]) just uploaded a new patch set 
to Gerrit, which you can find at http://openocd.zylin.com/4538

-- gerrit

commit 669e1fd610f775de5794cd60161e2d7f844f7ee8
Author: Omair Javaid <[email protected]>
Date:   Thu May 31 05:26:49 2018 +0500

    GDB fileIO stdout support
    
    This patch fixes gdb fileio support to allow gdb console to be used as 
stdout.
    
    Now we can do something like
    gdb <inferior file>
    
    (gdb) tar ext :3333
    (gdb) load
    (gdb) monitor arm semihosting enable
    (gdb) monitor arm semihosting_fileio enable
    (gdb) continue
    
    Here: Output from inferior using puts, printf etc will be routed to gdb 
console.
    
    Change-Id: I9cb0dddda1de58038c84f5b035c38229828cd744
    Signed-off-by: Omair Javaid <[email protected]>

diff --git a/src/target/semihosting_common.c b/src/target/semihosting_common.c
index 7166456c..c216c57 100644
--- a/src/target/semihosting_common.c
+++ b/src/target/semihosting_common.c
@@ -225,6 +225,10 @@ int semihosting_common(struct target *target)
                        else {
                                int fd = semihosting_get_field(target, 0, 
fields);
                                if (semihosting->is_fileio) {
+                                       if (fd == 0 || fd == 1 || fd == 2) {
+                                               semihosting->result = 0;
+                                               break;
+                                       }
                                        semihosting->hit_fileio = true;
                                        fileio_info->identifier = "close";
                                        fileio_info->param_1 = fd;
@@ -445,8 +449,8 @@ int semihosting_common(struct target *target)
                         * - –1 if an error occurs.
                         */
                        if (semihosting->is_fileio) {
-                               LOG_ERROR("SYS_FLEN not supported by 
semihosting fileio");
-                               return ERROR_FAIL;
+                               semihosting->result = -1;
+                               semihosting->sys_errno = EINVAL;
                        }
                        retval = semihosting_read_fields(target, 1, fields);
                        if (retval != ERROR_OK)
@@ -690,9 +694,19 @@ int semihosting_common(struct target *target)
                                        /* TODO: implement the 
:semihosting-features special file.
                                         * */
                                        if (semihosting->is_fileio) {
-                                               if (strcmp((char *)fn, ":tt") 
== 0)
-                                                       semihosting->result = 0;
-                                               else {
+                                               if (strcmp((char *)fn, 
":semihosting-features") == 0) {
+                                                       semihosting->result = 
-1;
+                                                       semihosting->sys_errno 
= EINVAL;
+                                               } else if (strcmp((char *)fn, 
":tt") == 0) {
+                                                       if (mode == 0)
+                                                               
semihosting->result = 0;
+                                                       else if (mode == 4)
+                                                               
semihosting->result = 1;
+                                                       else if (mode == 8)
+                                                               
semihosting->result = 2;
+                                                       else
+                                                               
semihosting->result = -1;
+                                               } else {
                                                        semihosting->hit_fileio 
= true;
                                                        fileio_info->identifier 
= "open";
                                                        fileio_info->param_1 = 
addr;

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to