Committed.

This patch cleans up telnet async messages. The user
gets the async messages he wants in telnet and not the
noisy GDB genereated async messagse.

telnet_async option removed, no user servicable parts
inside. :-)

-- 
Øyvind Harboe
http://www.zylin.com/zy1000.html
ARM7 ARM9 XScale Cortex
JTAG debugger and flash programmer
### Eclipse Workspace Patch 1.0
#P openocd
Index: src/helper/startup.tcl
===================================================================
--- src/helper/startup.tcl      (revision 1131)
+++ src/helper/startup.tcl      (working copy)
@@ -302,21 +302,6 @@
 add_help_text verify "synonym to verify_image"
 
 
-add_help_text telnet_async "<enable/disable> - enable/disable async messages. 
Default 0."
-
-global telnet_async_state
-set telnet_async_state 0
-proc telnet_async {state} {
-       global telnet_async_state
-       if {[string compare $state enable]==0} {
-               set telnet_async_state 1 
-       } elseif {[string compare $state disable]==0} {
-               set telnet_async_state 0 
-       } else {
-               return -code error "Illegal option $state"              
-       }
-}
-
 
 add_help_text cpu "<name> - prints out target options and a comment on CPU 
which matches name"
 
Index: src/openocd.c
===================================================================
--- src/openocd.c       (revision 1134)
+++ src/openocd.c       (working copy)
@@ -106,8 +106,18 @@
 {
        switch (event)
        {
+               case TARGET_EVENT_GDB_START:
+                       target->display=0;
+                       break;
+               case TARGET_EVENT_GDB_END:
+                       target->display=1;
+                       break;
                case TARGET_EVENT_HALTED:
-                       target_arch_state(target);
+                       if (target->display)
+                       {
+                               /* do not display information when debugger 
caused the halt */
+                               target_arch_state(target);
+                       }
                        break;
                default:
                        break;
@@ -123,11 +133,11 @@
        static int initialized=0;
        if (initialized)
                return ERROR_OK;
-       
+
        initialized=1;
-       
+
        atexit(exit_handler);
-       
+
        if (target_init(cmd_ctx) != ERROR_OK)
                return ERROR_FAIL;
        LOG_DEBUG("target init complete");
@@ -149,7 +159,7 @@
                        LOG_DEBUG("jtag examine complete");
                }
        }
-       
+
        if (flash_init_drivers(cmd_ctx) != ERROR_OK)
                return ERROR_FAIL;
        LOG_DEBUG("flash init complete");
@@ -175,7 +185,7 @@
        tcl_init(); /* allows tcl to just connect without going thru telnet */
 
        target_register_event_callback(log_target_callback_event_handler, 
cmd_ctx);
-       
+
        return ERROR_OK;
 }
 
@@ -184,12 +194,12 @@
 command_context_t *setup_command_handler(void)
 {
        command_context_t *cmd_ctx;
-       
+
        global_cmd_ctx = cmd_ctx = command_init();
-       
+
        register_command(cmd_ctx, NULL, "version", handle_version_command,
                                         COMMAND_EXEC, "show OpenOCD version");
-       
+
        /* register subsystem commands */
        server_register_commands(cmd_ctx);
        telnet_register_commands(cmd_ctx);
@@ -211,7 +221,7 @@
        LOG_DEBUG("log init complete");
 
        LOG_OUTPUT( OPENOCD_VERSION "\n" );
-       
+
        register_command(cmd_ctx, NULL, "init", handle_init_command,
                                         COMMAND_ANY, "initializes target and 
servers - nop on subsequent invocations");
 
@@ -229,27 +239,27 @@
        command_context_t *cmd_ctx;
 
        cmd_ctx = setup_command_handler();
-       
+
        LOG_OUTPUT( "\n\nBUGS? Read 
http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS\n\n\n";);
 
        print_version();
-       
+
        command_context_mode(cmd_ctx, COMMAND_CONFIG);
        command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
 
        if (parse_cmdline_args(cmd_ctx, argc, argv) != ERROR_OK)
                return EXIT_FAILURE;
-       
+
        ret = parse_config_file(cmd_ctx);
        if ( (ret != ERROR_OK) && (ret != ERROR_COMMAND_CLOSE_CONNECTION) )
                return EXIT_FAILURE;
 
-       if (ret != ERROR_COMMAND_CLOSE_CONNECTION) 
+       if (ret != ERROR_COMMAND_CLOSE_CONNECTION)
        {
                command_context_mode(cmd_ctx, COMMAND_EXEC);
                if (command_run_line(cmd_ctx, "init")!=ERROR_OK)
                        return EXIT_FAILURE;
-       
+
                /* handle network connections */
                server_loop(cmd_ctx);
        }
@@ -258,7 +268,7 @@
        server_quit();
 
        unregister_all_commands(cmd_ctx);
-       
+
        /* free commandline interface */
        command_done(cmd_ctx);
 
Index: src/server/telnet_server.c
===================================================================
--- src/server/telnet_server.c  (revision 1117)
+++ src/server/telnet_server.c  (working copy)
@@ -48,11 +48,6 @@
 int handle_exit_command(struct command_context_s *cmd_ctx, char *cmd, char 
**args, int argc);
 int handle_telnet_port_command(struct command_context_s *cmd_ctx, char *cmd, 
char **args, int argc);
 
-static int telnet_async()
-{
-       return jim_global_long("telnet_async_state");
-}
-
 static char *negotiate =
                "\xFF\xFB\x03"          /* IAC WILL Suppress Go Ahead */
                "\xFF\xFB\x01"          /* IAC WILL Echo */
@@ -191,8 +186,7 @@
        telnet_connection->next_history = 0;
        telnet_connection->current_history = 0;
 
-       if (telnet_async())
-               log_add_callback(telnet_log_callback, connection);
+       log_add_callback(telnet_log_callback, connection);
 
 
 
@@ -348,14 +342,8 @@
 
                                                        t_con->line_cursor = 
-1; /* to supress prompt in log callback during command execution */
 
-                                                       if (!telnet_async())
-                                                               
log_add_callback(telnet_log_callback, connection);
-
                                                        retval = 
command_run_line(command_context, t_con->line);
 
-                                                       if (!telnet_async())
-                                                               
log_remove_callback(telnet_log_callback, connection);
-
                                                        t_con->line_cursor = 0;
 
                                                        if (retval == 
ERROR_COMMAND_CLOSE_CONNECTION)
Index: src/server/gdb_server.c
===================================================================
--- src/server/gdb_server.c     (revision 1099)
+++ src/server/gdb_server.c     (working copy)
@@ -671,6 +671,7 @@
        {
                char sig_reply[4];
                int signal;
+
                /* stop forwarding log packets! */
                log_remove_callback(gdb_log_callback, connection);
 
@@ -701,6 +702,9 @@
                case TARGET_EVENT_EARLY_HALTED:
                        gdb_frontend_halted(target, connection);
                        break;
+               case TARGET_EVENT_HALTED:
+                       target_call_event_callbacks(target, 
TARGET_EVENT_GDB_END);
+                       break;
                case TARGET_EVENT_GDB_FLASH_ERASE_START:
                        target_handle_event( target, 
TARGET_EVENT_OLD_gdb_program_config );
                        if((retval = jtag_execute_queue()) != ERROR_OK)
@@ -815,6 +819,7 @@
        }
 
        target_unregister_event_callback(gdb_target_callback_event_handler, 
connection);
+       target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_END);
        log_remove_callback(gdb_log_callback, connection);
 
        target_call_event_callbacks(gdb_service->target, 
TARGET_EVENT_GDB_DETACH );
@@ -2054,6 +2059,7 @@
                                                        gdb_connection_t 
*gdb_con = connection->priv;
                                                        gdb_con->frontend_state 
= TARGET_RUNNING;
                                                        
log_add_callback(gdb_log_callback, connection);
+                                                       
target_call_event_callbacks(target, TARGET_EVENT_GDB_START);
                                                        int 
retval=gdb_step_continue_packet(connection, target, packet, packet_size);
                                                        if (retval!=ERROR_OK)
                                                        {
Index: src/target/target.c
===================================================================
--- src/target/target.c (revision 1134)
+++ src/target/target.c (working copy)
@@ -175,6 +175,11 @@
        { .value = TARGET_EVENT_RESUME_START, .name = "resume-start" },
        { .value = TARGET_EVENT_RESUME_END, .name = "resume-end" },
 
+
+       { .name = "gdb-start", .value = TARGET_EVENT_GDB_START },
+       { .name = "gdb-end", .value = TARGET_EVENT_GDB_END },
+
+
        /* historical name */
 
        { .value = TARGET_EVENT_RESET_START, .name = "reset-start" },
@@ -3841,6 +3846,8 @@
        target->next                = NULL;
        target->arch_info           = NULL;
 
+       target->display             = 1;
+
        /* initialize trace information */
        target->trace_info = malloc(sizeof(trace_t));
        target->trace_info->num_trace_points         = 0;
Index: src/target/target.h
===================================================================
--- src/target/target.h (revision 1062)
+++ src/target/target.h (working copy)
@@ -113,7 +113,7 @@
 typedef struct target_type_s
 {
        char *name;
-       
+
        int examined;
 
        /* poll current target status */
@@ -129,39 +129,39 @@
        int (*halt)(struct target_s *target);
        int (*resume)(struct target_s *target, int current, u32 address, int 
handle_breakpoints, int debug_execution);
        int (*step)(struct target_s *target, int current, u32 address, int 
handle_breakpoints);
-       
+
        /* target reset control. assert reset can be invoked when OpenOCD and
         * the target is out of sync.
-        * 
+        *
         * A typical example is that the target was power cycled while OpenOCD
         * thought the target was halted or running.
-        * 
+        *
         * assert_reset() can therefore make no assumptions whatsoever about the
-        * state of the target 
-        * 
+        * state of the target
+        *
         * Before assert_reset() for the target is invoked, a TRST/tms and
         * chain validation is executed. TRST should not be asserted
         * during target assert unless there is no way around it due to
         * the way reset's are configured.
-        * 
+        *
         */
        int (*assert_reset)(struct target_s *target);
        int (*deassert_reset)(struct target_s *target);
        int (*soft_reset_halt_imp)(struct target_s *target);
        int (*soft_reset_halt)(struct target_s *target);
-       
+
        /* target register access for gdb.
-        * 
+        *
         * Danger! this function will succeed even if the target is running
         * and return a register list with dummy values.
-        * 
+        *
         * The reason is that GDB connection will fail without a valid register
         * list, however it is after GDB is connected that monitor commands can
         * be run to properly initialize the target
         */
        int (*get_gdb_reg_list)(struct target_s *target, struct reg_s 
**reg_list[], int *reg_list_size);
-       
-       /* target memory access 
+
+       /* target memory access
        * size: 1 = byte (8bit), 2 = half-word (16bit), 4 = word (32bit)
        * count: number of items of <size>
        */
@@ -169,26 +169,26 @@
        int (*read_memory)(struct target_s *target, u32 address, u32 size, u32 
count, u8 *buffer);
        int (*write_memory_imp)(struct target_s *target, u32 address, u32 size, 
u32 count, u8 *buffer);
        int (*write_memory)(struct target_s *target, u32 address, u32 size, u32 
count, u8 *buffer);
-       
+
        /* write target memory in multiples of 4 byte, optimized for writing 
large quantities of data */
        int (*bulk_write_memory)(struct target_s *target, u32 address, u32 
count, u8 *buffer);
-       
+
        int (*checksum_memory)(struct target_s *target, u32 address, u32 count, 
u32* checksum);
        int (*blank_check_memory)(struct target_s *target, u32 address, u32 
count, u32* blank);
-       
-       /* 
-        * target break-/watchpoint control 
+
+       /*
+        * target break-/watchpoint control
         * rw: 0 = write, 1 = read, 2 = access
-        * 
+        *
         * Target must be halted while this is invoked as this
         * will actually set up breakpoints on target.
-        * 
+        *
         * The breakpoint hardware will be set up upon adding the first 
breakpoint.
-        * 
+        *
         * Upon GDB connection all breakpoints/watchpoints are cleared.
         */
        int (*add_breakpoint)(struct target_s *target, breakpoint_t 
*breakpoint);
-       
+
        /* remove breakpoint. hw will only be updated if the target is 
currently halted.
         * However, this method can be invoked on unresponsive targets.
         */
@@ -203,7 +203,7 @@
        int (*run_algorithm_imp)(struct target_s *target, int num_mem_params, 
mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 
entry_point, u32 exit_point, int timeout_ms, void *arch_info);
        int (*run_algorithm)(struct target_s *target, int num_mem_params, 
mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 
entry_point, u32 exit_point, int timeout_ms, void *arch_info);
 
-       int (*register_commands)(struct command_context_s *cmd_ctx);    
+       int (*register_commands)(struct command_context_s *cmd_ctx);
 
        /* called when target is created */
        int (*target_create)( struct target_s *target, Jim_Interp *interp );
@@ -220,21 +220,21 @@
        /* invoked after JTAG chain has been examined & validated. During
         * this stage the target is examined and any additional setup is
         * performed.
-        * 
+        *
         * invoked every time after the jtag chain has been validated/examined
         */
        int (*examine)(struct target_s *target);
        /* Set up structures for target.
-        *  
+        *
         * It is illegal to talk to the target at this stage as this fn is 
invoked
         * before the JTAG chain has been examined/verified
      */
        int (*init_target)(struct command_context_s *cmd_ctx, struct target_s 
*target);
        int (*quit)(void);
-       
+
        int (*virt2phys)(struct target_s *target, u32 address, u32 *physical);
        int (*mmu)(struct target_s *target, int *enabled);
-       
+
 } target_type_t;
 
 // forward decloration
@@ -250,7 +250,7 @@
        target_event_action_t *event_action;
 
        int reset_halt;                                         /* attempt 
resetting the CPU into the halted mode? */
-       u32 working_area;                                       /* working area 
(initialized RAM). Evaluated 
+       u32 working_area;                                       /* working area 
(initialized RAM). Evaluated
                                                                                
   upon first allocation from virtual/physical address. */
        u32 working_area_virt;                          /* virtual address */
        u32 working_area_phys;                          /* physical address */
@@ -268,6 +268,9 @@
        u32 dbg_msg_enabled;                            /* debug message status 
*/
        void *arch_info;                                        /* architecture 
specific information */
        struct target_s *next;                          /* next target in list 
*/
+
+       int display;                                            /* display 
async info in telnet session. Do not display
+                                                                               
   lots of halted/resumed info when stepping in debugger. */
 } target_t;
 
 enum target_event
@@ -290,6 +293,9 @@
        TARGET_EVENT_RESUME_START,
        TARGET_EVENT_RESUME_END,
 
+       TARGET_EVENT_GDB_START, /* debugger started execution (step/run) */
+       TARGET_EVENT_GDB_END, /* debugger stopped execution (step/run) */
+
        TARGET_EVENT_RESET_START,
        TARGET_EVENT_RESET_ASSERT_PRE,
        TARGET_EVENT_RESET_ASSERT_POST,
@@ -308,7 +314,7 @@
 
        TARGET_EVENT_EXAMINE_START,
        TARGET_EVENT_EXAMINE_END,
-       
+
 
        TARGET_EVENT_GDB_ATTACH,
        TARGET_EVENT_GDB_DETACH,
@@ -359,7 +365,7 @@
 extern int target_halt(target_t *target);
 extern int target_call_event_callbacks(target_t *target, enum target_event 
event);
 
-/* The period is very approximate, the callback can happen much more often 
+/* The period is very approximate, the callback can happen much more often
  * or much more rarely than specified
  */
 extern int target_register_timer_callback(int (*callback)(void *priv), int 
time_ms, int periodic, void *priv);
@@ -381,15 +387,15 @@
 extern int target_wait_state(target_t *target, enum target_state state, int 
ms);
 
 /* DANGER!!!!!
- * 
+ *
  * if "area" passed in to target_alloc_working_area() points to a memory
  * location that goes out of scope (e.g. a pointer on the stack), then
  * the caller of target_alloc_working_area() is responsible for invoking
  * target_free_working_area() before "area" goes out of scope.
- * 
+ *
  * target_free_all_working_areas() will NULL out the "area" pointer
  * upon resuming or resetting the CPU.
- * 
+ *
  */
 extern int target_alloc_working_area(struct target_s *target, u32 size, 
working_area_t **area);
 extern int target_free_working_area(struct target_s *target, working_area_t 
*area);
Index: doc/openocd.texi
===================================================================
--- doc/openocd.texi    (revision 1133)
+++ doc/openocd.texi    (working copy)
@@ -265,10 +265,6 @@
 @item @b{telnet_port} <@var{number}>
 @cindex telnet_port
 @*Port on which to listen for incoming telnet connections 
[EMAIL PROTECTED] @b{telnet_async} <@var{enable/disable}>
[EMAIL PROTECTED] telnet_async
[EMAIL PROTECTED]/disable asynchronous messages. Default off. Slows down 
debugging
-if enabled and telnet session is open while stepping.
 @item @b{tcl_port} <@var{number}>
 @cindex tcl_port
 @*Port on which to listen for incoming TCL syntax. This port is intended as
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to