- cleaned up cycle counting in ETM analysis
authordrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 31 Jul 2007 16:39:06 +0000 (16:39 +0000)
committerdrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 31 Jul 2007 16:39:06 +0000 (16:39 +0000)
- fixed broken OpenOCD version string

git-svn-id: svn://svn.berlios.de/openocd/trunk@188 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/openocd.c
src/target/etm.c

index 1bdbb1cac3e9bc25cc3b661a3ddf5866070eb932..57d2dc4bae04d329cf4668ccda002d7698860ce9 100644 (file)
@@ -18,7 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#define OPENOCD_VERSION "Open On-Chip Debugger (2007-07-31 12:00 CEST)
+#define OPENOCD_VERSION "Open On-Chip Debugger (2007-07-31 19:00 CEST)"
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
index 52e4b3d6223716d38da62c51475c44602dcbd7dd..cbe3db5932549798a9795b83f8f2aa49fd14d0bc 100644 (file)
@@ -760,18 +760,21 @@ int etmv1_analyze_trace(etm_context_t *ctx, struct command_context_s *cmd_ctx)
                u32 old_data_index = ctx->data_index;
                u32 old_data_half = ctx->data_half;
                u32 old_index = ctx->pipe_index;
+               u32 last_instruction = ctx->last_instruction;
                u32 cycles = 0;
                
                if (ctx->trace_data[ctx->pipe_index].flags & ETMV1_TRIGGER_CYCLE)
                {
                        command_print(cmd_ctx, "--- trigger ---");
                }
+
+               /* instructions execute in IE/D or BE/D cycles */
+               if ((pipestat == STAT_IE) || (pipestat == STAT_ID))
+                       ctx->last_instruction = ctx->pipe_index;
                
                /* if we don't have a valid pc skip until we reach an indirect branch */
                if ((!ctx->pc_ok) && (pipestat != STAT_BE))
                {
-                       if (pipestat == STAT_IE)
-                               ctx->last_instruction = ctx->pipe_index;
                        ctx->pipe_index++;
                        continue;
                }
@@ -787,6 +790,8 @@ int etmv1_analyze_trace(etm_context_t *ctx, struct command_context_s *cmd_ctx)
                         */
                        old_data_index = ctx->data_index;
                        old_data_half = ctx->data_half;
+
+                       ctx->last_instruction = ctx->pipe_index;
                        
                        if ((retval = etmv1_branch_address(ctx)) != 0)
                        {
@@ -810,32 +815,27 @@ int etmv1_analyze_trace(etm_context_t *ctx, struct command_context_s *cmd_ctx)
                        {
                                case 0x0:       /* normal PC change */
                                        next_pc = ctx->last_branch;
-                                       ctx->last_instruction = old_index;
                                        break;
                                case 0x1:       /* tracing enabled */
                                        command_print(cmd_ctx, "--- tracing enabled at 0x%8.8x ---", ctx->last_branch);
                                        ctx->current_pc = ctx->last_branch;
                                        ctx->pipe_index++;
-                                       ctx->last_instruction = old_index;
                                        continue;
                                        break;
                                case 0x2:       /* trace restarted after FIFO overflow */
                                        command_print(cmd_ctx, "--- trace restarted after FIFO overflow at 0x%8.8x ---", ctx->last_branch);
                                        ctx->current_pc = ctx->last_branch;
                                        ctx->pipe_index++;
-                                       ctx->last_instruction = old_index;
                                        continue;
                                        break;
                                case 0x3:       /* exit from debug state */
                                        command_print(cmd_ctx, "--- exit from debug state at 0x%8.8x ---", ctx->last_branch);
                                        ctx->current_pc = ctx->last_branch;
                                        ctx->pipe_index++;
-                                       ctx->last_instruction = old_index;
                                        continue;
                                        break;
                                case 0x4:       /* periodic synchronization point */
                                        next_pc = ctx->last_branch;
-                                       ctx->last_instruction = old_index;
                                        break;
                                default:        /* reserved */
                                        ERROR("BUG: branch reason code 0x%x is reserved", ctx->last_branch_reason);             
@@ -854,8 +854,6 @@ int etmv1_analyze_trace(etm_context_t *ctx, struct command_context_s *cmd_ctx)
                        if (((ctx->last_branch >= 0x0) && (ctx->last_branch <= 0x20))
                                || ((ctx->last_branch >= 0xffff0000) && (ctx->last_branch <= 0xffff0020)))
                        {
-                               ctx->last_instruction = old_index;
-                               
                                if ((ctx->last_branch & 0xff) == 0x10)
                                {
                                        command_print(cmd_ctx, "data abort");
@@ -889,8 +887,7 @@ int etmv1_analyze_trace(etm_context_t *ctx, struct command_context_s *cmd_ctx)
                                }
                        }
                        
-                       cycles = old_index - ctx->last_instruction;
-                       ctx->last_instruction = old_index;
+                       cycles = old_index - last_instruction;
                }
                
                if ((pipestat == STAT_ID) || (pipestat == STAT_BD))

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)