This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5664

-- gerrit

commit a3cc23bdcbbc853fc06b94f3c890b86bf68054f2
Author: Antonio Borneo <[email protected]>
Date:   Tue May 12 00:22:13 2020 +0200

    helper/command: always pass struct command as jim private data
    
    While registering a new command, jim accepts a pointer to private
    data that could be accessible during command execution.
    
    Today openocd is not consistent and passes different private data
    depending on the command, and then even overwrites it:
    - "simple" commands (.handler) are registered with their own
      struct command pointer as private data;
    - "native" commands (.jim_handler) at root level are registered
      with NULL private data;
    - "native" commands (.jim_handler) not at root level are
      registered with the struct command pointer of their root command
      as private data but, when executed, the private data is replaced
      by the value in field jim_handler_data taken from their struct
      command.
    
    Uniform the usage of private data by always set it to the struct
    command pointer while registering the new commands.
    Note: for multi-word commands only the root command is registered
    so private data is set to the struct command of the root command.
    
    Don't overwrite the private data, but let the commands that need
    such overwritten data to get it directly through struct command.
    
    For sake of uniformity, let function command_set_handler_data() to
    set the field jim_handler_data also for "group" commands, even if
    such value will not be used.
    
    While there, uniform the code to use the macro Jim_CmdPrivData()
    to access the private data pointer.
    
    Change-Id: Idba16242ba1f6769341b4030a49cdf35a5278695
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/helper/command.c b/src/helper/command.c
index 271e7b9..443e876 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -214,7 +214,7 @@ static int script_command(Jim_Interp *interp, int argc, 
Jim_Obj *const *argv)
 {
        /* the private data is stashed in the interp structure */
 
-       struct command *c = interp->cmdPrivData;
+       struct command *c = Jim_CmdPrivData(interp);
        assert(c);
        script_debug(interp, argc, argv);
        return script_command_run(interp, argc, argv, c);
@@ -382,7 +382,7 @@ static struct command *register_command(struct 
command_context *context,
        int retval = JIM_OK;
        if (NULL != cr->jim_handler && NULL == parent) {
                retval = Jim_CreateCommand(context->interp, cr->name,
-                               cr->jim_handler, NULL, NULL);
+                               cr->jim_handler, c, NULL);
        } else if (NULL != cr->handler || NULL != parent)
                retval = register_command_handler(context, command_root(c));
 
@@ -465,8 +465,7 @@ static int unregister_command(struct command_context 
*context,
 
 void command_set_handler_data(struct command *c, void *p)
 {
-       if (NULL != c->handler || NULL != c->jim_handler)
-               c->jim_handler_data = p;
+       c->jim_handler_data = p;
        for (struct command *cc = c->children; NULL != cc; cc = cc->next)
                command_set_handler_data(cc, p);
 }
@@ -1059,7 +1058,6 @@ static int command_unknown(Jim_Interp *interp, int argc, 
Jim_Obj *const *argv)
                if (!command_can_run(cmd_ctx, c))
                        return JIM_ERR;
 
-               interp->cmdPrivData = c->jim_handler_data;
                return (*c->jim_handler)(interp, count, start);
        }
 
diff --git a/src/target/nds32_cmd.c b/src/target/nds32_cmd.c
index d7d040e..ef219e7 100644
--- a/src/target/nds32_cmd.c
+++ b/src/target/nds32_cmd.c
@@ -722,7 +722,8 @@ static int jim_nds32_bulk_write(Jim_Interp *interp, int 
argc, Jim_Obj * const *a
                return JIM_ERR;
        }
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        int result;
 
        result = target_write_buffer(target, address, count * 4, (const uint8_t 
*)data);
@@ -751,7 +752,8 @@ static int jim_nds32_multi_write(Jim_Interp *interp, int 
argc, Jim_Obj * const *
        if (e != JIM_OK)
                return e;
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        struct aice_port_s *aice = target_to_aice(target);
        int result;
        uint32_t address;
@@ -812,7 +814,8 @@ static int jim_nds32_bulk_read(Jim_Interp *interp, int 
argc, Jim_Obj * const *ar
        if (goi.argc != 0)
                return JIM_ERR;
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        uint32_t *data = malloc(count * sizeof(uint32_t));
        int result;
        result = target_read_buffer(target, address, count * 4, (uint8_t 
*)data);
@@ -863,7 +866,8 @@ static int jim_nds32_read_edm_sr(Jim_Interp *interp, int 
argc, Jim_Obj * const *
        else
                return ERROR_FAIL;
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        struct aice_port_s *aice = target_to_aice(target);
        char data_str[11];
 
@@ -911,7 +915,8 @@ static int jim_nds32_write_edm_sr(Jim_Interp *interp, int 
argc, Jim_Obj * const
        else
                return ERROR_FAIL;
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        struct aice_port_s *aice = target_to_aice(target);
 
        aice_write_debug_reg(aice, edm_sr_number, value);
diff --git a/src/target/target.c b/src/target/target.c
index c0953a3..2e55f51 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -4972,21 +4972,24 @@ static int jim_target_configure(Jim_Interp *interp, int 
argc, Jim_Obj * const *a
                                 "missing: -option ...");
                return JIM_ERR;
        }
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        return target_configure(&goi, target);
 }
 
 static int jim_target_mem2array(Jim_Interp *interp,
                int argc, Jim_Obj *const *argv)
 {
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        return target_mem2array(interp, target, argc - 1, argv + 1);
 }
 
 static int jim_target_array2mem(Jim_Interp *interp,
                int argc, Jim_Obj *const *argv)
 {
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        return target_array2mem(interp, target, argc - 1, argv + 1);
 }
 
@@ -5018,7 +5021,8 @@ static int jim_target_examine(Jim_Interp *interp, int 
argc, Jim_Obj *const *argv
                allow_defer = true;
        }
 
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        if (!target->tap->enabled)
                return jim_target_tap_disabled(interp);
 
@@ -5036,7 +5040,8 @@ static int jim_target_examine(Jim_Interp *interp, int 
argc, Jim_Obj *const *argv
 
 static int jim_target_was_examined(Jim_Interp *interp, int argc, Jim_Obj * 
const *argv)
 {
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
 
        Jim_SetResultBool(interp, target_was_examined(target));
        return JIM_OK;
@@ -5044,7 +5049,8 @@ static int jim_target_was_examined(Jim_Interp *interp, 
int argc, Jim_Obj * const
 
 static int jim_target_examine_deferred(Jim_Interp *interp, int argc, Jim_Obj * 
const *argv)
 {
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
 
        Jim_SetResultBool(interp, target->defer_examine);
        return JIM_OK;
@@ -5056,7 +5062,8 @@ static int jim_target_halt_gdb(Jim_Interp *interp, int 
argc, Jim_Obj *const *arg
                Jim_WrongNumArgs(interp, 1, argv, "[no parameters]");
                return JIM_ERR;
        }
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
 
        if (target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT) != 
ERROR_OK)
                return JIM_ERR;
@@ -5070,7 +5077,8 @@ static int jim_target_poll(Jim_Interp *interp, int argc, 
Jim_Obj *const *argv)
                Jim_WrongNumArgs(interp, 1, argv, "[no parameters]");
                return JIM_ERR;
        }
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        if (!target->tap->enabled)
                return jim_target_tap_disabled(interp);
 
@@ -5107,7 +5115,8 @@ static int jim_target_reset(Jim_Interp *interp, int argc, 
Jim_Obj *const *argv)
        if (e != JIM_OK)
                return e;
 
-       struct target *target = Jim_CmdPrivData(goi.interp);
+       struct command *c = Jim_CmdPrivData(goi.interp);
+       struct target *target = c->jim_handler_data;
        if (!target->tap->enabled)
                return jim_target_tap_disabled(interp);
 
@@ -5140,7 +5149,8 @@ static int jim_target_halt(Jim_Interp *interp, int argc, 
Jim_Obj *const *argv)
                Jim_WrongNumArgs(interp, 1, argv, "[no parameters]");
                return JIM_ERR;
        }
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        if (!target->tap->enabled)
                return jim_target_tap_disabled(interp);
        int e = target->type->halt(target);
@@ -5170,7 +5180,8 @@ static int jim_target_wait_state(Jim_Interp *interp, int 
argc, Jim_Obj *const *a
        e = Jim_GetOpt_Wide(&goi, &a);
        if (e != JIM_OK)
                return e;
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        if (!target->tap->enabled)
                return jim_target_tap_disabled(interp);
 
@@ -5214,7 +5225,8 @@ static int jim_target_current_state(Jim_Interp *interp, 
int argc, Jim_Obj *const
                Jim_WrongNumArgs(interp, 1, argv, "[no parameters]");
                return JIM_ERR;
        }
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        Jim_SetResultString(interp, target_state_name(target), -1);
        return JIM_OK;
 }
@@ -5233,7 +5245,8 @@ static int jim_target_invoke_event(Jim_Interp *interp, 
int argc, Jim_Obj *const
                Jim_GetOpt_NvpUnknown(&goi, nvp_target_event, 1);
                return e;
        }
-       struct target *target = Jim_CmdPrivData(interp);
+       struct command *c = Jim_CmdPrivData(interp);
+       struct target *target = c->jim_handler_data;
        target_handle_event(target, n->value);
        return JIM_OK;
 }

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to