target: Add 64-bit target address support
[fw/openocd] / src / helper / command.c
index 21362a619f483df9b1fa5fa66155b22555f402c7..5deaee859342ae03ad1fa1e7253ed925faff88f4 100644 (file)
@@ -22,9 +22,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -121,7 +119,7 @@ static int command_retval_set(Jim_Interp *interp, int retval)
        if (return_retval != NULL)
                *return_retval = retval;
 
-       return (retval == ERROR_OK) ? JIM_OK : JIM_ERR;
+       return (retval == ERROR_OK) ? JIM_OK : retval;
 }
 
 extern struct command_context *global_cmd_ctx;
@@ -365,7 +363,7 @@ static int register_command_handler(struct command_context *cmd_ctx,
 
        LOG_DEBUG("registering '%s'...", ocd_name);
 
-       Jim_CmdProc func = c->handler ? &script_command : &command_unknown;
+       Jim_CmdProc *func = c->handler ? &script_command : &command_unknown;
        int retval = Jim_CreateCommand(interp, ocd_name, func, c, NULL);
        free(ocd_name);
        if (JIM_OK != retval)
@@ -659,21 +657,7 @@ int command_run_line(struct command_context *context, char *line)
                }
                Jim_DeleteAssocData(interp, "context");
        }
-       if (retcode == JIM_ERR) {
-               if (retval != ERROR_COMMAND_CLOSE_CONNECTION) {
-                       /* We do not print the connection closed error message */
-                       Jim_MakeErrorMessage(interp);
-                       LOG_USER("%s", Jim_GetString(Jim_GetResult(interp), NULL));
-               }
-               if (retval == ERROR_OK) {
-                       /* It wasn't a low level OpenOCD command that failed */
-                       return ERROR_FAIL;
-               }
-               return retval;
-       } else if (retcode == JIM_EXIT) {
-               /* ignore.
-                * exit(Jim_GetExitCode(interp)); */
-       } else {
+       if (retcode == JIM_OK) {
                const char *result;
                int reslen;
 
@@ -693,7 +677,22 @@ int command_run_line(struct command_context *context, char *line)
                        LOG_USER_N("\n");
                }
                retval = ERROR_OK;
+       } else if (retcode == JIM_EXIT) {
+               /* ignore.
+                * exit(Jim_GetExitCode(interp)); */
+       } else if (retcode == ERROR_COMMAND_CLOSE_CONNECTION) {
+               return retcode;
+       } else {
+               Jim_MakeErrorMessage(interp);
+               LOG_USER("%s", Jim_GetString(Jim_GetResult(interp), NULL));
+
+               if (retval == ERROR_OK) {
+                       /* It wasn't a low level OpenOCD command that failed */
+                       return ERROR_FAIL;
+               }
+               return retval;
        }
+
        return retval;
 }
 
@@ -1070,8 +1069,10 @@ static int jim_command_type(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
                Jim_SetResultString(interp, "native", -1);
        else if (c->handler)
                Jim_SetResultString(interp, "simple", -1);
-       else
+       else if (remaining == 0)
                Jim_SetResultString(interp, "group", -1);
+       else
+               Jim_SetResultString(interp, "unknown", -1);
 
        return JIM_OK;
 }
@@ -1172,8 +1173,8 @@ COMMAND_HANDLER(handle_sleep_command)
                return retval;
 
        if (!busy) {
-               long long then = timeval_ms();
-               while (timeval_ms() - then < (long long)duration) {
+               int64_t then = timeval_ms();
+               while (timeval_ms() - then < (int64_t)duration) {
                        target_call_timer_callbacks_now();
                        usleep(1000);
                }
@@ -1409,6 +1410,8 @@ DEFINE_PARSE_ULONGLONG(_u32,  uint32_t, 0, UINT32_MAX)
 DEFINE_PARSE_ULONGLONG(_u16,  uint16_t, 0, UINT16_MAX)
 DEFINE_PARSE_ULONGLONG(_u8,   uint8_t,  0, UINT8_MAX)
 
+DEFINE_PARSE_ULONGLONG(_target_addr, target_addr_t, 0, TARGET_ADDR_MAX)
+
 #define DEFINE_PARSE_LONGLONG(name, type, min, max) \
        DEFINE_PARSE_WRAPPER(name, type, min, max, long long, _llong)
 DEFINE_PARSE_LONGLONG(_int, int,     n < INT_MIN,   INT_MAX)