Patchwork [Bug,1085658,NEW] exec, cpu log

login
register
mail settings
Submitter Daniil Troshkov
Date Dec. 2, 2012, 4:16 p.m.
Message ID <20121202161653.4416.21917.malonedeb@wampee.canonical.com>
Download mbox | patch
Permalink /patch/203248/
State New
Headers show

Comments

Daniil Troshkov - Dec. 2, 2012, 4:16 p.m.
Public bug reported:

Hello!

CPU_LOG_EXEC (and CPU_LOG_TB_CPU) does not work (i.e. not of each tb dumped) because tb links is occur.
Patch:


** Affects: qemu
     Importance: Undecided
         Status: New
Peter Maydell - Dec. 2, 2012, 6:31 p.m.
> CPU_LOG_EXEC (and CPU_LOG_TB_CPU) does not work (i.e. not of each tb
dumped) because tb links is occur.

This is true, but I'm afraid I don't think this patch is the right
approach. Enabling debug tracing shouldn't cause us to change behaviour,
so we can't just disable TB linking when doing debug logging.
Daniil Troshkov - Dec. 2, 2012, 9:03 p.m.
** Description changed:

  Hello!
  
  CPU_LOG_EXEC (and CPU_LOG_TB_CPU) does not work (i.e. not of each tb dumped) because tb links is occur.
  Patch:
  
  diff --git a/cpu-exec.c b/cpu-exec.c
  index 904ee73..509d50c 100644
  --- a/cpu-exec.c
  +++ b/cpu-exec.c
  @@ -582,7 +582,11 @@ int cpu_exec(CPUArchState *env)
-                  /* see if we can patch the calling TB. When the TB
-                     spans two pages, we cannot safely do a direct
-                     jump. */
+                  /* see if we can patch the calling TB. When the TB
+                     spans two pages, we cannot safely do a direct
+                     jump. */
  -                if (next_tb != 0 && tb->page_addr[1] == -1) {
  +                if (next_tb != 0 && tb->page_addr[1] == -1
  +#ifdef CONFIG_DEBUG_EXEC
  +                    && !qemu_loglevel_mask(CPU_LOG_EXEC | CPU_LOG_TB_CPU)
  +#endif
  +                ) {
-                      tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb);
-                  }
-                  spin_unlock(&tb_lock);
+                      tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb);
+                  }
+                  spin_unlock(&tb_lock);
Daniil Troshkov - Dec. 2, 2012, 9:08 p.m.
** Changed in: qemu
     Assignee: (unassigned) => Daniil Troshkov (troshkovdanil)

** Changed in: qemu
       Status: New => Invalid

Patch

diff --git a/cpu-exec.c b/cpu-exec.c
index 904ee73..509d50c 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -582,7 +582,11 @@  int cpu_exec(CPUArchState *env)
                 /* see if we can patch the calling TB. When the TB
                    spans two pages, we cannot safely do a direct
                    jump. */
-                if (next_tb != 0 && tb->page_addr[1] == -1) {
+                if (next_tb != 0 && tb->page_addr[1] == -1
+#ifdef CONFIG_DEBUG_EXEC
+                    && !qemu_loglevel_mask(CPU_LOG_EXEC | CPU_LOG_TB_CPU)
+#endif
+                ) {
                     tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb);
                 }
                 spin_unlock(&tb_lock);