All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer
@ 2016-09-19 15:51 Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default Alex Bennée
                   ` (7 more replies)
  0 siblings, 8 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

Hi,

As a precursor to next set of MTTCG reviews in my inbox I had a quick
look at the current state of using ThreadSanitizer with QEMU. There
are a number of patches here:

  1,2,3: workarounds for the compiler when tsan enabled
  4,5,6,7: various fixes using atomic_set/read()
  8: defend the build in Travis

The fixes are mostly theoretical for x86 hosts as individual writes
can't fight with each other to corrupt the final value. However being
explicit about this is the correct thing to do and it reduces the
noise of reports.

With this series I'm still seeing some warnings about qht_insert
racing with tb_alloc but the fixes didn't work so we suspect this
might be a false positive from tsan. I've dropped the workaround from
the series for now.

In system-mode the big generator of warnings is coroutines which are
heavily used in the block layer, for example:

  WARNING: ThreadSanitizer: data race (pid=11820)
    Read of size 8 at 0x7d0400008fa0 by thread T2:
      #0 strlen <null> (libtsan.so.0+0x000000025f6d)
      #1 pthread_setname_np <null> (libpthread.so.0+0x000000012395)
      #2 <null> <null> (libglib-2.0.so.0+0x000000070bad)

    Previous write of size 8 at 0x7d0400008fa0 by main thread (mutexes: write M658):
      #0 malloc <null> (libtsan.so.0+0x0000000254a3)
      #1 g_malloc <null> (libglib-2.0.so.0+0x00000004f728)
      #2 qemu_coroutine_new util/coroutine-gthread.c:144 (qemu-system-aarch64+0x000000c79ad0)
      #3 qemu_coroutine_create util/qemu-coroutine.c:75 (qemu-system-aarch64+0x000000c77f9d)
      #4 bdrv_prwv_co block/io.c:590 (qemu-system-aarch64+0x000000b9dd75)

I think these are fixable with memory barriers but I'm going to need
to re-watch the KVM Forum video on the subject to remind myself of the
black magic that coroutines involves (unless anyone else wants to
tackle that).

With this series applied you can enable ThreadSanitizer with the
following command line:

  ./configure --extra-cflags="-g3 -O0 \
    -fsantize=thread \
    -fsanitize-blacklist=/home/alex/lsrc/qemu/qemu.git/blacklist.tsan" \
    --with-coroutine=gthread --disable-pie --enable-debug --enable-debug-info

breakdown:
  -fsanitize=thread - enables sanitizer
  -fsanitize-blacklist - skip things the compiler finds hard, like SSE
  --with-coroutine=gthread - tsan chokes on other forms of coroutine
  --disable-pie - tsan no longer works with PIE
   --enable-debug --enable-debug-info - better backtraces


Alex Bennée (7):
  ui/vnc-enc-tight: add abort() for unexpected default
  tcg/optimize: move default return out of if statement
  new: blacklist.tsan
  qom/object: update class cache atomically
  cpu: atomically modify cpu->exit_request
  util/qht: atomically set b->hashes
  .travis.yml: add gcc sanitizer build

Paolo Bonzini (1):
  seqlock: use atomic writes for the sequence

 .travis.yml            | 16 ++++++++++++++++
 blacklist.tsan         |  2 ++
 cpu-exec.c             |  8 ++++----
 include/qemu/seqlock.h |  4 ++--
 qom/cpu.c              |  4 ++--
 qom/object.c           | 15 ++++++++-------
 tcg/optimize.c         |  3 +--
 ui/vnc-enc-tight.c     |  2 ++
 util/qht.c             | 10 +++++-----
 9 files changed, 42 insertions(+), 22 deletions(-)
 create mode 100644 blacklist.tsan

-- 
2.9.3

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-20  8:02   ` Marc-André Lureau
  2016-09-19 15:51 ` [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement Alex Bennée
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée, Gerd Hoffmann

When enabling the sanitizer build it will complain about control
reaching a non-void function. Normally the compiler should detect that
there is only one possible exit given a static VNC_SERVER_FB_BYTES.

As we should never get here I added an abort() rather than a default
return value.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 ui/vnc-enc-tight.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
index 49df85e..9e4d254 100644
--- a/ui/vnc-enc-tight.c
+++ b/ui/vnc-enc-tight.c
@@ -710,6 +710,8 @@ static bool check_solid_tile(VncState *vs, int x, int y, int w, int h,
     switch (VNC_SERVER_FB_BYTES) {
     case 4:
         return check_solid_tile32(vs, x, y, w, h, color, samecolor);
+    default:
+        abort();
     }
 }
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-20  8:02   ` Marc-André Lureau
  2016-09-19 15:51 ` [Qemu-devel] [RFC 3/8] new: blacklist.tsan Alex Bennée
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

This is to appease sanitizer builds which complain that:

  "error: control reaches end of non-void function"

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tcg/optimize.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 9998ac7..0f13490 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -468,9 +468,8 @@ static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x,
         default:
             return 2;
         }
-    } else {
-        return 2;
     }
+    return 2;
 }
 
 /* Return 2 if the condition can't be simplified, and the result
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 3/8] new: blacklist.tsan
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-20  8:03   ` Marc-André Lureau
  2016-09-19 15:51 ` [Qemu-devel] [RFC 4/8] seqlock: use atomic writes for the sequence Alex Bennée
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

A list of blacklists for tsan instrumentation. One hopes more can be
removed over time as tsan improves.

The path needs to be absolute so it doesn't break when directories
change during the build:

  ./configure --with-coroutine=gthread --disable-pie \
    --extra-cflags="-g3 -O0 -fsanitize=thread \
    -fsanitize-blacklist=/home/alex/lsrc/qemu/qemu.git/blacklist.tsan"

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 blacklist.tsan | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 blacklist.tsan

diff --git a/blacklist.tsan b/blacklist.tsan
new file mode 100644
index 0000000..9e53a84
--- /dev/null
+++ b/blacklist.tsan
@@ -0,0 +1,2 @@
+# the vector intrinsics upset tsan
+src:bufferiszero.c
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 4/8] seqlock: use atomic writes for the sequence
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
                   ` (2 preceding siblings ...)
  2016-09-19 15:51 ` [Qemu-devel] [RFC 3/8] new: blacklist.tsan Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically Alex Bennée
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

From: Paolo Bonzini <pbonzini@redhat.com>

There is a data race if the sequence is written concurrently to the
read.  In C11 this has undefined behavior.  Use atomic_set; the
read side is already using atomic_read.

Reported-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 include/qemu/seqlock.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h
index 2e2be4c..8dee11d 100644
--- a/include/qemu/seqlock.h
+++ b/include/qemu/seqlock.h
@@ -31,7 +31,7 @@ static inline void seqlock_init(QemuSeqLock *sl)
 /* Lock out other writers and update the count.  */
 static inline void seqlock_write_begin(QemuSeqLock *sl)
 {
-    ++sl->sequence;
+    atomic_set(&sl->sequence, sl->sequence + 1);
 
     /* Write sequence before updating other fields.  */
     smp_wmb();
@@ -42,7 +42,7 @@ static inline void seqlock_write_end(QemuSeqLock *sl)
     /* Write other fields before finalizing sequence.  */
     smp_wmb();
 
-    ++sl->sequence;
+    atomic_set(&sl->sequence, sl->sequence + 1);
 }
 
 static inline unsigned seqlock_read_begin(QemuSeqLock *sl)
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
                   ` (3 preceding siblings ...)
  2016-09-19 15:51 ` [Qemu-devel] [RFC 4/8] seqlock: use atomic writes for the sequence Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-20  8:36   ` Marc-André Lureau
  2016-09-19 15:51 ` [Qemu-devel] [RFC 6/8] cpu: atomically modify cpu->exit_request Alex Bennée
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée, Andreas Färber

The idiom CPU_GET_CLASS(cpu) is fairly extensively used in various
threads and trips of ThreadSanitizer due to the fact it updates
obj->class->object_cast_cache behind the scenes. As this is just a
fast-path cache there is no need to lock updates just ensure that we
don't get torn-updates from two racing lookups. While this is unlikely
on x86 we use the plain atomic_read/set primitives to make this
explicit and keep the sanitizer happy.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 qom/object.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/qom/object.c b/qom/object.c
index 8166b7d..7a05e35 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -614,7 +614,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
     Object *inst;
 
     for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) {
-        if (obj->class->object_cast_cache[i] == typename) {
+        if (atomic_read(&obj->class->object_cast_cache[i]) == typename) {
             goto out;
         }
     }
@@ -631,10 +631,10 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
 
     if (obj && obj == inst) {
         for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
-            obj->class->object_cast_cache[i - 1] =
-                    obj->class->object_cast_cache[i];
+            atomic_set(&obj->class->object_cast_cache[i - 1],
+                       atomic_read(&obj->class->object_cast_cache[i]));
         }
-        obj->class->object_cast_cache[i - 1] = typename;
+        atomic_set(&obj->class->object_cast_cache[i - 1], typename);
     }
 
 out:
@@ -704,7 +704,7 @@ ObjectClass *object_class_dynamic_cast_assert(ObjectClass *class,
     int i;
 
     for (i = 0; class && i < OBJECT_CLASS_CAST_CACHE; i++) {
-        if (class->class_cast_cache[i] == typename) {
+        if (atomic_read(&class->class_cast_cache[i]) == typename) {
             ret = class;
             goto out;
         }
@@ -725,9 +725,10 @@ ObjectClass *object_class_dynamic_cast_assert(ObjectClass *class,
 #ifdef CONFIG_QOM_CAST_DEBUG
     if (class && ret == class) {
         for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
-            class->class_cast_cache[i - 1] = class->class_cast_cache[i];
+            atomic_set(&class->class_cast_cache[i - 1],
+                       atomic_read(&class->class_cast_cache[i]));
         }
-        class->class_cast_cache[i - 1] = typename;
+        atomic_set(&class->class_cast_cache[i - 1], typename);
     }
 out:
 #endif
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 6/8] cpu: atomically modify cpu->exit_request
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
                   ` (4 preceding siblings ...)
  2016-09-19 15:51 ` [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes Alex Bennée
  2016-09-19 15:51 ` [Qemu-devel] [RFC 8/8] .travis.yml: add gcc sanitizer build Alex Bennée
  7 siblings, 0 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée, Peter Crosthwaite

ThreadSanitizer picks up potential races although we already use
barriers to ensure things are in the correct order when processing exit
requests. For now we just use the relaxed atomic_set/atomic_read semantics
to reassure tsan that we can't tear the value.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 cpu-exec.c | 8 ++++----
 qom/cpu.c  | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/cpu-exec.c b/cpu-exec.c
index 9f4bd0b..113d8dc 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -192,7 +192,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
         /* We were asked to stop executing TBs (probably a pending
          * interrupt. We've now stopped, so clear the flag.
          */
-        cpu->tcg_exit_req = 0;
+        atomic_set(&cpu->tcg_exit_req, 0);
     }
     return ret;
 }
@@ -497,8 +497,8 @@ static inline void cpu_handle_interrupt(CPUState *cpu,
             *last_tb = NULL;
         }
     }
-    if (unlikely(cpu->exit_request || replay_has_interrupt())) {
-        cpu->exit_request = 0;
+    if (unlikely(atomic_read(&cpu->exit_request) || replay_has_interrupt())) {
+        atomic_set(&cpu->exit_request, 0);
         cpu->exception_index = EXCP_INTERRUPT;
         cpu_loop_exit(cpu);
     }
@@ -510,7 +510,7 @@ static inline void cpu_loop_exec_tb(CPUState *cpu, TranslationBlock *tb,
 {
     uintptr_t ret;
 
-    if (unlikely(cpu->exit_request)) {
+    if (unlikely(atomic_read(&cpu->exit_request))) {
         return;
     }
 
diff --git a/qom/cpu.c b/qom/cpu.c
index 2553247..47b1597 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -119,10 +119,10 @@ void cpu_reset_interrupt(CPUState *cpu, int mask)
 
 void cpu_exit(CPUState *cpu)
 {
-    cpu->exit_request = 1;
+    atomic_set(&cpu->exit_request, 1);
     /* Ensure cpu_exec will see the exit request after TCG has exited.  */
     smp_wmb();
-    cpu->tcg_exit_req = 1;
+    atomic_set(&cpu->tcg_exit_req, 1);
 }
 
 int cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
                   ` (5 preceding siblings ...)
  2016-09-19 15:51 ` [Qemu-devel] [RFC 6/8] cpu: atomically modify cpu->exit_request Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  2016-09-19 18:06   ` Emilio G. Cota
  2016-09-19 15:51 ` [Qemu-devel] [RFC 8/8] .travis.yml: add gcc sanitizer build Alex Bennée
  7 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

ThreadSanitizer detects a possible race between reading/writing the
hashes. As ordering semantics are already documented for qht we just
need to ensure a race can't tear the hash value so we can use the
relaxed atomic_set/read functions.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 util/qht.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/util/qht.c b/util/qht.c
index 16a8d79..571639d 100644
--- a/util/qht.c
+++ b/util/qht.c
@@ -379,7 +379,7 @@ static void qht_bucket_reset__locked(struct qht_bucket *head)
             if (b->pointers[i] == NULL) {
                 goto done;
             }
-            b->hashes[i] = 0;
+            atomic_set(&b->hashes[i], 0);
             atomic_set(&b->pointers[i], NULL);
         }
         b = b->next;
@@ -444,7 +444,7 @@ void *qht_do_lookup(struct qht_bucket *head, qht_lookup_func_t func,
 
     do {
         for (i = 0; i < QHT_BUCKET_ENTRIES; i++) {
-            if (b->hashes[i] == hash) {
+            if (atomic_read(&b->hashes[i]) == hash) {
                 /* The pointer is dereferenced before seqlock_read_retry,
                  * so (unlike qht_insert__locked) we need to use
                  * atomic_rcu_read here.
@@ -538,8 +538,8 @@ static bool qht_insert__locked(struct qht *ht, struct qht_map *map,
     if (new) {
         atomic_rcu_set(&prev->next, b);
     }
-    b->hashes[i] = hash;
     /* smp_wmb() implicit in seqlock_write_begin.  */
+    atomic_set(&b->hashes[i], hash);
     atomic_set(&b->pointers[i], p);
     seqlock_write_end(&head->sequence);
     return true;
@@ -607,10 +607,10 @@ qht_entry_move(struct qht_bucket *to, int i, struct qht_bucket *from, int j)
     qht_debug_assert(to->pointers[i]);
     qht_debug_assert(from->pointers[j]);
 
-    to->hashes[i] = from->hashes[j];
+    atomic_set(&to->hashes[i], from->hashes[j]);
     atomic_set(&to->pointers[i], from->pointers[j]);
 
-    from->hashes[j] = 0;
+    atomic_set(&from->hashes[j], 0);
     atomic_set(&from->pointers[j], NULL);
 }
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [Qemu-devel] [RFC 8/8] .travis.yml: add gcc sanitizer build
  2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
                   ` (6 preceding siblings ...)
  2016-09-19 15:51 ` [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes Alex Bennée
@ 2016-09-19 15:51 ` Alex Bennée
  7 siblings, 0 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-19 15:51 UTC (permalink / raw)
  To: qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana,
	Alex Bennée

As it seems easy to break the ThreadSanitizer build we should defend it to
ensure that fixes get applied when it breaks. We use the Ubuntu GCC PPA
to get the latest GCC goodness.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .travis.yml | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index f30b10e..5b1c01c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -89,6 +89,7 @@ matrix:
     - env: CONFIG=""
       os: osx
       compiler: clang
+    # Plain Trusty Build
     - env: CONFIG=""
       sudo: required
       addons:
@@ -99,3 +100,18 @@ matrix:
         - sudo apt-get build-dep -qq qemu
         - wget -O - http://people.linaro.org/~alex.bennee/qemu-submodule-git-seed.tar.xz | tar -xvJ
         - git submodule update --init --recursive
+    # Trusty + GCC sanitizers
+    - env: CONFIG="--disable-pie"
+      sudo: required
+      addons:
+      dist: trusty
+      compiler: gcc
+      before_install:
+        - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+        - sudo apt-get update -qq
+        - sudo apt-get install -qq gcc-6
+        - sudo apt-get build-dep -qq qemu
+        - wget -O - http://people.linaro.org/~alex.bennee/qemu-submodule-git-seed.tar.xz | tar -xvJ
+        - git submodule update --init --recursive
+      before_script:
+        - ./configure --cc=gcc-6 ${CONFIG} --extra-cflags="-g3 -O0 -fsanitize=thread -fsanitize-blacklist=${TRAVIS_BUILD_DIR}/blacklist.tsan"
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-19 15:51 ` [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes Alex Bennée
@ 2016-09-19 18:06   ` Emilio G. Cota
  2016-09-19 18:37     ` Paolo Bonzini
  0 siblings, 1 reply; 22+ messages in thread
From: Emilio G. Cota @ 2016-09-19 18:06 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, pbonzini, stefanha, kwolf, mttcg, fred.konrad,
	a.rigo, bobby.prani, nikunj, mark.burton, jan.kiszka, serge.fdrv,
	rth, peter.maydell, claudio.fontana

On Mon, Sep 19, 2016 at 16:51:38 +0100, Alex Bennée wrote:
> ThreadSanitizer detects a possible race between reading/writing the
> hashes. As ordering semantics are already documented for qht we just
> need to ensure a race can't tear the hash value so we can use the
> relaxed atomic_set/read functions.

This was discussed here:

https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg03658.html

To reiterate: reading torn hash values is fine, since the retry will
happen regardless (and all pointers[] remain valid through the RCU
read-critical section).

Couldn't we just tell tsan to ignore it?

Thanks,

		Emilio

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-19 18:06   ` Emilio G. Cota
@ 2016-09-19 18:37     ` Paolo Bonzini
  2016-09-19 19:06       ` Emilio G. Cota
  0 siblings, 1 reply; 22+ messages in thread
From: Paolo Bonzini @ 2016-09-19 18:37 UTC (permalink / raw)
  To: Emilio G. Cota, Alex Bennée
  Cc: qemu-devel, stefanha, kwolf, mttcg, fred.konrad, a.rigo,
	bobby.prani, nikunj, mark.burton, jan.kiszka, serge.fdrv, rth,
	peter.maydell, claudio.fontana



On 19/09/2016 20:06, Emilio G. Cota wrote:
> On Mon, Sep 19, 2016 at 16:51:38 +0100, Alex Bennée wrote:
>> > ThreadSanitizer detects a possible race between reading/writing the
>> > hashes. As ordering semantics are already documented for qht we just
>> > need to ensure a race can't tear the hash value so we can use the
>> > relaxed atomic_set/read functions.
> This was discussed here:
> 
> https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg03658.html
> 
> To reiterate: reading torn hash values is fine, since the retry will
> happen regardless (and all pointers[] remain valid through the RCU
> read-critical section).

True, but C11 says data races are undefined, not merely unspecified.
seqlock-protected data requires a relaxed read and write, because they
are read concurrently in the read and write sides.

Paolo

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-19 18:37     ` Paolo Bonzini
@ 2016-09-19 19:06       ` Emilio G. Cota
  2016-09-20  7:39         ` Paolo Bonzini
  0 siblings, 1 reply; 22+ messages in thread
From: Emilio G. Cota @ 2016-09-19 19:06 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Alex Bennée, qemu-devel, stefanha, kwolf, mttcg,
	fred.konrad, a.rigo, bobby.prani, nikunj, mark.burton,
	jan.kiszka, serge.fdrv, rth, peter.maydell, claudio.fontana

On Mon, Sep 19, 2016 at 20:37:06 +0200, Paolo Bonzini wrote:
> On 19/09/2016 20:06, Emilio G. Cota wrote:
> > On Mon, Sep 19, 2016 at 16:51:38 +0100, Alex Bennée wrote:
> >> > ThreadSanitizer detects a possible race between reading/writing the
> >> > hashes. As ordering semantics are already documented for qht we just
> >> > need to ensure a race can't tear the hash value so we can use the
> >> > relaxed atomic_set/read functions.
> > This was discussed here:
> > 
> > https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg03658.html
> > 
> > To reiterate: reading torn hash values is fine, since the retry will
> > happen regardless (and all pointers[] remain valid through the RCU
> > read-critical section).
> 
> True, but C11 says data races are undefined, not merely unspecified.
> seqlock-protected data requires a relaxed read and write, because they
> are read concurrently in the read and write sides.

Ah I see.

Let me then just point out that this comes at a small perf loss.

Running 'taskset -c 0 tests/qht-bench -n 1 -d 10' (i.e. all lookups) 10 times,
we get:

before the patch:
 $ ./mean.pl 34.04 34.24 34.38 34.25 34.18 34.51 34.46 34.44 34.29 34.08
 34.287 +- 0.160072900059109
after:
 $ ./mean.pl 33.94 34.00 33.52 33.46 33.55 33.71 34.27 34.06 34.28 34.58
 33.937 +- 0.374731014640279

But hey we can live with that.

Cheers,

		E.

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-19 19:06       ` Emilio G. Cota
@ 2016-09-20  7:39         ` Paolo Bonzini
  2016-09-22  9:51           ` Alex Bennée
  0 siblings, 1 reply; 22+ messages in thread
From: Paolo Bonzini @ 2016-09-20  7:39 UTC (permalink / raw)
  To: Emilio G. Cota
  Cc: kwolf, mttcg, claudio.fontana, nikunj, peter.maydell, jan.kiszka,
	mark.burton, qemu-devel, a.rigo, stefanha, serge.fdrv,
	bobby.prani, rth, Alex Bennée, fred.konrad



On 19/09/2016 21:06, Emilio G. Cota wrote:
> Let me then just point out that this comes at a small perf loss.
> 
> Running 'taskset -c 0 tests/qht-bench -n 1 -d 10' (i.e. all lookups) 10 times,
> we get:
> 
> before the patch:
>  $ ./mean.pl 34.04 34.24 34.38 34.25 34.18 34.51 34.46 34.44 34.29 34.08
>  34.287 +- 0.160072900059109
> after:
>  $ ./mean.pl 33.94 34.00 33.52 33.46 33.55 33.71 34.27 34.06 34.28 34.58
>  33.937 +- 0.374731014640279
> 
> But hey we can live with that.

Hmm it shouldn't.  I'll take a look at the generated assembly...

Paolo

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default
  2016-09-19 15:51 ` [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default Alex Bennée
@ 2016-09-20  8:02   ` Marc-André Lureau
  2016-09-20  8:24     ` Paolo Bonzini
  0 siblings, 1 reply; 22+ messages in thread
From: Marc-André Lureau @ 2016-09-20  8:02 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, peter.maydell, claudio.fontana, nikunj, jan.kiszka,
	mark.burton, a.rigo, Gerd Hoffmann, serge.fdrv, bobby.prani, rth,
	fred.konrad

Hi

On Mon, Sep 19, 2016 at 7:58 PM Alex Bennée <alex.bennee@linaro.org> wrote:

> When enabling the sanitizer build it will complain about control
> reaching a non-void function. Normally the compiler should detect that
> there is only one possible exit given a static VNC_SERVER_FB_BYTES.
>
> As we should never get here I added an abort() rather than a default
> return value.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  ui/vnc-enc-tight.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
> index 49df85e..9e4d254 100644
> --- a/ui/vnc-enc-tight.c
> +++ b/ui/vnc-enc-tight.c
> @@ -710,6 +710,8 @@ static bool check_solid_tile(VncState *vs, int x, int
> y, int w, int h,
>      switch (VNC_SERVER_FB_BYTES) {
>      case 4:
>          return check_solid_tile32(vs, x, y, w, h, color, samecolor);
> +    default:
> +        abort();
>      }
>  }
>


Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Looks fine. Would it make sense to use a
G_STATIC_ASSERT(VNC_SERVER_FB_BYTES == 4) above instead?
-- 
Marc-André Lureau

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement
  2016-09-19 15:51 ` [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement Alex Bennée
@ 2016-09-20  8:02   ` Marc-André Lureau
  0 siblings, 0 replies; 22+ messages in thread
From: Marc-André Lureau @ 2016-09-20  8:02 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, peter.maydell, claudio.fontana, nikunj, jan.kiszka,
	mark.burton, a.rigo, serge.fdrv, bobby.prani, rth, fred.konrad

On Mon, Sep 19, 2016 at 7:56 PM Alex Bennée <alex.bennee@linaro.org> wrote:

> This is to appease sanitizer builds which complain that:
>
>   "error: control reaches end of non-void function"
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  tcg/optimize.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/tcg/optimize.c b/tcg/optimize.c
> index 9998ac7..0f13490 100644
> --- a/tcg/optimize.c
> +++ b/tcg/optimize.c
> @@ -468,9 +468,8 @@ static TCGArg do_constant_folding_cond(TCGOpcode op,
> TCGArg x,
>          default:
>              return 2;
>          }
> -    } else {
> -        return 2;
>      }
> +    return 2;
>  }
>
>  /* Return 2 if the condition can't be simplified, and the result
> --
> 2.9.3
>
>
> --
Marc-André Lureau

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 3/8] new: blacklist.tsan
  2016-09-19 15:51 ` [Qemu-devel] [RFC 3/8] new: blacklist.tsan Alex Bennée
@ 2016-09-20  8:03   ` Marc-André Lureau
  0 siblings, 0 replies; 22+ messages in thread
From: Marc-André Lureau @ 2016-09-20  8:03 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, peter.maydell, claudio.fontana, nikunj, jan.kiszka,
	mark.burton, a.rigo, serge.fdrv, bobby.prani, rth, fred.konrad

On Mon, Sep 19, 2016 at 8:01 PM Alex Bennée <alex.bennee@linaro.org> wrote:

> A list of blacklists for tsan instrumentation. One hopes more can be
> removed over time as tsan improves.
>
> The path needs to be absolute so it doesn't break when directories
> change during the build:
>
>   ./configure --with-coroutine=gthread --disable-pie \
>     --extra-cflags="-g3 -O0 -fsanitize=thread \
>     -fsanitize-blacklist=/home/alex/lsrc/qemu/qemu.git/blacklist.tsan"
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  blacklist.tsan | 2 ++
>  1 file changed, 2 insertions(+)
>  create mode 100644 blacklist.tsan
>
> diff --git a/blacklist.tsan b/blacklist.tsan
> new file mode 100644
> index 0000000..9e53a84
> --- /dev/null
> +++ b/blacklist.tsan
> @@ -0,0 +1,2 @@
> +# the vector intrinsics upset tsan
> +src:bufferiszero.c
> --
> 2.9.3
>
>
> --
Marc-André Lureau

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default
  2016-09-20  8:02   ` Marc-André Lureau
@ 2016-09-20  8:24     ` Paolo Bonzini
  2016-09-20 14:59       ` Alex Bennée
  0 siblings, 1 reply; 22+ messages in thread
From: Paolo Bonzini @ 2016-09-20  8:24 UTC (permalink / raw)
  To: Marc-André Lureau, Alex Bennée, qemu-devel, cota,
	stefanha, kwolf
  Cc: mttcg, peter.maydell, claudio.fontana, nikunj, jan.kiszka,
	mark.burton, a.rigo, Gerd Hoffmann, serge.fdrv, bobby.prani, rth,
	fred.konrad



On 20/09/2016 10:02, Marc-André Lureau wrote:
> Hi
> 
> On Mon, Sep 19, 2016 at 7:58 PM Alex Bennée <alex.bennee@linaro.org
> <mailto:alex.bennee@linaro.org>> wrote:
> 
>     When enabling the sanitizer build it will complain about control
>     reaching a non-void function. Normally the compiler should detect that
>     there is only one possible exit given a static VNC_SERVER_FB_BYTES.
> 
>     As we should never get here I added an abort() rather than a default
>     return value.
> 
>     Signed-off-by: Alex Bennée <alex.bennee@linaro.org
>     <mailto:alex.bennee@linaro.org>>
>     ---
>      ui/vnc-enc-tight.c | 2 ++
>      1 file changed, 2 insertions(+)
> 
>     diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
>     index 49df85e..9e4d254 100644
>     --- a/ui/vnc-enc-tight.c
>     +++ b/ui/vnc-enc-tight.c
>     @@ -710,6 +710,8 @@ static bool check_solid_tile(VncState *vs, int
>     x, int y, int w, int h,
>          switch (VNC_SERVER_FB_BYTES) {
>          case 4:
>              return check_solid_tile32(vs, x, y, w, h, color, samecolor);
>     +    default:
>     +        abort();
>          }
>      }
> 
> 
> 
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com
> <mailto:marcandre.lureau@redhat.com>>
> 
> Looks fine. Would it make sense to use a
> G_STATIC_ASSERT(VNC_SERVER_FB_BYTES == 4) above instead?

Or QEMU_BUILD_BUG_ON(VNC_SERVER_FB_BYTES != 4) :)

Paolo

> -- 
> Marc-André Lureau

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically
  2016-09-19 15:51 ` [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically Alex Bennée
@ 2016-09-20  8:36   ` Marc-André Lureau
  2016-09-20 14:59     ` Alex Bennée
  0 siblings, 1 reply; 22+ messages in thread
From: Marc-André Lureau @ 2016-09-20  8:36 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel, pbonzini, cota, stefanha, kwolf
  Cc: mttcg, peter.maydell, claudio.fontana, nikunj, jan.kiszka,
	mark.burton, a.rigo, serge.fdrv, bobby.prani, rth,
	Andreas Färber, fred.konrad

Hi

On Mon, Sep 19, 2016 at 7:54 PM Alex Bennée <alex.bennee@linaro.org> wrote:

> The idiom CPU_GET_CLASS(cpu) is fairly extensively used in various
> threads and trips of ThreadSanitizer due to the fact it updates
> obj->class->object_cast_cache behind the scenes. As this is just a
> fast-path cache there is no need to lock updates just ensure that we
> don't get torn-updates from two racing lookups. While this is unlikely
> on x86 we use the plain atomic_read/set primitives to make this
> explicit and keep the sanitizer happy.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>

Looks fine to me, would be nicer to have an idea of the performance hit,
but I suppose it is marginal.

btw, object_dynamic_cast_assert code is a bit weird: it always inserts at
the end of the array, and shifts the other cached values down (why?). If
there are class hierarchies with a depth and interfaces over 4
(OBJECT_CLASS_CAST_CACHE) this looks like it may be inefficient, no? I
can't find performance tests for object, perhaps it doesn't matter after
all.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  qom/object.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/qom/object.c b/qom/object.c
> index 8166b7d..7a05e35 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -614,7 +614,7 @@ Object *object_dynamic_cast_assert(Object *obj, const
> char *typename,
>      Object *inst;
>
>      for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) {
> -        if (obj->class->object_cast_cache[i] == typename) {
> +        if (atomic_read(&obj->class->object_cast_cache[i]) == typename) {
>              goto out;
>          }
>      }
> @@ -631,10 +631,10 @@ Object *object_dynamic_cast_assert(Object *obj,
> const char *typename,
>
>      if (obj && obj == inst) {
>          for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
> -            obj->class->object_cast_cache[i - 1] =
> -                    obj->class->object_cast_cache[i];
> +            atomic_set(&obj->class->object_cast_cache[i - 1],
> +                       atomic_read(&obj->class->object_cast_cache[i]));
>          }
> -        obj->class->object_cast_cache[i - 1] = typename;
> +        atomic_set(&obj->class->object_cast_cache[i - 1], typename);
>      }
>
>  out:
> @@ -704,7 +704,7 @@ ObjectClass
> *object_class_dynamic_cast_assert(ObjectClass *class,
>      int i;
>
>      for (i = 0; class && i < OBJECT_CLASS_CAST_CACHE; i++) {
> -        if (class->class_cast_cache[i] == typename) {
> +        if (atomic_read(&class->class_cast_cache[i]) == typename) {
>              ret = class;
>              goto out;
>          }
> @@ -725,9 +725,10 @@ ObjectClass
> *object_class_dynamic_cast_assert(ObjectClass *class,
>  #ifdef CONFIG_QOM_CAST_DEBUG
>      if (class && ret == class) {
>          for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
> -            class->class_cast_cache[i - 1] = class->class_cast_cache[i];
> +            atomic_set(&class->class_cast_cache[i - 1],
> +                       atomic_read(&class->class_cast_cache[i]));
>          }
> -        class->class_cast_cache[i - 1] = typename;
> +        atomic_set(&class->class_cast_cache[i - 1], typename);
>      }
>  out:
>  #endif
> --
> 2.9.3
>
>
> --
Marc-André Lureau

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically
  2016-09-20  8:36   ` Marc-André Lureau
@ 2016-09-20 14:59     ` Alex Bennée
  2016-09-20 15:04       ` Paolo Bonzini
  0 siblings, 1 reply; 22+ messages in thread
From: Alex Bennée @ 2016-09-20 14:59 UTC (permalink / raw)
  To: Marc-André Lureau
  Cc: qemu-devel, pbonzini, cota, stefanha, kwolf, mttcg,
	peter.maydell, claudio.fontana, nikunj, jan.kiszka, mark.burton,
	a.rigo, serge.fdrv, bobby.prani, rth, Andreas Färber,
	fred.konrad


Marc-André Lureau <marcandre.lureau@gmail.com> writes:

> Hi
>
> On Mon, Sep 19, 2016 at 7:54 PM Alex Bennée <alex.bennee@linaro.org> wrote:
>
>> The idiom CPU_GET_CLASS(cpu) is fairly extensively used in various
>> threads and trips of ThreadSanitizer due to the fact it updates
>> obj->class->object_cast_cache behind the scenes. As this is just a
>> fast-path cache there is no need to lock updates just ensure that we
>> don't get torn-updates from two racing lookups. While this is unlikely
>> on x86 we use the plain atomic_read/set primitives to make this
>> explicit and keep the sanitizer happy.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>
>
> Looks fine to me, would be nicer to have an idea of the performance hit,
> but I suppose it is marginal.

I was surprised that CONFIG_QOM_CAST_DEBUG is the default because it
does a bunch of stuff on every cast. The other option of course would be
to use --disable-qom-cast-debug when building for sanitizers although
maybe we should just be defaulting to off?

> btw, object_dynamic_cast_assert code is a bit weird: it always inserts at
> the end of the array, and shifts the other cached values down (why?). If
> there are class hierarchies with a depth and interfaces over 4
> (OBJECT_CLASS_CAST_CACHE) this looks like it may be inefficient, no? I
> can't find performance tests for object, perhaps it doesn't matter after
> all.

TBH the whole object model thing is a bit of a mystery to me that I
haven't delved that far into it. I guess I should learn about it some
more at some point.

>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>
>
>> ---
>>  qom/object.c | 15 ++++++++-------
>>  1 file changed, 8 insertions(+), 7 deletions(-)
>>
>> diff --git a/qom/object.c b/qom/object.c
>> index 8166b7d..7a05e35 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -614,7 +614,7 @@ Object *object_dynamic_cast_assert(Object *obj, const
>> char *typename,
>>      Object *inst;
>>
>>      for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) {
>> -        if (obj->class->object_cast_cache[i] == typename) {
>> +        if (atomic_read(&obj->class->object_cast_cache[i]) == typename) {
>>              goto out;
>>          }
>>      }
>> @@ -631,10 +631,10 @@ Object *object_dynamic_cast_assert(Object *obj,
>> const char *typename,
>>
>>      if (obj && obj == inst) {
>>          for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
>> -            obj->class->object_cast_cache[i - 1] =
>> -                    obj->class->object_cast_cache[i];
>> +            atomic_set(&obj->class->object_cast_cache[i - 1],
>> +                       atomic_read(&obj->class->object_cast_cache[i]));
>>          }
>> -        obj->class->object_cast_cache[i - 1] = typename;
>> +        atomic_set(&obj->class->object_cast_cache[i - 1], typename);
>>      }
>>
>>  out:
>> @@ -704,7 +704,7 @@ ObjectClass
>> *object_class_dynamic_cast_assert(ObjectClass *class,
>>      int i;
>>
>>      for (i = 0; class && i < OBJECT_CLASS_CAST_CACHE; i++) {
>> -        if (class->class_cast_cache[i] == typename) {
>> +        if (atomic_read(&class->class_cast_cache[i]) == typename) {
>>              ret = class;
>>              goto out;
>>          }
>> @@ -725,9 +725,10 @@ ObjectClass
>> *object_class_dynamic_cast_assert(ObjectClass *class,
>>  #ifdef CONFIG_QOM_CAST_DEBUG
>>      if (class && ret == class) {
>>          for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
>> -            class->class_cast_cache[i - 1] = class->class_cast_cache[i];
>> +            atomic_set(&class->class_cast_cache[i - 1],
>> +                       atomic_read(&class->class_cast_cache[i]));
>>          }
>> -        class->class_cast_cache[i - 1] = typename;
>> +        atomic_set(&class->class_cast_cache[i - 1], typename);
>>      }
>>  out:
>>  #endif
>> --
>> 2.9.3
>>
>>
>> --
> Marc-André Lureau


--
Alex Bennée

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default
  2016-09-20  8:24     ` Paolo Bonzini
@ 2016-09-20 14:59       ` Alex Bennée
  0 siblings, 0 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-20 14:59 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Marc-André Lureau, qemu-devel, cota, stefanha, kwolf, mttcg,
	peter.maydell, claudio.fontana, nikunj, jan.kiszka, mark.burton,
	a.rigo, Gerd Hoffmann, serge.fdrv, bobby.prani, rth, fred.konrad


Paolo Bonzini <pbonzini@redhat.com> writes:

> On 20/09/2016 10:02, Marc-André Lureau wrote:
>> Hi
>>
>> On Mon, Sep 19, 2016 at 7:58 PM Alex Bennée <alex.bennee@linaro.org
>> <mailto:alex.bennee@linaro.org>> wrote:
>>
>>     When enabling the sanitizer build it will complain about control
>>     reaching a non-void function. Normally the compiler should detect that
>>     there is only one possible exit given a static VNC_SERVER_FB_BYTES.
>>
>>     As we should never get here I added an abort() rather than a default
>>     return value.
>>
>>     Signed-off-by: Alex Bennée <alex.bennee@linaro.org
>>     <mailto:alex.bennee@linaro.org>>
>>     ---
>>      ui/vnc-enc-tight.c | 2 ++
>>      1 file changed, 2 insertions(+)
>>
>>     diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
>>     index 49df85e..9e4d254 100644
>>     --- a/ui/vnc-enc-tight.c
>>     +++ b/ui/vnc-enc-tight.c
>>     @@ -710,6 +710,8 @@ static bool check_solid_tile(VncState *vs, int
>>     x, int y, int w, int h,
>>          switch (VNC_SERVER_FB_BYTES) {
>>          case 4:
>>              return check_solid_tile32(vs, x, y, w, h, color, samecolor);
>>     +    default:
>>     +        abort();
>>          }
>>      }
>>
>>
>>
>> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com
>> <mailto:marcandre.lureau@redhat.com>>
>>
>> Looks fine. Would it make sense to use a
>> G_STATIC_ASSERT(VNC_SERVER_FB_BYTES == 4) above instead?
>
> Or QEMU_BUILD_BUG_ON(VNC_SERVER_FB_BYTES != 4) :)

I'll do that!

>
> Paolo
>
>> --
>> Marc-André Lureau


--
Alex Bennée

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically
  2016-09-20 14:59     ` Alex Bennée
@ 2016-09-20 15:04       ` Paolo Bonzini
  0 siblings, 0 replies; 22+ messages in thread
From: Paolo Bonzini @ 2016-09-20 15:04 UTC (permalink / raw)
  To: Alex Bennée, Marc-André Lureau
  Cc: qemu-devel, cota, stefanha, kwolf, mttcg, peter.maydell,
	claudio.fontana, nikunj, jan.kiszka, mark.burton, a.rigo,
	serge.fdrv, bobby.prani, rth, Andreas Färber, fred.konrad



On 20/09/2016 16:59, Alex Bennée wrote:
> > Looks fine to me, would be nicer to have an idea of the performance hit,
> > but I suppose it is marginal.
> 
> I was surprised that CONFIG_QOM_CAST_DEBUG is the default because it
> does a bunch of stuff on every cast. The other option of course would be
> to use --disable-qom-cast-debug when building for sanitizers although
> maybe we should just be defaulting to off?

The casts are not too expensive and usually are not in the fast paths
(we use explicit C casts there) so we were leaving them enabled.  They
do find bugs sometimes.

Paolo

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes
  2016-09-20  7:39         ` Paolo Bonzini
@ 2016-09-22  9:51           ` Alex Bennée
  0 siblings, 0 replies; 22+ messages in thread
From: Alex Bennée @ 2016-09-22  9:51 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Emilio G. Cota, kwolf, mttcg, claudio.fontana, nikunj,
	peter.maydell, jan.kiszka, mark.burton, qemu-devel, a.rigo,
	stefanha, serge.fdrv, bobby.prani, rth, fred.konrad

[-- Attachment #1: Type: text/plain, Size: 931 bytes --]


Paolo Bonzini <pbonzini@redhat.com> writes:

> On 19/09/2016 21:06, Emilio G. Cota wrote:
>> Let me then just point out that this comes at a small perf loss.
>>
>> Running 'taskset -c 0 tests/qht-bench -n 1 -d 10' (i.e. all lookups) 10 times,
>> we get:
>>
>> before the patch:
>>  $ ./mean.pl 34.04 34.24 34.38 34.25 34.18 34.51 34.46 34.44 34.29 34.08
>>  34.287 +- 0.160072900059109
>> after:
>>  $ ./mean.pl 33.94 34.00 33.52 33.46 33.55 33.71 34.27 34.06 34.28 34.58
>>  33.937 +- 0.374731014640279
>>
>> But hey we can live with that.
>
> Hmm it shouldn't.  I'll take a look at the generated assembly...

AFAICT the main change is:

     cmp    0x0(%rbp),%ecx

Becomes:

     mov    0x0(%rbp),%eax
     cmp    %eax,%ecx

There is a bunch of associated code motion and register changes also
associated with it but that seems to be the sum change of the using
atomic on x86.

See the attached for the full side-by-side diff.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: side-by-side compare of qht.o with atomic and non-atomic access to b->hashes --]
[-- Type: text/x-diff, Size: 148955 bytes --]

pre-atomic-qht.o -> pre-atomic-qht.o -> /tmp/pre-atomic-qht.o.S
/tmp/pre-atomic-qht.o.S
util/qht.o -> qht.o -> /tmp/qht.o.S
/tmp/pre-atomic-qht.o.S

pre-atomic-qht.o:     file format elf64-x86-64					   |	util/qht.o:     file format elf64-x86-64


Disassembly of section .text:								Disassembly of section .text:

0000000000000000 <qht_map_create>:							0000000000000000 <qht_map_create>:
qht_map_create():									qht_map_create():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:329						/home/alex/lsrc/qemu/qemu.git/util/qht.----:329
       ----:	push   %rbp								       ----:	push   %rbp
       ----:	push   %rbx								       ----:	push   %rbx
       ----:	mov    %rdi,%rbp							       ----:	mov    %rdi,%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:333						/home/alex/lsrc/qemu/qemu.git/util/qht.----:333
       ----:	mov    $0x30,%edi							       ----:	mov    $0x30,%edi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:329						/home/alex/lsrc/qemu/qemu.git/util/qht.----:329
       ----:	sub    $0x8,%rsp							       ----:	sub    $0x8,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:333						/home/alex/lsrc/qemu/qemu.git/util/qht.----:333
       ----:	callq  13 <qht_map_create+0x13>						       ----:	callq  13 <qht_map_create+0x13>
      ----:	mov    %rax,%rbx							      ----:	mov    %rax,%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:334						/home/alex/lsrc/qemu/qemu.git/util/qht.----:334
      ----:	mov    %rbp,0x18(%rax)							      ----:	mov    %rbp,0x18(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:336						/home/alex/lsrc/qemu/qemu.git/util/qht.----:336
      ----:	movq   $0x0,0x20(%rax)							      ----:	movq   $0x0,0x20(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:337						/home/alex/lsrc/qemu/qemu.git/util/qht.----:337
      ----:	mov    %rbp,%rax							      ----:	mov    %rbp,%rax
      ----:	shr    $0x3,%rax							      ----:	shr    $0x3,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:341						/home/alex/lsrc/qemu/qemu.git/util/qht.----:341
      ----:	test   %rax,%rax							      ----:	test   %rax,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:337						/home/alex/lsrc/qemu/qemu.git/util/qht.----:337
      ----:	mov    %rax,0x28(%rbx)							      ----:	mov    %rax,0x28(%rbx)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:341						/home/alex/lsrc/qemu/qemu.git/util/qht.----:341
      ----:	je     9d <qht_map_create+0x9d>						      ----:	je     9d <qht_map_create+0x9d>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:345						/home/alex/lsrc/qemu/qemu.git/util/qht.----:345
      ----:	mov    %rbp,%rsi							      ----:	mov    %rbp,%rsi
      ----:	mov    $0x40,%edi							      ----:	mov    $0x40,%edi
      ----:	shl    $0x6,%rsi							      ----:	shl    $0x6,%rsi
      ----:	callq  43 <qht_map_create+0x43>						      ----:	callq  43 <qht_map_create+0x43>
      ----:	mov    %rax,0x10(%rbx)							      ----:	mov    %rax,0x10(%rbx)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:329 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:329 (discriminator 3)
      ----:	mov    %rax,%rdx							      ----:	mov    %rax,%rdx
      ----:	xor    %esi,%esi							      ----:	xor    %esi,%esi
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)			/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)
      ----:	xor    %eax,%eax							      ----:	xor    %eax,%eax
      ----:	jmp    54 <qht_map_create+0x54>						      ----:	jmp    54 <qht_map_create+0x54>
      ----:	mov    0x10(%rbx),%rdx							      ----:	mov    0x10(%rbx),%rdx
qht_map_create():									qht_map_create():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:348 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:348 (discriminator 3)
      ----:	mov    %rsi,%rcx							      ----:	mov    %rsi,%rcx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)
      ----:	add    $0x1,%rsi							      ----:	add    $0x1,%rsi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:348 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:348 (discriminator 3)
      ----:	shl    $0x6,%rcx							      ----:	shl    $0x6,%rcx
      ----:	add    %rcx,%rdx							      ----:	add    %rcx,%rdx
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)			/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)
      ----:	lea    0x8(%rdx),%rdi							      ----:	lea    0x8(%rdx),%rdi
      ----:	mov    %rdx,%rcx							      ----:	mov    %rdx,%rcx
      ----:	movq   $0x0,0x38(%rdx)							      ----:	movq   $0x0,0x38(%rdx)
      ----:	and    $0xfffffffffffffff8,%rdi						      ----:	and    $0xfffffffffffffff8,%rdi
      ----:	sub    %rdi,%rcx							      ----:	sub    %rdi,%rcx
      ----:	add    $0x40,%ecx							      ----:	add    $0x40,%ecx
      ----:	shr    $0x3,%ecx							      ----:	shr    $0x3,%ecx
qht_map_create():									qht_map_create():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)
      ----:	cmp    %rsi,%rbp							      ----:	cmp    %rsi,%rbp
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)			/usr/include/x86_64-linux-gnu/bits/string3.h:90 (discriminator 3)
      ----:	rep stos %rax,%es:(%rdi)						      ----:	rep stos %rax,%es:(%rdi)
qemu_spin_init():									qemu_spin_init():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:71 (discriminator 3)		/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:71 (discriminator 3)
      ----:	movl   $0x0,(%rdx)							      ----:	movl   $0x0,(%rdx)
seqlock_init():										seqlock_init():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:28 (discriminator 3)		/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:28 (discriminator 3)
      ----:	movl   $0x0,0x4(%rdx)							      ----:	movl   $0x0,0x4(%rdx)
qht_map_create():									qht_map_create():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:347 (discriminator 3)
      ----:	jne    50 <qht_map_create+0x50>						      ----:	jne    50 <qht_map_create+0x50>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:351						/home/alex/lsrc/qemu/qemu.git/util/qht.----:351
      ----:	add    $0x8,%rsp							      ----:	add    $0x8,%rsp
      ----:	mov    %rbx,%rax							      ----:	mov    %rbx,%rax
      ----:	pop    %rbx								      ----:	pop    %rbx
      ----:	pop    %rbp								      ----:	pop    %rbp
      ----:	retq   									      ----:	retq   
/home/alex/lsrc/qemu/qemu.git/util/qht.----:345						/home/alex/lsrc/qemu/qemu.git/util/qht.----:345
      ----:	mov    %rbp,%rsi							      ----:	mov    %rbp,%rsi
      ----:	mov    $0x40,%edi							      ----:	mov    $0x40,%edi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:342						/home/alex/lsrc/qemu/qemu.git/util/qht.----:342
      ----:	movq   $0x1,0x28(%rbx)							      ----:	movq   $0x1,0x28(%rbx)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:345						/home/alex/lsrc/qemu/qemu.git/util/qht.----:345
      ----:	shl    $0x6,%rsi							      ----:	shl    $0x6,%rsi
      ----:	callq  b6 <qht_map_create+0xb6>						      ----:	callq  b6 <qht_map_create+0xb6>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:347						/home/alex/lsrc/qemu/qemu.git/util/qht.----:347
      ----:	test   %rbp,%rbp							      ----:	test   %rbp,%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:345						/home/alex/lsrc/qemu/qemu.git/util/qht.----:345
      ----:	mov    %rax,0x10(%rbx)							      ----:	mov    %rax,0x10(%rbx)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:347						/home/alex/lsrc/qemu/qemu.git/util/qht.----:347
      ----:	je     93 <qht_map_create+0x93>						      ----:	je     93 <qht_map_create+0x93>
      ----:	jmp    47 <qht_map_create+0x47>						      ----:	jmp    47 <qht_map_create+0x47>
      ----:	nopl   0x0(%rax,%rax,1)							      ----:	nopl   0x0(%rax,%rax,1)
      ----:	nopw   %cs:0x0(%rax,%rax,1)						      ----:	nopw   %cs:0x0(%rax,%rax,1)

00000000000000d0 <qht_map_destroy>:							00000000000000d0 <qht_map_destroy>:
qht_map_destroy():									qht_map_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:318						/home/alex/lsrc/qemu/qemu.git/util/qht.----:318
      ----:	push   %r12								      ----:	push   %r12
      ----:	push   %rbp								      ----:	push   %rbp
      ----:	mov    %rdi,%r12							      ----:	mov    %rdi,%r12
      ----:	push   %rbx								      ----:	push   %rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:321						/home/alex/lsrc/qemu/qemu.git/util/qht.----:321
      ----:	cmpq   $0x0,0x18(%rdi)							      ----:	cmpq   $0x0,0x18(%rdi)
      ----:	mov    0x10(%rdi),%rax							      ----:	mov    0x10(%rdi),%rax
      ----:	je     121 <qht_map_destroy+0x51>					      ----:	je     121 <qht_map_destroy+0x51>
      ----:	xor    %ebp,%ebp							      ----:	xor    %ebp,%ebp
      ----:	nopl   0x0(%rax)							      ----:	nopl   0x0(%rax)
      ----:	mov    %rbp,%rdx							      ----:	mov    %rbp,%rdx
      ----:	shl    $0x6,%rdx							      ----:	shl    $0x6,%rdx
      ----:	mov    0x38(%rax,%rdx,1),%rdi						      ----:	mov    0x38(%rax,%rdx,1),%rdi
qht_chain_destroy():									qht_chain_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:309 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:309 (discriminator 3)
      ----:	test   %rdi,%rdi							      ----:	test   %rdi,%rdi
      ----:	je     116 <qht_map_destroy+0x46>					      ----:	je     116 <qht_map_destroy+0x46>
      ----:	nopl   0x0(%rax)							      ----:	nopl   0x0(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:311						/home/alex/lsrc/qemu/qemu.git/util/qht.----:311
     ----:	mov    0x38(%rdi),%rbx							     ----:	mov    0x38(%rdi),%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:312						/home/alex/lsrc/qemu/qemu.git/util/qht.----:312
     ----:	callq  109 <qht_map_destroy+0x39>					     ----:	callq  109 <qht_map_destroy+0x39>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:309						/home/alex/lsrc/qemu/qemu.git/util/qht.----:309
     ----:	test   %rbx,%rbx							     ----:	test   %rbx,%rbx
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
     ----:	jne    100 <qht_map_destroy+0x30>					     ----:	jne    100 <qht_map_destroy+0x30>
     ----:	mov    0x10(%r12),%rax							     ----:	mov    0x10(%r12),%rax
qht_map_destroy():									qht_map_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:321 (discriminator 3)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:321 (discriminator 3)
     ----:	add    $0x1,%rbp							     ----:	add    $0x1,%rbp
     ----:	cmp    %rbp,0x18(%r12)							     ----:	cmp    %rbp,0x18(%r12)
     ----:	ja     e8 <qht_map_destroy+0x18>					     ----:	ja     e8 <qht_map_destroy+0x18>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:324						/home/alex/lsrc/qemu/qemu.git/util/qht.----:324
     ----:	mov    %rax,%rdi							     ----:	mov    %rax,%rdi
     ----:	callq  129 <qht_map_destroy+0x59>					     ----:	callq  129 <qht_map_destroy+0x59>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:326						/home/alex/lsrc/qemu/qemu.git/util/qht.----:326
     ----:	pop    %rbx								     ----:	pop    %rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:325						/home/alex/lsrc/qemu/qemu.git/util/qht.----:325
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:326						/home/alex/lsrc/qemu/qemu.git/util/qht.----:326
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:325						/home/alex/lsrc/qemu/qemu.git/util/qht.----:325
     ----:	jmpq   135 <qht_map_destroy+0x65>					     ----:	jmpq   135 <qht_map_destroy+0x65>
     ----:	nop									     ----:	nop
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000140 <qht_insert__locked.isra.10>:					   |	0000000000000140 <qht_entry_move>:
										   >	qht_entry_move():
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:610
										   >	     ----:	movslq %ecx,%rcx
										   >	     ----:	movslq %esi,%rsi
										   >	     ----:	mov    0x8(%rdx,%rcx,4),%r8d
										   >	     ----:	lea    0x0(,%rsi,4),%rax
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:611
										   >	     ----:	shl    $0x3,%rsi
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:610
										   >	     ----:	mov    %r8d,0x8(%rdi,%rax,1)
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:611
										   >	     ----:	mov    0x18(%rdx,%rcx,8),%rax
										   >	     ----:	mov    %rax,0x18(%rdi,%rsi,1)
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:613
										   >	     ----:	lea    0x0(,%rcx,4),%rax
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:614
										   >	     ----:	shl    $0x3,%rcx
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:613
										   >	     ----:	movl   $0x0,0x8(%rdx,%rax,1)
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:614
										   >	     ----:	movq   $0x0,0x18(%rdx,%rcx,1)
										   >	     ----:	retq   
										   >	     ----:	xchg   %ax,%ax
										   >	     ----:	nopw   %cs:0x0(%rax,%rax,1)
										   >
										   >	0000000000000190 <qht_insert__locked.isra.10>:
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:503						/home/alex/lsrc/qemu/qemu.git/util/qht.----:503
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
     ----:	mov    %rdi,%r14							     ----:	mov    %rdi,%r14
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	mov    %rsi,%r12							     ----:	mov    %rsi,%r12
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	mov    %ecx,%r13d							     ----:	mov    %ecx,%r13d
     ----:	mov    %rsi,%rbx							     ----:	mov    %rsi,%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:508						/home/alex/lsrc/qemu/qemu.git/util/qht.----:508
     ----:	xor    %edi,%edi							     ----:	xor    %edi,%edi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:503						/home/alex/lsrc/qemu/qemu.git/util/qht.----:503
     ----:	sub    $0x10,%rsp							     ----:	sub    $0x10,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:524						/home/alex/lsrc/qemu/qemu.git/util/qht.----:524
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:514						/home/alex/lsrc/qemu/qemu.git/util/qht.----:514
     ----:	mov    0x18(%rbx,%rax,8),%rcx						     ----:	mov    0x18(%rbx,%rax,8),%rcx
     ----:	movslq %eax,%rsi							     ----:	movslq %eax,%rsi
     ----:	test   %rcx,%rcx							     ----:	test   %rcx,%rcx
     ----:	je     1a0 <qht_insert__locked.isra.10+0x60>			   |	     ----:	je     1f0 <qht_insert__locked.isra.10+0x60>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:515						/home/alex/lsrc/qemu/qemu.git/util/qht.----:515
     ----:	cmp    %rdx,%rcx							     ----:	cmp    %rdx,%rcx
     ----:	je     190 <qht_insert__locked.isra.10+0x50>			   |	     ----:	je     1e0 <qht_insert__locked.isra.10+0x50>
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:513						/home/alex/lsrc/qemu/qemu.git/util/qht.----:513
     ----:	cmp    $0x4,%rax							     ----:	cmp    $0x4,%rax
     ----:	jne    15c <qht_insert__locked.isra.10+0x1c>			   |	     ----:	jne    1ac <qht_insert__locked.isra.10+0x1c>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:523						/home/alex/lsrc/qemu/qemu.git/util/qht.----:523
     ----:	mov    0x38(%rbx),%rbp							     ----:	mov    0x38(%rbx),%rbp
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:524						/home/alex/lsrc/qemu/qemu.git/util/qht.----:524
     ----:	test   %rbp,%rbp							     ----:	test   %rbp,%rbp
     ----:	je     1e6 <qht_insert__locked.isra.10+0xa6>			   |	     ----:	je     23e <qht_insert__locked.isra.10+0xae>
     ----:	mov    %rbp,%rbx							     ----:	mov    %rbp,%rbx
     ----:	jmp    15a <qht_insert__locked.isra.10+0x1a>			   |	     ----:	jmp    1aa <qht_insert__locked.isra.10+0x1a>
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:546						/home/alex/lsrc/qemu/qemu.git/util/qht.----:546
     ----:	add    $0x10,%rsp							     ----:	add    $0x10,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:516						/home/alex/lsrc/qemu/qemu.git/util/qht.----:516
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:546						/home/alex/lsrc/qemu/qemu.git/util/qht.----:546
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	retq   									     ----:	retq   
     ----:	nop									     ----:	nop
/home/alex/lsrc/qemu/qemu.git/util/qht.----:509						/home/alex/lsrc/qemu/qemu.git/util/qht.----:509
     ----:	xor    %r9d,%r9d							     ----:	xor    %r9d,%r9d
seqlock_write_begin():									seqlock_write_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34
     ----:	mov    0x4(%r12),%eax							     ----:	mov    0x4(%r12),%eax
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,0x4(%r12)							     ----:	mov    %eax,0x4(%r12)
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:538						/home/alex/lsrc/qemu/qemu.git/util/qht.----:538
     ----:	test   %r9,%r9								     ----:	test   %r9,%r9
     ----:	je     1b9 <qht_insert__locked.isra.10+0x79>			   |	     ----:	je     209 <qht_insert__locked.isra.10+0x79>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:539						/home/alex/lsrc/qemu/qemu.git/util/qht.----:539
     ----:	mov    %rbx,0x38(%rdi)							     ----:	mov    %rbx,0x38(%rdi)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:541					   |	/home/alex/lsrc/qemu/qemu.git/util/qht.----:542
     ----:	mov    %r13d,0x8(%rbx,%rsi,4)					   |	     ----:	lea    0x0(,%rsi,4),%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:543						/home/alex/lsrc/qemu/qemu.git/util/qht.----:543
     ----:	shl    $0x3,%rsi							     ----:	shl    $0x3,%rsi
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:542
										   >	     ----:	mov    %r13d,0x8(%rbx,%rax,1)
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:543
     ----:	mov    %rdx,0x18(%rbx,%rsi,1)						     ----:	mov    %rdx,0x18(%rbx,%rsi,1)
seqlock_write_end():									seqlock_write_end():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45
     ----:	mov    0x4(%r12),%eax							     ----:	mov    0x4(%r12),%eax
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,0x4(%r12)							     ----:	mov    %eax,0x4(%r12)
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:546						/home/alex/lsrc/qemu/qemu.git/util/qht.----:546
     ----:	add    $0x10,%rsp							     ----:	add    $0x10,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:545						/home/alex/lsrc/qemu/qemu.git/util/qht.----:545
     ----:	mov    $0x1,%eax							     ----:	mov    $0x1,%eax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:546						/home/alex/lsrc/qemu/qemu.git/util/qht.----:546
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	retq   									     ----:	retq   
/home/alex/lsrc/qemu/qemu.git/util/qht.----:526						/home/alex/lsrc/qemu/qemu.git/util/qht.----:526
     ----:	mov    $0x40,%esi							     ----:	mov    $0x40,%esi
     ----:	mov    $0x40,%edi							     ----:	mov    $0x40,%edi
     ----:	mov    %r8,0x8(%rsp)							     ----:	mov    %r8,0x8(%rsp)
     ----:	mov    %rdx,(%rsp)							     ----:	mov    %rdx,(%rsp)
     ----:	callq  1fe <qht_insert__locked.isra.10+0xbe>			   |	     ----:	callq  256 <qht_insert__locked.isra.10+0xc6>
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90						/usr/include/x86_64-linux-gnu/bits/string3.h:90
     ----:	lea    0x8(%rax),%rdi							     ----:	lea    0x8(%rax),%rdi
     ----:	mov    %rax,%rcx							     ----:	mov    %rax,%rcx
     ----:	movq   $0x0,(%rax)							     ----:	movq   $0x0,(%rax)
     ----:	movq   $0x0,0x38(%rax)							     ----:	movq   $0x0,0x38(%rax)
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:526						/home/alex/lsrc/qemu/qemu.git/util/qht.----:526
     ----:	mov    %rax,%r9								     ----:	mov    %rax,%r9
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90						/usr/include/x86_64-linux-gnu/bits/string3.h:90
     ----:	mov    %rbp,%rax							     ----:	mov    %rbp,%rax
     ----:	and    $0xfffffffffffffff8,%rdi						     ----:	and    $0xfffffffffffffff8,%rdi
     ----:	sub    %rdi,%rcx							     ----:	sub    %rdi,%rcx
     ----:	add    $0x40,%ecx							     ----:	add    $0x40,%ecx
     ----:	shr    $0x3,%ecx							     ----:	shr    $0x3,%ecx
     ----:	rep stos %rax,%es:(%rdi)						     ----:	rep stos %rax,%es:(%rdi)
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:530						/home/alex/lsrc/qemu/qemu.git/util/qht.----:530
     ----:	lea    0x20(%r14),%rax							     ----:	lea    0x20(%r14),%rax
     ----:	lock addq $0x1,(%rax)							     ----:	lock addq $0x1,(%rax)
qht_map_needs_resize():									qht_map_needs_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:301						/home/alex/lsrc/qemu/qemu.git/util/qht.----:301
     ----:	mov    0x20(%r14),%rax							     ----:	mov    0x20(%r14),%rax
qht_insert__locked():									qht_insert__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:531						/home/alex/lsrc/qemu/qemu.git/util/qht.----:531
     ----:	cmp    0x28(%r14),%rax							     ----:	cmp    0x28(%r14),%rax
     ----:	mov    (%rsp),%rdx							     ----:	mov    (%rsp),%rdx
     ----:	jbe    25c <qht_insert__locked.isra.10+0x11c>			   |	     ----:	jbe    2b4 <qht_insert__locked.isra.10+0x124>
     ----:	mov    0x8(%rsp),%r8							     ----:	mov    0x8(%rsp),%r8
     ----:	test   %r8,%r8								     ----:	test   %r8,%r8
     ----:	je     25c <qht_insert__locked.isra.10+0x11c>			   |	     ----:	je     2b4 <qht_insert__locked.isra.10+0x124>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:532						/home/alex/lsrc/qemu/qemu.git/util/qht.----:532
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
     ----:	movb   $0x1,(%r8)							     ----:	movb   $0x1,(%r8)
     ----:	mov    %r9,%rbx								     ----:	mov    %r9,%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:529						/home/alex/lsrc/qemu/qemu.git/util/qht.----:529
     ----:	xor    %esi,%esi							     ----:	xor    %esi,%esi
     ----:	jmpq   1a3 <qht_insert__locked.isra.10+0x63>			   |	     ----:	jmpq   1f3 <qht_insert__locked.isra.10+0x63>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:531						/home/alex/lsrc/qemu/qemu.git/util/qht.----:531
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:529						/home/alex/lsrc/qemu/qemu.git/util/qht.----:529
     ----:	xor    %esi,%esi							     ----:	xor    %esi,%esi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:531						/home/alex/lsrc/qemu/qemu.git/util/qht.----:531
     ----:	mov    %r9,%rbx								     ----:	mov    %r9,%rbx
     ----:	jmpq   1a3 <qht_insert__locked.isra.10+0x63>			   |	     ----:	jmpq   1f3 <qht_insert__locked.isra.10+0x63>
qht_insert__locked.isra.10():								qht_insert__locked.isra.10():
     ----:	nopl   0x0(%rax)						   |	     ----:	nopl   0x0(%rax,%rax,1)
										   >	     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000270 <qht_do_resize>:						   |	00000000000002d0 <qht_do_resize>:
qht_do_resize():									qht_do_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:750						/home/alex/lsrc/qemu/qemu.git/util/qht.----:750
     ----:	push   %r15								     ----:	push   %r15
     ----:	push   %r14								     ----:	push   %r14
     ----:	mov    %rsi,%r14							     ----:	mov    %rsi,%r14
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	mov    %rdi,%r12							     ----:	mov    %rdi,%r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x18,%rsp							     ----:	sub    $0x18,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:753						/home/alex/lsrc/qemu/qemu.git/util/qht.----:753
     ----:	mov    (%rdi),%rbp							     ----:	mov    (%rdi),%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:754						/home/alex/lsrc/qemu/qemu.git/util/qht.----:754
     ----:	mov    0x18(%rsi),%rdx							     ----:	mov    0x18(%rsi),%rdx
     ----:	mov    0x18(%rbp),%rax							     ----:	mov    0x18(%rbp),%rax
     ----:	cmp    %rax,%rdx							     ----:	cmp    %rax,%rdx
     ----:	je     31d <qht_do_resize+0xad>					   |	     ----:	je     37d <qht_do_resize+0xad>
qht_map_iter__all_locked():								qht_map_iter__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	xor    %ebx,%ebx							     ----:	xor    %ebx,%ebx
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     2fc <qht_do_resize+0x8c>					   |	     ----:	je     35c <qht_do_resize+0x8c>
     ----:	nop									     ----:	nop
/home/alex/lsrc/qemu/qemu.git/util/qht.----:717						/home/alex/lsrc/qemu/qemu.git/util/qht.----:717
     ----:	mov    %rbx,%r15							     ----:	mov    %rbx,%r15
     ----:	shl    $0x6,%r15							     ----:	shl    $0x6,%r15
     ----:	add    0x10(%rbp),%r15							     ----:	add    0x10(%rbp),%r15
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	xor    %r13d,%r13d							     ----:	xor    %r13d,%r13d
qht_bucket_iter():									qht_bucket_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:701						/home/alex/lsrc/qemu/qemu.git/util/qht.----:701
     ----:	mov    0x18(%r15,%r13,2),%rdx						     ----:	mov    0x18(%r15,%r13,2),%rdx
     ----:	test   %rdx,%rdx							     ----:	test   %rdx,%rdx
     ----:	je     2f2 <qht_do_resize+0x82>					   |	     ----:	je     352 <qht_do_resize+0x82>
qht_map_copy():										qht_map_copy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:738						/home/alex/lsrc/qemu/qemu.git/util/qht.----:738
     ----:	mov    0x18(%r14),%rax							     ----:	mov    0x18(%r14),%rax
qht_bucket_iter():									qht_bucket_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:704						/home/alex/lsrc/qemu/qemu.git/util/qht.----:704
     ----:	mov    0x8(%r15,%r13,1),%ecx						     ----:	mov    0x8(%r15,%r13,1),%ecx
qht_map_copy():										qht_map_copy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:738						/home/alex/lsrc/qemu/qemu.git/util/qht.----:738
     ----:	xor    %r8d,%r8d							     ----:	xor    %r8d,%r8d
     ----:	mov    %r14,%rdi							     ----:	mov    %r14,%rdi
     ----:	add    $0x4,%r13							     ----:	add    $0x4,%r13
     ----:	lea    -0x1(%rax),%rsi							     ----:	lea    -0x1(%rax),%rsi
     ----:	and    %ecx,%esi							     ----:	and    %ecx,%esi
     ----:	shl    $0x6,%rsi							     ----:	shl    $0x6,%rsi
     ----:	add    0x10(%r14),%rsi							     ----:	add    0x10(%r14),%rsi
     ----:	callq  140 <qht_insert__locked.isra.10>				   |	     ----:	callq  190 <qht_insert__locked.isra.10>
qht_bucket_iter():									qht_bucket_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:700						/home/alex/lsrc/qemu/qemu.git/util/qht.----:700
     ----:	cmp    $0x10,%r13							     ----:	cmp    $0x10,%r13
     ----:	jne    2b3 <qht_do_resize+0x43>					   |	     ----:	jne    313 <qht_do_resize+0x43>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:706						/home/alex/lsrc/qemu/qemu.git/util/qht.----:706
     ----:	mov    0x38(%r15),%r15							     ----:	mov    0x38(%r15),%r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:707						/home/alex/lsrc/qemu/qemu.git/util/qht.----:707
     ----:	test   %r15,%r15							     ----:	test   %r15,%r15
     ----:	jne    2b0 <qht_do_resize+0x40>					   |	     ----:	jne    310 <qht_do_resize+0x40>
qht_map_iter__all_locked():								qht_map_iter__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	add    $0x1,%rbx							     ----:	add    $0x1,%rbx
     ----:	cmp    0x18(%rbp),%rbx							     ----:	cmp    0x18(%rbp),%rbx
     ----:	jb     2a0 <qht_do_resize+0x30>					   |	     ----:	jb     300 <qht_do_resize+0x30>
qht_do_resize():									qht_do_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:759						/home/alex/lsrc/qemu/qemu.git/util/qht.----:759
     ----:	mov    %r14,(%r12)							     ----:	mov    %r14,(%r12)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:761						/home/alex/lsrc/qemu/qemu.git/util/qht.----:761
     ----:	add    $0x18,%rsp							     ----:	add    $0x18,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:760						/home/alex/lsrc/qemu/qemu.git/util/qht.----:760
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	lea    -0x23e(%rip),%rsi        # d0 <qht_map_destroy>		   |	     ----:	lea    -0x29e(%rip),%rsi        # d0 <qht_map_destroy>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:761						/home/alex/lsrc/qemu/qemu.git/util/qht.----:761
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	pop    %r15								     ----:	pop    %r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:760						/home/alex/lsrc/qemu/qemu.git/util/qht.----:760
     ----:	jmpq   31d <qht_do_resize+0xad>					   |	     ----:	jmpq   37d <qht_do_resize+0xad>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:754 (discriminator 1)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:754 (discriminator 1)
     ----:	mov    %rdx,0x8(%rsp)							     ----:	mov    %rdx,0x8(%rsp)
     ----:	test   %rdx,%rdx							     ----:	test   %rdx,%rdx
     ----:	fildll 0x8(%rsp)							     ----:	fildll 0x8(%rsp)
     ----:	js     373 <qht_do_resize+0x103>				   |	     ----:	js     3d3 <qht_do_resize+0x103>
     ----:	sub    $0x8,%rsp							     ----:	sub    $0x8,%rsp
     ----:	lea    0x0(%rip),%r9        # 336 <qht_do_resize+0xc6>		   |	     ----:	lea    0x0(%rip),%r9        # 396 <qht_do_resize+0xc6>
     ----:	lea    0x0(%rip),%r8        # 33d <qht_do_resize+0xcd>		   |	     ----:	lea    0x0(%rip),%r8        # 39d <qht_do_resize+0xcd>
     ----:	pushq  $0x69								     ----:	pushq  $0x69
     ----:	lea    0x0(%rip),%rcx        # 346 <qht_do_resize+0xd6>		   |	     ----:	lea    0x0(%rip),%rcx        # 3a6 <qht_do_resize+0xd6>
     ----:	lea    0x0(%rip),%rsi        # 34d <qht_do_resize+0xdd>		   |	     ----:	lea    0x0(%rip),%rsi        # 3ad <qht_do_resize+0xdd>
     ----:	mov    $0x2f2,%edx							     ----:	mov    $0x2f2,%edx
     ----:	xor    %edi,%edi							     ----:	xor    %edi,%edi
     ----:	sub    $0x20,%rsp							     ----:	sub    $0x20,%rsp
     ----:	fld    %st(0)								     ----:	fld    %st(0)
     ----:	fstpt  0x10(%rsp)							     ----:	fstpt  0x10(%rsp)
     ----:	fstpt  (%rsp)								     ----:	fstpt  (%rsp)
     ----:	callq  366 <qht_do_resize+0xf6>					   |	     ----:	callq  3c6 <qht_do_resize+0xf6>
     ----:	add    $0x30,%rsp							     ----:	add    $0x30,%rsp
     ----:	mov    0x18(%rbp),%rax							     ----:	mov    0x18(%rbp),%rax
     ----:	jmpq   298 <qht_do_resize+0x28>					   |	     ----:	jmpq   2f8 <qht_do_resize+0x28>
     ----:	fadds  0x0(%rip)        # 379 <qht_do_resize+0x109>		   |	     ----:	fadds  0x0(%rip)        # 3d9 <qht_do_resize+0x109>
     ----:	jmp    32b <qht_do_resize+0xbb>					   |	     ----:	jmp    38b <qht_do_resize+0xbb>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)

0000000000000380 <qht_bucket_reset__locked>:					   |	00000000000003e0 <qht_bucket_reset__locked>:
seqlock_write_begin():									seqlock_write_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34
     ----:	mov    0x4(%rdi),%eax							     ----:	mov    0x4(%rdi),%eax
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,0x4(%rdi)							     ----:	mov    %eax,0x4(%rdi)
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:37					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:37
     ----:	mov    %rdi,%rcx							     ----:	mov    %rdi,%rcx
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
     ----:	lea    0x18(%rcx),%rax							     ----:	lea    0x18(%rcx),%rax
     ----:	lea    0x8(%rcx),%rdx							     ----:	lea    0x8(%rcx),%rdx
     ----:	lea    0x38(%rcx),%rsi							     ----:	lea    0x38(%rcx),%rsi
qht_bucket_reset__locked():								qht_bucket_reset__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:379						/home/alex/lsrc/qemu/qemu.git/util/qht.----:379
     ----:	cmpq   $0x0,(%rax)							     ----:	cmpq   $0x0,(%rax)
     ----:	je     3c6 <qht_bucket_reset__locked+0x46>			   |	     ----:	je     426 <qht_bucket_reset__locked+0x46>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:382 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:382 (discriminator 2)
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
     ----:	add    $0x8,%rax							     ----:	add    $0x8,%rax
     ----:	add    $0x4,%rdx							     ----:	add    $0x4,%rdx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:383 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:383 (discriminator 2)
     ----:	movq   $0x0,-0x8(%rax)							     ----:	movq   $0x0,-0x8(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:378 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:378 (discriminator 2)
     ----:	cmp    %rsi,%rax							     ----:	cmp    %rsi,%rax
     ----:	jne    39c <qht_bucket_reset__locked+0x1c>			   |	     ----:	jne    3fc <qht_bucket_reset__locked+0x1c>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:385						/home/alex/lsrc/qemu/qemu.git/util/qht.----:385
     ----:	mov    0x38(%rcx),%rcx							     ----:	mov    0x38(%rcx),%rcx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:386						/home/alex/lsrc/qemu/qemu.git/util/qht.----:386
     ----:	test   %rcx,%rcx							     ----:	test   %rcx,%rcx
     ----:	jne    390 <qht_bucket_reset__locked+0x10>			   |	     ----:	jne    3f0 <qht_bucket_reset__locked+0x10>
seqlock_write_end():									seqlock_write_end():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45
     ----:	mov    0x4(%rdi),%eax							     ----:	mov    0x4(%rdi),%eax
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,0x4(%rdi)							     ----:	mov    %eax,0x4(%rdi)
qht_bucket_reset__locked():								qht_bucket_reset__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:389						/home/alex/lsrc/qemu/qemu.git/util/qht.----:389
     ----:	retq   									     ----:	retq   

00000000000003d0 <qht_lookup__slowpath>:					   |	0000000000000430 <qht_lookup__slowpath>:
qht_lookup__slowpath():									qht_lookup__slowpath():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:468						/home/alex/lsrc/qemu/qemu.git/util/qht.----:468
     ----:	push   %r15								     ----:	push   %r15
     ----:	push   %r14								     ----:	push   %r14
     ----:	lea    0x4(%rdi),%r15							     ----:	lea    0x4(%rdi),%r15
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	mov    %rdi,%r9							   |	     ----:	mov    %rdi,%r14
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x28,%rsp							     ----:	sub    $0x28,%rsp
     ----:	mov    %rsi,0x18(%rsp)						   |	     ----:	mov    %rsi,0x10(%rsp)
										   >	     ----:	mov    %rdx,0x18(%rsp)
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51 (discriminator 1)		/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51 (discriminator 1)
     ----:	mov    (%r15),%r14d						   |	     ----:	mov    (%r15),%r13d
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55 (discriminator 1)		/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55 (discriminator 1)
     ----:	and    $0xfffffffe,%r14d					   |	     ----:	and    $0xfffffffe,%r13d
qht_do_lookup():									qht_do_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:442 (discriminator 1)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:442 (discriminator 1)
     ----:	mov    %r9,%r12							   |	     ----:	mov    %r14,%r12
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55 (discriminator 1)		/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55 (discriminator 1)
     ----:	mov    %r14d,0x14(%rsp)						   |	     ----:	mov    %r13d,0xc(%rsp)
     ----:	lea    0x8(%r12),%rbp							     ----:	lea    0x8(%r12),%rbp
     ----:	lea    0x18(%r12),%rbx							     ----:	lea    0x18(%r12),%rbx
     ----:	lea    0x38(%r12),%r13						   |	     ----:	lea    0x38(%r12),%rdx
qht_do_lookup():									qht_do_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:447						/home/alex/lsrc/qemu/qemu.git/util/qht.----:447
     ----:	cmp    0x0(%rbp),%ecx						   |	     ----:	mov    0x0(%rbp),%eax
     ----:	je     430 <qht_lookup__slowpath+0x60>				   |	     ----:	cmp    %eax,%ecx
										   >	     ----:	je     490 <qht_lookup__slowpath+0x60>
     ----:	add    $0x8,%rbx							     ----:	add    $0x8,%rbx
     ----:	add    $0x4,%rbp							     ----:	add    $0x4,%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:446						/home/alex/lsrc/qemu/qemu.git/util/qht.----:446
     ----:	cmp    %r13,%rbx						   |	     ----:	cmp    %rdx,%rbx
     ----:	jne    408 <qht_lookup__slowpath+0x38>				   |	     ----:	jne    46d <qht_lookup__slowpath+0x3d>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:459						/home/alex/lsrc/qemu/qemu.git/util/qht.----:459
     ----:	mov    0x38(%r12),%r12							     ----:	mov    0x38(%r12),%r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:460						/home/alex/lsrc/qemu/qemu.git/util/qht.----:460
     ----:	test   %r12,%r12							     ----:	test   %r12,%r12
     ----:	jne    3f9 <qht_lookup__slowpath+0x29>				   |	     ----:	jne    45e <qht_lookup__slowpath+0x2e>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:462						/home/alex/lsrc/qemu/qemu.git/util/qht.----:462
     ----:	xor    %r14d,%r14d						   |	     ----:	xor    %r13d,%r13d
     ----:	jmp    463 <qht_lookup__slowpath+0x93>				   |	     ----:	jmp    4bb <qht_lookup__slowpath+0x8b>
     ----:	nopl   0x0(%rax)						   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:452						/home/alex/lsrc/qemu/qemu.git/util/qht.----:452
     ----:	mov    (%rbx),%r14						   |	     ----:	mov    (%rbx),%r13
/home/alex/lsrc/qemu/qemu.git/util/qht.----:454						/home/alex/lsrc/qemu/qemu.git/util/qht.----:454
     ----:	test   %r14,%r14						   |	     ----:	test   %r13,%r13
     ----:	je     40d <qht_lookup__slowpath+0x3d>				   |	     ----:	je     474 <qht_lookup__slowpath+0x44>
     ----:	mov    %ecx,0x10(%rsp)						   |	     ----:	mov    %ecx,0x8(%rsp)
     ----:	mov    %r9,0x8(%rsp)						   <
     ----:	mov    %rdx,%rsi						   <
     ----:	mov    %rdx,(%rsp)							     ----:	mov    %rdx,(%rsp)
     ----:	mov    %r14,%rdi						   |	     ----:	mov    %r13,%rdi
     ----:	mov    0x18(%rsp),%rax						   |	     ----:	mov    0x18(%rsp),%rsi
										   >	     ----:	mov    0x10(%rsp),%rax
     ----:	callq  *%rax								     ----:	callq  *%rax
     ----:	test   %al,%al								     ----:	test   %al,%al
     ----:	mov    (%rsp),%rdx							     ----:	mov    (%rsp),%rdx
     ----:	mov    0x8(%rsp),%r9						   |	     ----:	mov    0x8(%rsp),%ecx
     ----:	mov    0x10(%rsp),%ecx						   |	     ----:	je     474 <qht_lookup__slowpath+0x44>
     ----:	je     40d <qht_lookup__slowpath+0x3d>				   <
seqlock_read_retry():									seqlock_read_retry():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62
     ----:	mov    (%r15),%eax							     ----:	mov    (%r15),%eax
qht_lookup__slowpath():									qht_lookup__slowpath():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:475						/home/alex/lsrc/qemu/qemu.git/util/qht.----:475
     ----:	cmp    0x14(%rsp),%eax						   |	     ----:	cmp    0xc(%rsp),%eax
     ----:	jne    3ea <qht_lookup__slowpath+0x1a>				   |	     ----:	jne    44f <qht_lookup__slowpath+0x1f>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:477						/home/alex/lsrc/qemu/qemu.git/util/qht.----:477
     ----:	add    $0x28,%rsp							     ----:	add    $0x28,%rsp
     ----:	mov    %r14,%rax						   |	     ----:	mov    %r13,%rax
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	pop    %r15								     ----:	pop    %r15
     ----:	retq   									     ----:	retq   
     ----:	nopl   0x0(%rax)						   <
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000490 <qht_grow_maybe>:						   |	00000000000004e0 <qht_grow_maybe>:
qht_grow_maybe():									qht_grow_maybe():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:549						/home/alex/lsrc/qemu/qemu.git/util/qht.----:549
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:556						/home/alex/lsrc/qemu/qemu.git/util/qht.----:556
     ----:	lea    0x8(%rdi),%rbp							     ----:	lea    0x8(%rdi),%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:549						/home/alex/lsrc/qemu/qemu.git/util/qht.----:549
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	mov    %rdi,%r12							     ----:	mov    %rdi,%r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:556						/home/alex/lsrc/qemu/qemu.git/util/qht.----:556
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	callq  4a3 <qht_grow_maybe+0x13>				   |	     ----:	callq  4f3 <qht_grow_maybe+0x13>
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	je     4b0 <qht_grow_maybe+0x20>				   |	     ----:	je     500 <qht_grow_maybe+0x20>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:569						/home/alex/lsrc/qemu/qemu.git/util/qht.----:569
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	retq   									     ----:	retq   
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:559						/home/alex/lsrc/qemu/qemu.git/util/qht.----:559
     ----:	mov    (%r12),%rbx							     ----:	mov    (%r12),%rbx
qht_map_needs_resize():									qht_map_needs_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:301						/home/alex/lsrc/qemu/qemu.git/util/qht.----:301
     ----:	mov    0x20(%rbx),%rax							     ----:	mov    0x20(%rbx),%rax
qht_grow_maybe():									qht_grow_maybe():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:561						/home/alex/lsrc/qemu/qemu.git/util/qht.----:561
     ----:	cmp    0x28(%rbx),%rax							     ----:	cmp    0x28(%rbx),%rax
     ----:	ja     4d0 <qht_grow_maybe+0x40>				   |	     ----:	ja     520 <qht_grow_maybe+0x40>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:569						/home/alex/lsrc/qemu/qemu.git/util/qht.----:569
     ----:	pop    %rbx								     ----:	pop    %rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:568						/home/alex/lsrc/qemu/qemu.git/util/qht.----:568
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:569						/home/alex/lsrc/qemu/qemu.git/util/qht.----:569
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:568						/home/alex/lsrc/qemu/qemu.git/util/qht.----:568
     ----:	jmpq   4ca <qht_grow_maybe+0x3a>				   |	     ----:	jmpq   51a <qht_grow_maybe+0x3a>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:562						/home/alex/lsrc/qemu/qemu.git/util/qht.----:562
     ----:	mov    0x18(%rbx),%rax							     ----:	mov    0x18(%rbx),%rax
     ----:	lea    (%rax,%rax,1),%rdi						     ----:	lea    (%rax,%rax,1),%rdi
     ----:	callq  0 <qht_map_create>						     ----:	callq  0 <qht_map_create>
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	xor    %ecx,%ecx							     ----:	xor    %ecx,%ecx
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%r8d							     ----:	mov    $0x1,%r8d
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	jne    4fa <qht_grow_maybe+0x6a>				   |	     ----:	jne    54a <qht_grow_maybe+0x6a>
     ----:	jmp    520 <qht_grow_maybe+0x90>				   |	     ----:	jmp    570 <qht_grow_maybe+0x90>
     ----:	xchg   %ax,%ax								     ----:	xchg   %ax,%ax
     ----:	add    $0x1,%rcx							     ----:	add    $0x1,%rcx
     ----:	cmp    0x18(%rbx),%rcx							     ----:	cmp    0x18(%rbx),%rcx
     ----:	jae    520 <qht_grow_maybe+0x90>				   |	     ----:	jae    570 <qht_grow_maybe+0x90>
     ----:	mov    %rcx,%rdx							     ----:	mov    %rcx,%rdx
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rbx),%rdx							     ----:	add    0x10(%rbx),%rdx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %r8d,%edi							     ----:	mov    %r8d,%edi
     ----:	xchg   %edi,(%rdx)							     ----:	xchg   %edi,(%rdx)
     ----:	test   %edi,%edi							     ----:	test   %edi,%edi
     ----:	je     4f0 <qht_grow_maybe+0x60>				   |	     ----:	je     540 <qht_grow_maybe+0x60>
     ----:	jmp    512 <qht_grow_maybe+0x82>				   |	     ----:	jmp    562 <qht_grow_maybe+0x82>
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rdx),%edi							     ----:	mov    (%rdx),%edi
     ----:	test   %edi,%edi							     ----:	test   %edi,%edi
     ----:	jne    510 <qht_grow_maybe+0x80>				   |	     ----:	jne    560 <qht_grow_maybe+0x80>
     ----:	jmp    505 <qht_grow_maybe+0x75>				   |	     ----:	jmp    555 <qht_grow_maybe+0x75>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qht_grow_maybe():									qht_grow_maybe():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:565						/home/alex/lsrc/qemu/qemu.git/util/qht.----:565
     ----:	mov    %rax,%rsi							     ----:	mov    %rax,%rsi
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  270 <qht_do_resize>					   |	     ----:	callq  2d0 <qht_do_resize>
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
     ----:	je     4be <qht_grow_maybe+0x2e>				   |	     ----:	je     50e <qht_grow_maybe+0x2e>
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rbx),%rdx							     ----:	add    0x10(%rbx),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%rbx),%rax							     ----:	cmp    0x18(%rbx),%rax
     ----:	jb     538 <qht_grow_maybe+0xa8>				   |	     ----:	jb     588 <qht_grow_maybe+0xa8>
qht_grow_maybe():									qht_grow_maybe():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:569						/home/alex/lsrc/qemu/qemu.git/util/qht.----:569
     ----:	pop    %rbx								     ----:	pop    %rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:568						/home/alex/lsrc/qemu/qemu.git/util/qht.----:568
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:569						/home/alex/lsrc/qemu/qemu.git/util/qht.----:569
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:568						/home/alex/lsrc/qemu/qemu.git/util/qht.----:568
     ----:	jmpq   55f <qht_grow_maybe+0xcf>				   |	     ----:	jmpq   5af <qht_grow_maybe+0xcf>
     ----:	nop									     ----:	nop

0000000000000560 <qht_init>:							   |	00000000000005b0 <qht_init>:
qht_init():										qht_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:354						/home/alex/lsrc/qemu/qemu.git/util/qht.----:354
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
qht_elems_to_buckets():									qht_elems_to_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:187						/home/alex/lsrc/qemu/qemu.git/util/qht.----:187
     ----:	shr    $0x2,%rsi							     ----:	shr    $0x2,%rsi
qht_init():										qht_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:354						/home/alex/lsrc/qemu/qemu.git/util/qht.----:354
     ----:	mov    %rdi,%rbp							     ----:	mov    %rdi,%rbp
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	mov    $0x1,%ebx							     ----:	mov    $0x1,%ebx
qht_init():										qht_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:354						/home/alex/lsrc/qemu/qemu.git/util/qht.----:354
     ----:	sub    $0x8,%rsp							     ----:	sub    $0x8,%rsp
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	test   %rsi,%rsi							     ----:	test   %rsi,%rsi
     ----:	je     58b <qht_init+0x2b>					   |	     ----:	je     5db <qht_init+0x2b>
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	lea    -0x1(%rsi),%rcx							     ----:	lea    -0x1(%rsi),%rcx
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	bsr    %rsi,%rax							     ----:	bsr    %rsi,%rax
     ----:	mov    %rsi,%rbx							     ----:	mov    %rsi,%rbx
     ----:	xor    $0x3f,%rax							     ----:	xor    $0x3f,%rax
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	test   %rsi,%rcx							     ----:	test   %rsi,%rcx
     ----:	jne    5aa <qht_init+0x4a>					   |	     ----:	jne    5fa <qht_init+0x4a>
qht_init():										qht_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:359						/home/alex/lsrc/qemu/qemu.git/util/qht.----:359
     ----:	lea    0x8(%rbp),%rdi							     ----:	lea    0x8(%rbp),%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:358						/home/alex/lsrc/qemu/qemu.git/util/qht.----:358
     ----:	mov    %edx,0x30(%rbp)							     ----:	mov    %edx,0x30(%rbp)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:359						/home/alex/lsrc/qemu/qemu.git/util/qht.----:359
     ----:	callq  597 <qht_init+0x37>					   |	     ----:	callq  5e7 <qht_init+0x37>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:360						/home/alex/lsrc/qemu/qemu.git/util/qht.----:360
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
     ----:	callq  0 <qht_map_create>						     ----:	callq  0 <qht_map_create>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:361						/home/alex/lsrc/qemu/qemu.git/util/qht.----:361
     ----:	mov    %rax,0x0(%rbp)							     ----:	mov    %rax,0x0(%rbp)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:362						/home/alex/lsrc/qemu/qemu.git/util/qht.----:362
     ----:	add    $0x8,%rsp							     ----:	add    $0x8,%rsp
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	retq   									     ----:	retq   
     ----:	mov    $0x40,%ecx							     ----:	mov    $0x40,%ecx
     ----:	mov    $0x1,%ebx							     ----:	mov    $0x1,%ebx
     ----:	sub    %eax,%ecx							     ----:	sub    %eax,%ecx
     ----:	shl    %cl,%rbx								     ----:	shl    %cl,%rbx
     ----:	jmp    58b <qht_init+0x2b>					   |	     ----:	jmp    5db <qht_init+0x2b>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)

00000000000005c0 <qht_destroy>:							   |	0000000000000610 <qht_destroy>:
qht_destroy():										qht_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:366						/home/alex/lsrc/qemu/qemu.git/util/qht.----:366
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	mov    %rdi,%rbx							     ----:	mov    %rdi,%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:367						/home/alex/lsrc/qemu/qemu.git/util/qht.----:367
     ----:	mov    (%rdi),%rdi							     ----:	mov    (%rdi),%rdi
     ----:	callq  d0 <qht_map_destroy>						     ----:	callq  d0 <qht_map_destroy>
memset():										memset():
/usr/include/x86_64-linux-gnu/bits/string3.h:90						/usr/include/x86_64-linux-gnu/bits/string3.h:90
     ----:	lea    0x8(%rbx),%rdi							     ----:	lea    0x8(%rbx),%rdi
     ----:	movq   $0x0,(%rbx)							     ----:	movq   $0x0,(%rbx)
     ----:	movq   $0x0,0x30(%rbx)							     ----:	movq   $0x0,0x30(%rbx)
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	and    $0xfffffffffffffff8,%rdi						     ----:	and    $0xfffffffffffffff8,%rdi
     ----:	sub    %rdi,%rbx							     ----:	sub    %rdi,%rbx
     ----:	lea    0x38(%rbx),%ecx							     ----:	lea    0x38(%rbx),%ecx
     ----:	shr    $0x3,%ecx							     ----:	shr    $0x3,%ecx
     ----:	rep stos %rax,%es:(%rdi)						     ----:	rep stos %rax,%es:(%rdi)
qht_destroy():										qht_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:369						/home/alex/lsrc/qemu/qemu.git/util/qht.----:369
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	retq   									     ----:	retq   
     ----:	nopl   (%rax)								     ----:	nopl   (%rax)
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000600 <qht_reset>:							   |	0000000000000650 <qht_reset>:
qht_reset():										qht_reset():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:403						/home/alex/lsrc/qemu/qemu.git/util/qht.----:403
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	mov    %rdi,%rbp							     ----:	mov    %rdi,%rbp
     ----:	push   %rbx								     ----:	push   %rbx
qht_map_lock_buckets__no_stale():							qht_map_lock_buckets__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:247						/home/alex/lsrc/qemu/qemu.git/util/qht.----:247
     ----:	mov    (%rdi),%rcx							     ----:	mov    (%rdi),%rcx
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	cmpq   $0x0,0x18(%rcx)							     ----:	cmpq   $0x0,0x18(%rcx)
     ----:	je     73f <qht_reset+0x13f>					   |	     ----:	je     78f <qht_reset+0x13f>
     ----:	xor    %edx,%edx							     ----:	xor    %edx,%edx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%edi							     ----:	mov    $0x1,%edi
     ----:	jmp    62d <qht_reset+0x2d>					   |	     ----:	jmp    67d <qht_reset+0x2d>
     ----:	xchg   %ax,%ax								     ----:	xchg   %ax,%ax
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	mov    0x18(%rcx),%rax							     ----:	mov    0x18(%rcx),%rax
     ----:	add    $0x1,%rdx							     ----:	add    $0x1,%rdx
     ----:	cmp    %rax,%rdx							     ----:	cmp    %rax,%rdx
     ----:	jae    658 <qht_reset+0x58>					   |	     ----:	jae    6a8 <qht_reset+0x58>
     ----:	mov    %rdx,%rax							     ----:	mov    %rdx,%rax
     ----:	shl    $0x6,%rax							     ----:	shl    $0x6,%rax
     ----:	add    0x10(%rcx),%rax							     ----:	add    0x10(%rcx),%rax
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %edi,%esi							     ----:	mov    %edi,%esi
     ----:	xchg   %esi,(%rax)							     ----:	xchg   %esi,(%rax)
     ----:	test   %esi,%esi							     ----:	test   %esi,%esi
     ----:	je     620 <qht_reset+0x20>					   |	     ----:	je     670 <qht_reset+0x20>
     ----:	jmp    64a <qht_reset+0x4a>					   |	     ----:	jmp    69a <qht_reset+0x4a>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rax),%esi							     ----:	mov    (%rax),%esi
     ----:	test   %esi,%esi							     ----:	test   %esi,%esi
     ----:	jne    648 <qht_reset+0x48>					   |	     ----:	jne    698 <qht_reset+0x48>
     ----:	jmp    638 <qht_reset+0x38>					   |	     ----:	jmp    688 <qht_reset+0x38>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
     ----:	mov    0x0(%rbp),%rbx							     ----:	mov    0x0(%rbp),%rbx
qht_map_lock_buckets__no_stale():							qht_map_lock_buckets__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:249						/home/alex/lsrc/qemu/qemu.git/util/qht.----:249
     ----:	cmp    %rbx,%rcx							     ----:	cmp    %rbx,%rcx
     ----:	jne    6b8 <qht_reset+0xb8>					   |	     ----:	jne    708 <qht_reset+0xb8>
qht_map_reset__all_locked():								qht_map_reset__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:396						/home/alex/lsrc/qemu/qemu.git/util/qht.----:396
     ----:	xor    %r8d,%r8d							     ----:	xor    %r8d,%r8d
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
     ----:	je     6b3 <qht_reset+0xb3>					   |	     ----:	je     703 <qht_reset+0xb3>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:397						/home/alex/lsrc/qemu/qemu.git/util/qht.----:397
     ----:	mov    %r8,%rdi								     ----:	mov    %r8,%rdi
     ----:	shl    $0x6,%rdi							     ----:	shl    $0x6,%rdi
     ----:	add    0x10(%rbx),%rdi							     ----:	add    0x10(%rbx),%rdi
     ----:	callq  380 <qht_bucket_reset__locked>				   |	     ----:	callq  3e0 <qht_bucket_reset__locked>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:396						/home/alex/lsrc/qemu/qemu.git/util/qht.----:396
     ----:	mov    0x18(%rbx),%rax							     ----:	mov    0x18(%rbx),%rax
     ----:	add    $0x1,%r8								     ----:	add    $0x1,%r8
     ----:	cmp    %rax,%r8								     ----:	cmp    %rax,%r8
     ----:	jb     670 <qht_reset+0x70>					   |	     ----:	jb     6c0 <qht_reset+0x70>
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     6b3 <qht_reset+0xb3>					   |	     ----:	je     703 <qht_reset+0xb3>
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rbx),%rdx							     ----:	add    0x10(%rbx),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%rbx),%rax							     ----:	cmp    0x18(%rbx),%rax
     ----:	jb     698 <qht_reset+0x98>					   |	     ----:	jb     6e8 <qht_reset+0x98>
qht_reset():										qht_reset():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:409						/home/alex/lsrc/qemu/qemu.git/util/qht.----:409
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	retq   									     ----:	retq   
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     6db <qht_reset+0xdb>					   |	     ----:	je     72b <qht_reset+0xdb>
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	nop									     ----:	nop
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rcx),%rdx							     ----:	add    0x10(%rcx),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%rcx),%rax							     ----:	cmp    0x18(%rcx),%rax
     ----:	jb     6c0 <qht_reset+0xc0>					   |	     ----:	jb     710 <qht_reset+0xc0>
qht_map_lock_buckets__no_stale():							qht_map_lock_buckets__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:256						/home/alex/lsrc/qemu/qemu.git/util/qht.----:256
     ----:	lea    0x8(%rbp),%r12							     ----:	lea    0x8(%rbp),%r12
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  6e7 <qht_reset+0xe7>					   |	     ----:	callq  737 <qht_reset+0xe7>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:257						/home/alex/lsrc/qemu/qemu.git/util/qht.----:257
     ----:	mov    0x0(%rbp),%rbx							     ----:	mov    0x0(%rbp),%rbx
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	xor    %edx,%edx							     ----:	xor    %edx,%edx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%esi							     ----:	mov    $0x1,%esi
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
     ----:	jne    70a <qht_reset+0x10a>					   |	     ----:	jne    75a <qht_reset+0x10a>
     ----:	jmp    732 <qht_reset+0x132>					   |	     ----:	jmp    782 <qht_reset+0x132>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
     ----:	add    $0x1,%rdx							     ----:	add    $0x1,%rdx
     ----:	cmp    0x18(%rbx),%rdx							     ----:	cmp    0x18(%rbx),%rdx
     ----:	jae    732 <qht_reset+0x132>					   |	     ----:	jae    782 <qht_reset+0x132>
     ----:	mov    %rdx,%rax							     ----:	mov    %rdx,%rax
     ----:	shl    $0x6,%rax							     ----:	shl    $0x6,%rax
     ----:	add    0x10(%rbx),%rax							     ----:	add    0x10(%rbx),%rax
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %esi,%ecx							     ----:	mov    %esi,%ecx
     ----:	xchg   %ecx,(%rax)							     ----:	xchg   %ecx,(%rax)
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	je     700 <qht_reset+0x100>					   |	     ----:	je     750 <qht_reset+0x100>
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rax),%ecx							     ----:	mov    (%rax),%ecx
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	je     715 <qht_reset+0x115>					   |	     ----:	je     765 <qht_reset+0x115>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rax),%ecx							     ----:	mov    (%rax),%ecx
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	jne    728 <qht_reset+0x128>					   |	     ----:	jne    778 <qht_reset+0x128>
     ----:	jmp    715 <qht_reset+0x115>					   |	     ----:	jmp    765 <qht_reset+0x115>
qht_map_lock_buckets__no_stale():							qht_map_lock_buckets__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:259						/home/alex/lsrc/qemu/qemu.git/util/qht.----:259
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  73a <qht_reset+0x13a>					   |	     ----:	callq  78a <qht_reset+0x13a>
     ----:	jmpq   661 <qht_reset+0x61>					   |	     ----:	jmpq   6b1 <qht_reset+0x61>
     ----:	mov    (%rdi),%rbx							     ----:	mov    (%rdi),%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:249						/home/alex/lsrc/qemu/qemu.git/util/qht.----:249
     ----:	cmp    %rbx,%rcx							     ----:	cmp    %rbx,%rcx
     ----:	je     661 <qht_reset+0x61>					   |	     ----:	je     6b1 <qht_reset+0x61>
     ----:	jmp    6db <qht_reset+0xdb>					   |	     ----:	jmp    72b <qht_reset+0xdb>
qht_reset():										qht_reset():
     ----:	nopl   (%rax)								     ----:	nopl   (%rax)

0000000000000750 <qht_reset_size>:						   |	00000000000007a0 <qht_reset_size>:
qht_elems_to_buckets():									qht_elems_to_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:187						/home/alex/lsrc/qemu/qemu.git/util/qht.----:187
     ----:	shr    $0x2,%rsi							     ----:	shr    $0x2,%rsi
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:412						/home/alex/lsrc/qemu/qemu.git/util/qht.----:412
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	test   %rsi,%rsi							     ----:	test   %rsi,%rsi
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:412						/home/alex/lsrc/qemu/qemu.git/util/qht.----:412
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	mov    $0x1,%ebp							     ----:	mov    $0x1,%ebp
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:412						/home/alex/lsrc/qemu/qemu.git/util/qht.----:412
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	mov    %rdi,%rbx							     ----:	mov    %rdi,%rbx
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	je     781 <qht_reset_size+0x31>				   |	     ----:	je     7d1 <qht_reset_size+0x31>
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	lea    -0x1(%rsi),%rdx							     ----:	lea    -0x1(%rsi),%rdx
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	bsr    %rsi,%rax							     ----:	bsr    %rsi,%rax
     ----:	mov    %rsi,%rbp							     ----:	mov    %rsi,%rbp
     ----:	xor    $0x3f,%rax							     ----:	xor    $0x3f,%rax
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	test   %rsi,%rdx							     ----:	test   %rsi,%rdx
     ----:	jne    882 <qht_reset_size+0x132>				   |	     ----:	jne    8d2 <qht_reset_size+0x132>
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:420						/home/alex/lsrc/qemu/qemu.git/util/qht.----:420
     ----:	lea    0x8(%rbx),%r12							     ----:	lea    0x8(%rbx),%r12
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  78d <qht_reset_size+0x3d>				   |	     ----:	callq  7dd <qht_reset_size+0x3d>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:421						/home/alex/lsrc/qemu/qemu.git/util/qht.----:421
     ----:	mov    (%rbx),%r14							     ----:	mov    (%rbx),%r14
/home/alex/lsrc/qemu/qemu.git/util/qht.----:422						/home/alex/lsrc/qemu/qemu.git/util/qht.----:422
     ----:	cmp    %rbp,0x18(%r14)							     ----:	cmp    %rbp,0x18(%r14)
     ----:	je     860 <qht_reset_size+0x110>				   |	     ----:	je     8b0 <qht_reset_size+0x110>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:423						/home/alex/lsrc/qemu/qemu.git/util/qht.----:423
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	callq  0 <qht_map_create>						     ----:	callq  0 <qht_map_create>
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	cmpq   $0x0,0x18(%r14)							     ----:	cmpq   $0x0,0x18(%r14)
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:423						/home/alex/lsrc/qemu/qemu.git/util/qht.----:423
     ----:	mov    %rax,%r13							     ----:	mov    %rax,%r13
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	je     870 <qht_reset_size+0x120>				   |	     ----:	je     8c0 <qht_reset_size+0x120>
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:424						/home/alex/lsrc/qemu/qemu.git/util/qht.----:424
     ----:	mov    $0x1,%ebp							     ----:	mov    $0x1,%ebp
     ----:	xor    %edx,%edx							     ----:	xor    %edx,%edx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%esi							     ----:	mov    $0x1,%esi
     ----:	jmp    7cd <qht_reset_size+0x7d>				   |	     ----:	jmp    81d <qht_reset_size+0x7d>
     ----:	xchg   %ax,%ax								     ----:	xchg   %ax,%ax
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	mov    0x18(%r14),%rax							     ----:	mov    0x18(%r14),%rax
     ----:	add    $0x1,%rdx							     ----:	add    $0x1,%rdx
     ----:	cmp    %rax,%rdx							     ----:	cmp    %rax,%rdx
     ----:	jae    7f8 <qht_reset_size+0xa8>				   |	     ----:	jae    848 <qht_reset_size+0xa8>
     ----:	mov    %rdx,%rax							     ----:	mov    %rdx,%rax
     ----:	shl    $0x6,%rax							     ----:	shl    $0x6,%rax
     ----:	add    0x10(%r14),%rax							     ----:	add    0x10(%r14),%rax
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %esi,%ecx							     ----:	mov    %esi,%ecx
     ----:	xchg   %ecx,(%rax)							     ----:	xchg   %ecx,(%rax)
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	je     7c0 <qht_reset_size+0x70>				   |	     ----:	je     810 <qht_reset_size+0x70>
     ----:	jmp    7ea <qht_reset_size+0x9a>				   |	     ----:	jmp    83a <qht_reset_size+0x9a>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rax),%ecx							     ----:	mov    (%rax),%ecx
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	jne    7e8 <qht_reset_size+0x98>				   |	     ----:	jne    838 <qht_reset_size+0x98>
     ----:	jmp    7d8 <qht_reset_size+0x88>				   |	     ----:	jmp    828 <qht_reset_size+0x88>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qht_map_reset__all_locked():								qht_map_reset__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:396						/home/alex/lsrc/qemu/qemu.git/util/qht.----:396
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     867 <qht_reset_size+0x117>				   |	     ----:	je     8b7 <qht_reset_size+0x117>
     ----:	xor    %r8d,%r8d							     ----:	xor    %r8d,%r8d
/home/alex/lsrc/qemu/qemu.git/util/qht.----:397						/home/alex/lsrc/qemu/qemu.git/util/qht.----:397
     ----:	mov    %r8,%rdi								     ----:	mov    %r8,%rdi
     ----:	shl    $0x6,%rdi							     ----:	shl    $0x6,%rdi
     ----:	add    0x10(%r14),%rdi							     ----:	add    0x10(%r14),%rdi
     ----:	callq  380 <qht_bucket_reset__locked>				   |	     ----:	callq  3e0 <qht_bucket_reset__locked>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:396						/home/alex/lsrc/qemu/qemu.git/util/qht.----:396
     ----:	add    $0x1,%r8								     ----:	add    $0x1,%r8
     ----:	cmp    0x18(%r14),%r8							     ----:	cmp    0x18(%r14),%r8
     ----:	jb     800 <qht_reset_size+0xb0>				   |	     ----:	jb     850 <qht_reset_size+0xb0>
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:429						/home/alex/lsrc/qemu/qemu.git/util/qht.----:429
     ----:	test   %bpl,%bpl							     ----:	test   %bpl,%bpl
     ----:	jne    870 <qht_reset_size+0x120>				   |	     ----:	jne    8c0 <qht_reset_size+0x120>
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	cmpq   $0x0,0x18(%r14)							     ----:	cmpq   $0x0,0x18(%r14)
     ----:	je     84b <qht_reset_size+0xfb>				   |	     ----:	je     89b <qht_reset_size+0xfb>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%r14),%rdx							     ----:	add    0x10(%r14),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%r14),%rax							     ----:	cmp    0x18(%r14),%rax
     ----:	jb     830 <qht_reset_size+0xe0>				   |	     ----:	jb     880 <qht_reset_size+0xe0>
qht_reset_size():									qht_reset_size():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:433						/home/alex/lsrc/qemu/qemu.git/util/qht.----:433
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  853 <qht_reset_size+0x103>				   |	     ----:	callq  8a3 <qht_reset_size+0x103>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:436						/home/alex/lsrc/qemu/qemu.git/util/qht.----:436
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	mov    %ebp,%eax							     ----:	mov    %ebp,%eax
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	retq   									     ----:	retq   
     ----:	xchg   %ax,%ax								     ----:	xchg   %ax,%ax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:416						/home/alex/lsrc/qemu/qemu.git/util/qht.----:416
     ----:	xor    %ebp,%ebp							     ----:	xor    %ebp,%ebp
     ----:	jmpq   7b5 <qht_reset_size+0x65>				   |	     ----:	jmpq   805 <qht_reset_size+0x65>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:429						/home/alex/lsrc/qemu/qemu.git/util/qht.----:429
     ----:	test   %bpl,%bpl							     ----:	test   %bpl,%bpl
     ----:	je     84b <qht_reset_size+0xfb>				   |	     ----:	je     89b <qht_reset_size+0xfb>
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:430						/home/alex/lsrc/qemu/qemu.git/util/qht.----:430
     ----:	mov    %r13,%rsi							     ----:	mov    %r13,%rsi
     ----:	mov    %rbx,%rdi							     ----:	mov    %rbx,%rdi
     ----:	mov    $0x1,%ebp							     ----:	mov    $0x1,%ebp
     ----:	callq  270 <qht_do_resize>					   |	     ----:	callq  2d0 <qht_do_resize>
     ----:	jmp    81f <qht_reset_size+0xcf>				   |	     ----:	jmp    86f <qht_reset_size+0xcf>
     ----:	mov    $0x40,%ecx							     ----:	mov    $0x40,%ecx
     ----:	mov    $0x1,%ebp							     ----:	mov    $0x1,%ebp
     ----:	sub    %eax,%ecx							     ----:	sub    %eax,%ecx
     ----:	shl    %cl,%rbp								     ----:	shl    %cl,%rbp
     ----:	jmpq   781 <qht_reset_size+0x31>				   |	     ----:	jmpq   7d1 <qht_reset_size+0x31>
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

00000000000008a0 <qht_lookup>:							   |	00000000000008f0 <qht_lookup>:
qht_lookup():										qht_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:481						/home/alex/lsrc/qemu/qemu.git/util/qht.----:481
     ----:	push   %r15								     ----:	push   %r15
     ----:	push   %r14								     ----:	push   %r14
     ----:	mov    %rsi,%r8							   |	     ----:	mov    %rsi,%r15
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x28,%rsp							     ----:	sub    $0x28,%rsp
										   >	     ----:	mov    %rdx,0x8(%rsp)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:487						/home/alex/lsrc/qemu/qemu.git/util/qht.----:487
     ----:	mov    (%rdi),%rax							     ----:	mov    (%rdi),%rax
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	mov    0x18(%rax),%rsi							     ----:	mov    0x18(%rax),%rsi
     ----:	lea    -0x1(%rsi),%r13							     ----:	lea    -0x1(%rsi),%r13
     ----:	and    %ecx,%r13d							     ----:	and    %ecx,%r13d
     ----:	shl    $0x6,%r13							     ----:	shl    $0x6,%r13
     ----:	add    0x10(%rax),%r13							     ----:	add    0x10(%rax),%r13
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51
     ----:	mov    0x4(%r13),%r15d						   |	     ----:	mov    0x4(%r13),%r14d
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55
     ----:	and    $0xfffffffe,%r15d					   |	     ----:	and    $0xfffffffe,%r14d
qht_do_lookup():									qht_do_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:442						/home/alex/lsrc/qemu/qemu.git/util/qht.----:442
     ----:	mov    %r13,%r12							     ----:	mov    %r13,%r12
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55
     ----:	mov    %r15d,0x1c(%rsp)						   |	     ----:	mov    %r14d,0x1c(%rsp)
     ----:	lea    0x8(%r12),%rbp							     ----:	lea    0x8(%r12),%rbp
     ----:	lea    0x18(%r12),%rbx							     ----:	lea    0x18(%r12),%rbx
     ----:	lea    0x38(%r12),%r14						   |	     ----:	lea    0x38(%r12),%rdx
qht_do_lookup():									qht_do_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:447						/home/alex/lsrc/qemu/qemu.git/util/qht.----:447
     ----:	cmp    0x0(%rbp),%ecx						   |	     ----:	mov    0x0(%rbp),%eax
     ----:	je     910 <qht_lookup+0x70>					   |	     ----:	cmp    %eax,%ecx
										   >	     ----:	je     960 <qht_lookup+0x70>
     ----:	add    $0x8,%rbx							     ----:	add    $0x8,%rbx
     ----:	add    $0x4,%rbp							     ----:	add    $0x4,%rbp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:446						/home/alex/lsrc/qemu/qemu.git/util/qht.----:446
     ----:	cmp    %rbx,%r14						   |	     ----:	cmp    %rbx,%rdx
     ----:	jne    8e6 <qht_lookup+0x46>					   |	     ----:	jne    93b <qht_lookup+0x4b>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:459						/home/alex/lsrc/qemu/qemu.git/util/qht.----:459
     ----:	mov    0x38(%r12),%r12							     ----:	mov    0x38(%r12),%r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:460						/home/alex/lsrc/qemu/qemu.git/util/qht.----:460
     ----:	test   %r12,%r12							     ----:	test   %r12,%r12
     ----:	jne    8d7 <qht_lookup+0x37>					   |	     ----:	jne    92c <qht_lookup+0x3c>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:462						/home/alex/lsrc/qemu/qemu.git/util/qht.----:462
     ----:	xor    %r15d,%r15d						   |	     ----:	xor    %r14d,%r14d
     ----:	jmp    941 <qht_lookup+0xa1>					   |	     ----:	jmp    989 <qht_lookup+0x99>
     ----:	nopw   0x0(%rax,%rax,1)						   |	     ----:	xchg   %ax,%ax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:452						/home/alex/lsrc/qemu/qemu.git/util/qht.----:452
     ----:	mov    (%rbx),%r15						   |	     ----:	mov    (%rbx),%r14
/home/alex/lsrc/qemu/qemu.git/util/qht.----:454						/home/alex/lsrc/qemu/qemu.git/util/qht.----:454
     ----:	test   %r15,%r15						   |	     ----:	test   %r14,%r14
     ----:	je     8eb <qht_lookup+0x4b>					   |	     ----:	je     942 <qht_lookup+0x52>
     ----:	mov    %ecx,0x18(%rsp)							     ----:	mov    %ecx,0x18(%rsp)
     ----:	mov    %rdx,%rsi						   <
     ----:	mov    %rdx,0x10(%rsp)							     ----:	mov    %rdx,0x10(%rsp)
     ----:	mov    %r8,0x8(%rsp)						   |	     ----:	mov    %r14,%rdi
     ----:	mov    %r15,%rdi						   |	     ----:	mov    0x8(%rsp),%rsi
     ----:	callq  *%r8							   |	     ----:	callq  *%r15
     ----:	test   %al,%al								     ----:	test   %al,%al
     ----:	mov    0x8(%rsp),%r8						   <
     ----:	mov    0x10(%rsp),%rdx							     ----:	mov    0x10(%rsp),%rdx
     ----:	mov    0x18(%rsp),%ecx							     ----:	mov    0x18(%rsp),%ecx
     ----:	je     8eb <qht_lookup+0x4b>					   |	     ----:	je     942 <qht_lookup+0x52>
seqlock_read_retry():									seqlock_read_retry():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62
     ----:	mov    0x4(%r13),%eax							     ----:	mov    0x4(%r13),%eax
qht_lookup():										qht_lookup():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:492						/home/alex/lsrc/qemu/qemu.git/util/qht.----:492
     ----:	cmp    0x1c(%rsp),%eax							     ----:	cmp    0x1c(%rsp),%eax
     ----:	jne    960 <qht_lookup+0xc0>					   |	     ----:	jne    9a8 <qht_lookup+0xb8>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:500						/home/alex/lsrc/qemu/qemu.git/util/qht.----:500
     ----:	add    $0x28,%rsp							     ----:	add    $0x28,%rsp
     ----:	mov    %r15,%rax						   |	     ----:	mov    %r14,%rax
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	pop    %r15								     ----:	pop    %r15
     ----:	retq   									     ----:	retq   
     ----:	nopl   (%rax)								     ----:	nopl   (%rax)
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:499
										   >	     ----:	mov    0x8(%rsp),%rdx
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:500
     ----:	add    $0x28,%rsp							     ----:	add    $0x28,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:499						/home/alex/lsrc/qemu/qemu.git/util/qht.----:499
     ----:	mov    %r13,%rdi						   |	     ----:	mov    %r15,%rsi
     ----:	mov    %r8,%rsi							   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:500						/home/alex/lsrc/qemu/qemu.git/util/qht.----:500
     ----:	pop    %rbx								     ----:	pop    %rbx
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:499
										   >	     ----:	mov    %r13,%rdi
										   >	/home/alex/lsrc/qemu/qemu.git/util/qht.----:500
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	pop    %r15								     ----:	pop    %r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:499						/home/alex/lsrc/qemu/qemu.git/util/qht.----:499
     ----:	jmpq   3d0 <qht_lookup__slowpath>				   |	     ----:	jmpq   430 <qht_lookup__slowpath>
     ----:	nopl   0x0(%rax)						   |	     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000980 <qht_insert>:							   |	00000000000009d0 <qht_insert>:
qht_insert():										qht_insert():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:572						/home/alex/lsrc/qemu/qemu.git/util/qht.----:572
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	mov    %rdi,%rbp							     ----:	mov    %rdi,%rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x20,%rsp							     ----:	sub    $0x20,%rsp
     ----:	mov    %fs:0x28,%rax							     ----:	mov    %fs:0x28,%rax
     ----:	mov    %rax,0x18(%rsp)							     ----:	mov    %rax,0x18(%rsp)
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:575						/home/alex/lsrc/qemu/qemu.git/util/qht.----:575
     ----:	movb   $0x0,0x17(%rsp)							     ----:	movb   $0x0,0x17(%rsp)
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:279						/home/alex/lsrc/qemu/qemu.git/util/qht.----:279
     ----:	mov    (%rdi),%rax							     ----:	mov    (%rdi),%rax
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	mov    0x18(%rax),%rdi							     ----:	mov    0x18(%rax),%rdi
     ----:	mov    %edx,%r13d							     ----:	mov    %edx,%r13d
     ----:	lea    -0x1(%rdi),%rbx							     ----:	lea    -0x1(%rdi),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%edi							     ----:	mov    $0x1,%edi
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	and    %r13,%rbx							     ----:	and    %r13,%rbx
     ----:	shl    $0x6,%rbx							     ----:	shl    $0x6,%rbx
     ----:	add    0x10(%rax),%rbx							     ----:	add    0x10(%rax),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %edi,%ecx							     ----:	mov    %edi,%ecx
     ----:	xchg   %ecx,(%rbx)							     ----:	xchg   %ecx,(%rbx)
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	jne    a22 <qht_insert+0xa2>					   |	     ----:	jne    a72 <qht_insert+0xa2>
     ----:	mov    0x0(%rbp),%r12							     ----:	mov    0x0(%rbp),%r12
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:283						/home/alex/lsrc/qemu/qemu.git/util/qht.----:283
     ----:	cmp    %r12,%rax							     ----:	cmp    %r12,%rax
     ----:	jne    a30 <qht_insert+0xb0>					   |	     ----:	jne    a80 <qht_insert+0xb0>
qht_insert():										qht_insert():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:582						/home/alex/lsrc/qemu/qemu.git/util/qht.----:582
     ----:	lea    0x17(%rsp),%r8							     ----:	lea    0x17(%rsp),%r8
     ----:	mov    %edx,%ecx							     ----:	mov    %edx,%ecx
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	mov    %rsi,%rdx							     ----:	mov    %rsi,%rdx
     ----:	mov    %rbx,%rsi							     ----:	mov    %rbx,%rsi
     ----:	callq  140 <qht_insert__locked.isra.10>				   |	     ----:	callq  190 <qht_insert__locked.isra.10>
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	movl   $0x0,(%rbx)							     ----:	movl   $0x0,(%rbx)
qht_insert():										qht_insert():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:586						/home/alex/lsrc/qemu/qemu.git/util/qht.----:586
     ----:	cmpb   $0x0,0x17(%rsp)							     ----:	cmpb   $0x0,0x17(%rsp)
     ----:	jne    ab0 <qht_insert+0x130>					   |	     ----:	jne    b00 <qht_insert+0x130>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:590						/home/alex/lsrc/qemu/qemu.git/util/qht.----:590
     ----:	mov    0x18(%rsp),%rsi							     ----:	mov    0x18(%rsp),%rsi
     ----:	xor    %fs:0x28,%rsi							     ----:	xor    %fs:0x28,%rsi
     ----:	jne    ace <qht_insert+0x14e>					   |	     ----:	jne    b1e <qht_insert+0x14e>
     ----:	add    $0x20,%rsp							     ----:	add    $0x20,%rsp
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	retq   									     ----:	retq   
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rbx),%ecx							     ----:	mov    (%rbx),%ecx
     ----:	test   %ecx,%ecx							     ----:	test   %ecx,%ecx
     ----:	jne    a20 <qht_insert+0xa0>					   |	     ----:	jne    a70 <qht_insert+0xa0>
     ----:	jmp    9c2 <qht_insert+0x42>					   |	     ----:	jmp    a12 <qht_insert+0x42>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:290						/home/alex/lsrc/qemu/qemu.git/util/qht.----:290
     ----:	lea    0x8(%rbp),%r14							     ----:	lea    0x8(%rbp),%r14
     ----:	mov    %edx,0xc(%rsp)							     ----:	mov    %edx,0xc(%rsp)
     ----:	mov    %rsi,(%rsp)							     ----:	mov    %rsi,(%rsp)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	movl   $0x0,(%rbx)							     ----:	movl   $0x0,(%rbx)
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:290						/home/alex/lsrc/qemu/qemu.git/util/qht.----:290
     ----:	mov    %r14,%rdi							     ----:	mov    %r14,%rdi
     ----:	callq  a4a <qht_insert+0xca>					   |	     ----:	callq  a9a <qht_insert+0xca>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:291						/home/alex/lsrc/qemu/qemu.git/util/qht.----:291
     ----:	mov    0x0(%rbp),%r12							     ----:	mov    0x0(%rbp),%r12
     ----:	mov    (%rsp),%rsi							     ----:	mov    (%rsp),%rsi
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%ecx							     ----:	mov    $0x1,%ecx
     ----:	mov    0xc(%rsp),%edx							     ----:	mov    0xc(%rsp),%edx
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	mov    0x18(%r12),%rax							     ----:	mov    0x18(%r12),%rax
     ----:	lea    -0x1(%rax),%rbx							     ----:	lea    -0x1(%rax),%rbx
     ----:	and    %rbx,%r13							     ----:	and    %rbx,%r13
     ----:	shl    $0x6,%r13							     ----:	shl    $0x6,%r13
     ----:	mov    %r13,%rbx							     ----:	mov    %r13,%rbx
     ----:	add    0x10(%r12),%rbx							     ----:	add    0x10(%r12),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %ecx,%eax							     ----:	mov    %ecx,%eax
     ----:	xchg   %eax,(%rbx)							     ----:	xchg   %eax,(%rbx)
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	jne    aa2 <qht_insert+0x122>					   |	     ----:	jne    af2 <qht_insert+0x122>
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:294						/home/alex/lsrc/qemu/qemu.git/util/qht.----:294
     ----:	mov    %r14,%rdi							     ----:	mov    %r14,%rdi
     ----:	mov    %edx,0xc(%rsp)							     ----:	mov    %edx,0xc(%rsp)
     ----:	mov    %rsi,(%rsp)							     ----:	mov    %rsi,(%rsp)
     ----:	callq  a8b <qht_insert+0x10b>					   |	     ----:	callq  adb <qht_insert+0x10b>
     ----:	mov    0xc(%rsp),%edx							     ----:	mov    0xc(%rsp),%edx
     ----:	mov    (%rsp),%rsi							     ----:	mov    (%rsp),%rsi
     ----:	jmpq   9d3 <qht_insert+0x53>					   |	     ----:	jmpq   a23 <qht_insert+0x53>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rbx),%eax							     ----:	mov    (%rbx),%eax
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	jne    aa0 <qht_insert+0x120>					   |	     ----:	jne    af0 <qht_insert+0x120>
     ----:	jmp    a73 <qht_insert+0xf3>					   |	     ----:	jmp    ac3 <qht_insert+0xf3>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qht_insert():										qht_insert():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:586 (discriminator 1)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:586 (discriminator 1)
     ----:	testb  $0x1,0x30(%rbp)							     ----:	testb  $0x1,0x30(%rbp)
     ----:	je     9f9 <qht_insert+0x79>					   |	     ----:	je     a49 <qht_insert+0x79>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:587						/home/alex/lsrc/qemu/qemu.git/util/qht.----:587
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	mov    %al,(%rsp)							     ----:	mov    %al,(%rsp)
     ----:	callq  490 <qht_grow_maybe>					   |	     ----:	callq  4e0 <qht_grow_maybe>
     ----:	movzbl (%rsp),%eax							     ----:	movzbl (%rsp),%eax
     ----:	jmpq   9f9 <qht_insert+0x79>					   |	     ----:	jmpq   a49 <qht_insert+0x79>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:590						/home/alex/lsrc/qemu/qemu.git/util/qht.----:590
     ----:	callq  ad3 <qht_insert+0x153>					   |	     ----:	callq  b23 <qht_insert+0x153>
     ----:	nopl   (%rax)								     ----:	nopl   (%rax)
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000ae0 <qht_remove>:							   |	0000000000000b30 <qht_remove>:
qht_remove():										qht_remove():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:679						/home/alex/lsrc/qemu/qemu.git/util/qht.----:679
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	mov    %rdi,%r12							     ----:	mov    %rdi,%r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x18,%rsp							     ----:	sub    $0x18,%rsp
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:279						/home/alex/lsrc/qemu/qemu.git/util/qht.----:279
     ----:	mov    (%rdi),%rax							     ----:	mov    (%rdi),%rax
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	mov    0x18(%rax),%rdi						   |	     ----:	mov    0x18(%rax),%rcx
     ----:	mov    %edx,%ebp							     ----:	mov    %edx,%ebp
										   >	     ----:	lea    -0x1(%rcx),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%ecx							     ----:	mov    $0x1,%ecx
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	lea    -0x1(%rdi),%rbx						   <
     ----:	and    %rbp,%rbx							     ----:	and    %rbp,%rbx
     ----:	shl    $0x6,%rbx							     ----:	shl    $0x6,%rbx
     ----:	add    0x10(%rax),%rbx							     ----:	add    0x10(%rax),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %ecx,%edx							     ----:	mov    %ecx,%edx
     ----:	xchg   %edx,(%rbx)							     ----:	xchg   %edx,(%rbx)
     ----:	test   %edx,%edx							     ----:	test   %edx,%edx
     ----:	jne    b6a <qht_remove+0x8a>					   |	     ----:	jne    bba <qht_remove+0x8a>
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:283						/home/alex/lsrc/qemu/qemu.git/util/qht.----:283
     ----:	cmp    (%r12),%rax							     ----:	cmp    (%r12),%rax
     ----:	jne    c40 <qht_remove+0x160>					   |	     ----:	jne    c70 <qht_remove+0x140>
qht_remove():										qht_remove():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:679						/home/alex/lsrc/qemu/qemu.git/util/qht.----:679
     ----:	mov    %rbx,%rcx						   |	     ----:	mov    %rbx,%rdi
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
qht_remove__locked():									qht_remove__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:660						/home/alex/lsrc/qemu/qemu.git/util/qht.----:660
     ----:	mov    0x18(%rcx,%rax,8),%rdx					   |	     ----:	mov    0x18(%rdi,%rax,8),%rdx
     ----:	movslq %eax,%rdi						   |	     ----:	movslq %eax,%r8
/home/alex/lsrc/qemu/qemu.git/util/qht.----:662						/home/alex/lsrc/qemu/qemu.git/util/qht.----:662
     ----:	test   %rdx,%rdx							     ----:	test   %rdx,%rdx
     ----:	je     b50 <qht_remove+0x70>					   |	     ----:	je     ba0 <qht_remove+0x70>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:665						/home/alex/lsrc/qemu/qemu.git/util/qht.----:665
     ----:	cmp    %rdx,%rsi							     ----:	cmp    %rdx,%rsi
     ----:	je     b78 <qht_remove+0x98>					   |	     ----:	je     bc8 <qht_remove+0x98>
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:659						/home/alex/lsrc/qemu/qemu.git/util/qht.----:659
     ----:	cmp    $0x4,%rax							     ----:	cmp    $0x4,%rax
     ----:	jne    b21 <qht_remove+0x41>					   |	     ----:	jne    b71 <qht_remove+0x41>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:673						/home/alex/lsrc/qemu/qemu.git/util/qht.----:673
     ----:	mov    0x38(%rcx),%rcx						   |	     ----:	mov    0x38(%rdi),%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:674						/home/alex/lsrc/qemu/qemu.git/util/qht.----:674
     ----:	test   %rcx,%rcx						   |	     ----:	test   %rdi,%rdi
     ----:	jne    b1f <qht_remove+0x3f>					   |	     ----:	jne    b6f <qht_remove+0x3f>
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:663						/home/alex/lsrc/qemu/qemu.git/util/qht.----:663
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	movl   $0x0,(%rbx)							     ----:	movl   $0x0,(%rbx)
qht_remove():										qht_remove():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:692						/home/alex/lsrc/qemu/qemu.git/util/qht.----:692
     ----:	add    $0x18,%rsp							     ----:	add    $0x18,%rsp
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	retq   									     ----:	retq   
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rbx),%edx							     ----:	mov    (%rbx),%edx
     ----:	test   %edx,%edx							     ----:	test   %edx,%edx
     ----:	jne    b68 <qht_remove+0x88>					   |	     ----:	jne    bb8 <qht_remove+0x88>
     ----:	jmp    b0a <qht_remove+0x2a>					   |	     ----:	jmp    b5a <qht_remove+0x2a>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
seqlock_write_begin():									seqlock_write_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:34
     ----:	mov    0x4(%rbx),%eax							     ----:	mov    0x4(%rbx),%eax
     ----:	lea    0x4(%rbx),%r8						   |	     ----:	lea    0x4(%rbx),%rbp
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,0x4(%rbx)							     ----:	mov    %eax,0x4(%rbx)
qht_entry_is_last():									qht_entry_is_last():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:594						/home/alex/lsrc/qemu/qemu.git/util/qht.----:594
     ----:	cmp    $0x3,%edi						   |	     ----:	cmp    $0x3,%r8d
     ----:	je     bcf <qht_remove+0xef>					   |	     ----:	je     c22 <qht_remove+0xf2>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:600						/home/alex/lsrc/qemu/qemu.git/util/qht.----:600
     ----:	lea    0x1(%rdi),%eax						   |	     ----:	lea    0x1(%r8),%eax
     ----:	cltq   									     ----:	cltq   
     ----:	cmpq   $0x0,0x18(%rcx,%rax,8)					   |	     ----:	cmpq   $0x0,0x18(%rdi,%rax,8)
     ----:	sete   %al								     ----:	sete   %al
qht_bucket_remove_entry():								qht_bucket_remove_entry():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:627						/home/alex/lsrc/qemu/qemu.git/util/qht.----:627
     ----:	xor    %r9d,%r9d						   |	     ----:	xor    %esi,%esi
     ----:	test   %al,%al								     ----:	test   %al,%al
     ----:	mov    %rcx,%rdx						   |	     ----:	mov    %rdi,%rdx
     ----:	jne    caa <qht_remove+0x1ca>					   |	     ----:	jne    cda <qht_remove+0x1aa>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:645						/home/alex/lsrc/qemu/qemu.git/util/qht.----:645
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:634						/home/alex/lsrc/qemu/qemu.git/util/qht.----:634
     ----:	cmpq   $0x0,0x18(%rdx,%rax,8)						     ----:	cmpq   $0x0,0x18(%rdx,%rax,8)
     ----:	je     bf0 <qht_remove+0x110>					   |	     ----:	mov    %eax,%ecx
										   >	     ----:	je     c40 <qht_remove+0x110>
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:633						/home/alex/lsrc/qemu/qemu.git/util/qht.----:633
     ----:	cmp    $0x4,%rax							     ----:	cmp    $0x4,%rax
     ----:	jne    ba8 <qht_remove+0xc8>					   |	     ----:	jne    bf9 <qht_remove+0xc9>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:644						/home/alex/lsrc/qemu/qemu.git/util/qht.----:644
     ----:	mov    0x38(%rdx),%rax							     ----:	mov    0x38(%rdx),%rax
     ----:	mov    %rdx,%r9							   |	     ----:	mov    %rdx,%rsi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:645						/home/alex/lsrc/qemu/qemu.git/util/qht.----:645
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     cee <qht_remove+0x20e>					   |	     ----:	je     d0a <qht_remove+0x1da>
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
     ----:	jmp    ba6 <qht_remove+0xc6>					   |	     ----:	jmp    bf7 <qht_remove+0xc7>
qht_entry_is_last():									qht_entry_is_last():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:595						/home/alex/lsrc/qemu/qemu.git/util/qht.----:595
     ----:	mov    0x38(%rcx),%rax						   |	     ----:	mov    0x38(%rdi),%rax
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     caa <qht_remove+0x1ca>					   |	     ----:	je     cda <qht_remove+0x1aa>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:598						/home/alex/lsrc/qemu/qemu.git/util/qht.----:598
     ----:	cmpq   $0x0,0x18(%rax)							     ----:	cmpq   $0x0,0x18(%rax)
     ----:	sete   %al								     ----:	sete   %al
     ----:	jmp    b98 <qht_remove+0xb8>					   |	     ----:	jmp    bea <qht_remove+0xba>
     ----:	nopw   %cs:0x0(%rax,%rax,1)					   |	     ----:	nopl   0x0(%rax)
qht_bucket_remove_entry():								qht_bucket_remove_entry():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:637						/home/alex/lsrc/qemu/qemu.git/util/qht.----:637
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	je     cc4 <qht_remove+0x1e4>					   |	     ----:	je     cf5 <qht_remove+0x1c5>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:638						/home/alex/lsrc/qemu/qemu.git/util/qht.----:638
     ----:	lea    -0x1(%rax),%eax						   |	     ----:	sub    $0x1,%ecx
     ----:	cltq   								   |	     ----:	mov    %r8d,%esi
     ----:	lea    (%rdx,%rax,4),%rsi					   |	     ----:	callq  140 <qht_entry_move>
qht_entry_move():								   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:610					   <
     ----:	mov    0x8(%rsi),%r9d						   <
     ----:	mov    %r9d,0x8(%rcx,%rdi,4)					   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:611					   <
     ----:	mov    0x18(%rdx,%rax,8),%r9					   <
     ----:	shl    $0x3,%rdi						   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:614					   <
     ----:	shl    $0x3,%rax						   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:611					   <
     ----:	mov    %r9,0x18(%rcx,%rdi,1)					   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:613					   <
     ----:	movl   $0x0,0x8(%rsi)						   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:614					   <
     ----:	movq   $0x0,0x18(%rdx,%rax,1)					   <
seqlock_write_end():									seqlock_write_end():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:45
     ----:	mov    0x4(%rbx),%eax							     ----:	mov    0x4(%rbx),%eax
     ----:	add    $0x1,%eax							     ----:	add    $0x1,%eax
     ----:	mov    %eax,(%r8)						   |	     ----:	mov    %eax,0x0(%rbp)
qht_remove__locked():									qht_remove__locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:670						/home/alex/lsrc/qemu/qemu.git/util/qht.----:670
     ----:	mov    $0x1,%eax							     ----:	mov    $0x1,%eax
     ----:	jmpq   b52 <qht_remove+0x72>					   |	     ----:	jmpq   ba2 <qht_remove+0x72>
     ----:	nop								   |	     ----:	nopw   %cs:0x0(%rax,%rax,1)
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:290						/home/alex/lsrc/qemu/qemu.git/util/qht.----:290
     ----:	lea    0x8(%r12),%r13							     ----:	lea    0x8(%r12),%r13
     ----:	mov    %rsi,0x8(%rsp)							     ----:	mov    %rsi,0x8(%rsp)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	movl   $0x0,(%rbx)							     ----:	movl   $0x0,(%rbx)
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:290						/home/alex/lsrc/qemu/qemu.git/util/qht.----:290
     ----:	mov    %r13,%rdi							     ----:	mov    %r13,%rdi
     ----:	callq  c58 <qht_remove+0x178>					   |	     ----:	callq  c88 <qht_remove+0x158>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:291						/home/alex/lsrc/qemu/qemu.git/util/qht.----:291
     ----:	mov    (%r12),%rax							     ----:	mov    (%r12),%rax
										   >	     ----:	mov    0x8(%rsp),%rsi
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%edx							     ----:	mov    $0x1,%edx
qht_map_to_bucket():									qht_map_to_bucket():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:200						/home/alex/lsrc/qemu/qemu.git/util/qht.----:200
     ----:	mov    0x18(%rax),%rsi						   |	     ----:	mov    0x18(%rax),%rcx
     ----:	lea    -0x1(%rsi),%rbx						   |	     ----:	lea    -0x1(%rcx),%rbx
     ----:	mov    0x8(%rsp),%rsi						   <
     ----:	and    %rbx,%rbp							     ----:	and    %rbx,%rbp
     ----:	shl    $0x6,%rbp							     ----:	shl    $0x6,%rbp
     ----:	mov    %rbp,%rbx							     ----:	mov    %rbp,%rbx
     ----:	add    0x10(%rax),%rbx							     ----:	add    0x10(%rax),%rbx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %edx,%eax							     ----:	mov    %edx,%eax
     ----:	xchg   %eax,(%rbx)							     ----:	xchg   %eax,(%rbx)
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	jne    ca2 <qht_remove+0x1c2>					   |	     ----:	jne    cd2 <qht_remove+0x1a2>
qht_bucket_lock__no_stale():								qht_bucket_lock__no_stale():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:294						/home/alex/lsrc/qemu/qemu.git/util/qht.----:294
     ----:	mov    %r13,%rdi							     ----:	mov    %r13,%rdi
     ----:	mov    %rsi,0x8(%rsp)							     ----:	mov    %rsi,0x8(%rsp)
     ----:	callq  c91 <qht_remove+0x1b1>					   |	     ----:	callq  cc1 <qht_remove+0x191>
     ----:	mov    0x8(%rsp),%rsi							     ----:	mov    0x8(%rsp),%rsi
     ----:	jmpq   b1c <qht_remove+0x3c>					   |	     ----:	jmpq   b6c <qht_remove+0x3c>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rbx),%eax							     ----:	mov    (%rbx),%eax
     ----:	test   %eax,%eax							     ----:	test   %eax,%eax
     ----:	jne    ca0 <qht_remove+0x1c0>					   |	     ----:	jne    cd0 <qht_remove+0x1a0>
     ----:	jmp    c7c <qht_remove+0x19c>					   |	     ----:	jmp    cac <qht_remove+0x17c>
qht_bucket_remove_entry():								qht_bucket_remove_entry():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:628						/home/alex/lsrc/qemu/qemu.git/util/qht.----:628
     ----:	movl   $0x0,0x8(%rcx,%rdi,4)					   |	     ----:	movl   $0x0,0x8(%rdi,%r8,4)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:629						/home/alex/lsrc/qemu/qemu.git/util/qht.----:629
     ----:	shl    $0x3,%rdi						   |	     ----:	shl    $0x3,%r8
     ----:	movq   $0x0,0x18(%rcx,%rdi,1)					   |	     ----:	movq   $0x0,0x18(%rdi,%r8,1)
     ----:	jmpq   c2c <qht_remove+0x14c>					   |	     ----:	jmpq   c53 <qht_remove+0x123>
qht_entry_move():								   |	/home/alex/lsrc/qemu/qemu.git/util/qht.----:641
/home/alex/lsrc/qemu/qemu.git/util/qht.----:610					   |	     ----:	mov    %rsi,%rdx
     ----:	mov    0x14(%r9),%eax						   |	     ----:	mov    $0x3,%ecx
     ----:	mov    %eax,0x8(%rcx,%rdi,4)					   |	     ----:	mov    %r8d,%esi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:611					   |	     ----:	callq  140 <qht_entry_move>
     ----:	mov    0x30(%r9),%rax						   |	     ----:	jmpq   c53 <qht_remove+0x123>
     ----:	shl    $0x3,%rdi						   |	/home/alex/lsrc/qemu/qemu.git/util/qht.----:647
     ----:	mov    %rax,0x18(%rcx,%rdi,1)					   |	     ----:	mov    $0x3,%ecx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:613					   |	     ----:	mov    %r8d,%esi
     ----:	movl   $0x0,0x14(%r9)						   |	     ----:	callq  140 <qht_entry_move>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:614					   |	     ----:	jmpq   c53 <qht_remove+0x123>
     ----:	movq   $0x0,0x30(%r9)						   <
     ----:	jmpq   c2c <qht_remove+0x14c>					   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:610					   <
     ----:	mov    0x14(%rdx),%eax						   <
     ----:	mov    %eax,0x8(%rcx,%rdi,4)					   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:611					   <
     ----:	mov    0x30(%rdx),%rax						   <
     ----:	shl    $0x3,%rdi						   <
     ----:	mov    %rax,0x18(%rcx,%rdi,1)					   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:613					   <
     ----:	movl   $0x0,0x14(%rdx)						   <
/home/alex/lsrc/qemu/qemu.git/util/qht.----:614					   <
     ----:	movq   $0x0,0x30(%rdx)						   <
     ----:	jmpq   c2c <qht_remove+0x14c>					   <
qht_remove():										qht_remove():
     ----:	nopw   %cs:0x0(%rax,%rax,1)					   |	     ----:	nopl   0x0(%rax)

0000000000000d20 <qht_iter>:								0000000000000d20 <qht_iter>:
qht_iter():										qht_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:722						/home/alex/lsrc/qemu/qemu.git/util/qht.----:722
     ----:	push   %r15								     ----:	push   %r15
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x18,%rsp							     ----:	sub    $0x18,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:725						/home/alex/lsrc/qemu/qemu.git/util/qht.----:725
     ----:	mov    (%rdi),%r14							     ----:	mov    (%rdi),%r14
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	cmpq   $0x0,0x18(%r14)							     ----:	cmpq   $0x0,0x18(%r14)
     ----:	je     e1b <qht_iter+0xfb>						     ----:	je     e1b <qht_iter+0xfb>
     ----:	xor    %ecx,%ecx							     ----:	xor    %ecx,%ecx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%r9d							     ----:	mov    $0x1,%r9d
     ----:	jmp    d5d <qht_iter+0x3d>						     ----:	jmp    d5d <qht_iter+0x3d>
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	mov    0x18(%r14),%rax							     ----:	mov    0x18(%r14),%rax
     ----:	add    $0x1,%rcx							     ----:	add    $0x1,%rcx
     ----:	cmp    %rax,%rcx							     ----:	cmp    %rax,%rcx
     ----:	jae    d84 <qht_iter+0x64>						     ----:	jae    d84 <qht_iter+0x64>
     ----:	mov    %rcx,%rax							     ----:	mov    %rcx,%rax
     ----:	shl    $0x6,%rax							     ----:	shl    $0x6,%rax
     ----:	add    0x10(%r14),%rax							     ----:	add    0x10(%r14),%rax
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %r9d,%r8d							     ----:	mov    %r9d,%r8d
     ----:	xchg   %r8d,(%rax)							     ----:	xchg   %r8d,(%rax)
     ----:	test   %r8d,%r8d							     ----:	test   %r8d,%r8d
     ----:	je     d50 <qht_iter+0x30>						     ----:	je     d50 <qht_iter+0x30>
     ----:	jmp    d7a <qht_iter+0x5a>						     ----:	jmp    d7a <qht_iter+0x5a>
     ----:	nopl   (%rax)								     ----:	nopl   (%rax)
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rax),%r8d							     ----:	mov    (%rax),%r8d
     ----:	test   %r8d,%r8d							     ----:	test   %r8d,%r8d
     ----:	jne    d78 <qht_iter+0x58>						     ----:	jne    d78 <qht_iter+0x58>
     ----:	jmp    d68 <qht_iter+0x48>						     ----:	jmp    d68 <qht_iter+0x48>
qht_map_iter__all_locked():								qht_map_iter__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     e1b <qht_iter+0xfb>						     ----:	je     e1b <qht_iter+0xfb>
     ----:	mov    %rdx,%r13							     ----:	mov    %rdx,%r13
     ----:	mov    %rsi,%r12							     ----:	mov    %rsi,%r12
     ----:	mov    %rdi,%rbp							     ----:	mov    %rdi,%rbp
     ----:	movq   $0x0,0x8(%rsp)							     ----:	movq   $0x0,0x8(%rsp)
     ----:	nop									     ----:	nop
/home/alex/lsrc/qemu/qemu.git/util/qht.----:717						/home/alex/lsrc/qemu/qemu.git/util/qht.----:717
     ----:	mov    0x8(%rsp),%rax							     ----:	mov    0x8(%rsp),%rax
     ----:	shl    $0x6,%rax							     ----:	shl    $0x6,%rax
     ----:	add    0x10(%r14),%rax							     ----:	add    0x10(%r14),%rax
     ----:	mov    %rax,%r15							     ----:	mov    %rax,%r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	xor    %ebx,%ebx							     ----:	xor    %ebx,%ebx
qht_bucket_iter():									qht_bucket_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:701						/home/alex/lsrc/qemu/qemu.git/util/qht.----:701
     ----:	mov    0x18(%r15,%rbx,2),%rsi						     ----:	mov    0x18(%r15,%rbx,2),%rsi
     ----:	test   %rsi,%rsi							     ----:	test   %rsi,%rsi
     ----:	je     ddd <qht_iter+0xbd>						     ----:	je     ddd <qht_iter+0xbd>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:704						/home/alex/lsrc/qemu/qemu.git/util/qht.----:704
     ----:	mov    0x8(%r15,%rbx,1),%edx						     ----:	mov    0x8(%r15,%rbx,1),%edx
     ----:	add    $0x4,%rbx							     ----:	add    $0x4,%rbx
     ----:	mov    %r13,%rcx							     ----:	mov    %r13,%rcx
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	callq  *%r12								     ----:	callq  *%r12
/home/alex/lsrc/qemu/qemu.git/util/qht.----:700						/home/alex/lsrc/qemu/qemu.git/util/qht.----:700
     ----:	cmp    $0x10,%rbx							     ----:	cmp    $0x10,%rbx
     ----:	jne    db2 <qht_iter+0x92>						     ----:	jne    db2 <qht_iter+0x92>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:706						/home/alex/lsrc/qemu/qemu.git/util/qht.----:706
     ----:	mov    0x38(%r15),%r15							     ----:	mov    0x38(%r15),%r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:707						/home/alex/lsrc/qemu/qemu.git/util/qht.----:707
     ----:	test   %r15,%r15							     ----:	test   %r15,%r15
     ----:	jne    db0 <qht_iter+0x90>						     ----:	jne    db0 <qht_iter+0x90>
qht_map_iter__all_locked():								qht_map_iter__all_locked():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:716						/home/alex/lsrc/qemu/qemu.git/util/qht.----:716
     ----:	addq   $0x1,0x8(%rsp)							     ----:	addq   $0x1,0x8(%rsp)
     ----:	mov    0x18(%r14),%rax							     ----:	mov    0x18(%r14),%rax
     ----:	mov    0x8(%rsp),%rdi							     ----:	mov    0x8(%rsp),%rdi
     ----:	cmp    %rax,%rdi							     ----:	cmp    %rax,%rdi
     ----:	jb     da0 <qht_iter+0x80>						     ----:	jb     da0 <qht_iter+0x80>
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	test   %rax,%rax							     ----:	test   %rax,%rax
     ----:	je     e1b <qht_iter+0xfb>						     ----:	je     e1b <qht_iter+0xfb>
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%r14),%rdx							     ----:	add    0x10(%r14),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%r14),%rax							     ----:	cmp    0x18(%r14),%rax
     ----:	jb     e00 <qht_iter+0xe0>						     ----:	jb     e00 <qht_iter+0xe0>
qht_iter():										qht_iter():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:730						/home/alex/lsrc/qemu/qemu.git/util/qht.----:730
     ----:	add    $0x18,%rsp							     ----:	add    $0x18,%rsp
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	pop    %r15								     ----:	pop    %r15
     ----:	retq   									     ----:	retq   
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)

0000000000000e30 <qht_resize>:								0000000000000e30 <qht_resize>:
qht_elems_to_buckets():									qht_elems_to_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:187						/home/alex/lsrc/qemu/qemu.git/util/qht.----:187
     ----:	shr    $0x2,%rsi							     ----:	shr    $0x2,%rsi
qht_resize():										qht_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:764						/home/alex/lsrc/qemu/qemu.git/util/qht.----:764
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	test   %rsi,%rsi							     ----:	test   %rsi,%rsi
qht_resize():										qht_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:764						/home/alex/lsrc/qemu/qemu.git/util/qht.----:764
     ----:	push   %r12								     ----:	push   %r12
     ----:	mov    %rdi,%r13							     ----:	mov    %rdi,%r13
     ----:	push   %rbp								     ----:	push   %rbp
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	mov    $0x1,%r12d							     ----:	mov    $0x1,%r12d
qht_resize():										qht_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:764						/home/alex/lsrc/qemu/qemu.git/util/qht.----:764
     ----:	push   %rbx								     ----:	push   %rbx
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	je     e62 <qht_resize+0x32>						     ----:	je     e62 <qht_resize+0x32>
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	lea    -0x1(%rsi),%rdx							     ----:	lea    -0x1(%rsi),%rdx
clz64():										clz64():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:172
     ----:	bsr    %rsi,%rax							     ----:	bsr    %rsi,%rax
     ----:	mov    %rsi,%r12							     ----:	mov    %rsi,%r12
     ----:	xor    $0x3f,%rax							     ----:	xor    $0x3f,%rax
pow2ceil():										pow2ceil():
/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510				/home/alex/lsrc/qemu/qemu.git/include/qemu/host-utils.h:510
     ----:	test   %rsi,%rdx							     ----:	test   %rsi,%rdx
     ----:	jne    f1d <qht_resize+0xed>						     ----:	jne    f1d <qht_resize+0xed>
qht_resize():										qht_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:768						/home/alex/lsrc/qemu/qemu.git/util/qht.----:768
     ----:	lea    0x8(%r13),%rbp							     ----:	lea    0x8(%r13),%rbp
     ----:	xor    %r14d,%r14d							     ----:	xor    %r14d,%r14d
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	callq  e71 <qht_resize+0x41>						     ----:	callq  e71 <qht_resize+0x41>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:769						/home/alex/lsrc/qemu/qemu.git/util/qht.----:769
     ----:	mov    0x0(%r13),%rbx							     ----:	mov    0x0(%r13),%rbx
     ----:	cmp    %r12,0x18(%rbx)							     ----:	cmp    %r12,0x18(%rbx)
     ----:	je     f09 <qht_resize+0xd9>						     ----:	je     f09 <qht_resize+0xd9>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:773						/home/alex/lsrc/qemu/qemu.git/util/qht.----:773
     ----:	mov    %r12,%rdi							     ----:	mov    %r12,%rdi
     ----:	callq  0 <qht_map_create>						     ----:	callq  0 <qht_map_create>
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	xor    %ecx,%ecx							     ----:	xor    %ecx,%ecx
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    $0x1,%r8d							     ----:	mov    $0x1,%r8d
qht_map_lock_buckets():									qht_map_lock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:208						/home/alex/lsrc/qemu/qemu.git/util/qht.----:208
     ----:	jne    eaa <qht_resize+0x7a>						     ----:	jne    eaa <qht_resize+0x7a>
     ----:	jmp    ed0 <qht_resize+0xa0>						     ----:	jmp    ed0 <qht_resize+0xa0>
     ----:	nopl   0x0(%rax,%rax,1)							     ----:	nopl   0x0(%rax,%rax,1)
     ----:	add    $0x1,%rcx							     ----:	add    $0x1,%rcx
     ----:	cmp    0x18(%rbx),%rcx							     ----:	cmp    0x18(%rbx),%rcx
     ----:	jae    ed0 <qht_resize+0xa0>						     ----:	jae    ed0 <qht_resize+0xa0>
     ----:	mov    %rcx,%rdx							     ----:	mov    %rcx,%rdx
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rbx),%rdx							     ----:	add    0x10(%rbx),%rdx
qemu_spin_lock():									qemu_spin_lock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:76
     ----:	mov    %r8d,%edi							     ----:	mov    %r8d,%edi
     ----:	xchg   %edi,(%rdx)							     ----:	xchg   %edi,(%rdx)
     ----:	test   %edi,%edi							     ----:	test   %edi,%edi
     ----:	je     ea0 <qht_resize+0x70>						     ----:	je     ea0 <qht_resize+0x70>
     ----:	jmp    ec2 <qht_resize+0x92>						     ----:	jmp    ec2 <qht_resize+0x92>
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:78
     ----:	pause  									     ----:	pause  
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:77
     ----:	mov    (%rdx),%edi							     ----:	mov    (%rdx),%edi
     ----:	test   %edi,%edi							     ----:	test   %edi,%edi
     ----:	jne    ec0 <qht_resize+0x90>						     ----:	jne    ec0 <qht_resize+0x90>
     ----:	jmp    eb5 <qht_resize+0x85>						     ----:	jmp    eb5 <qht_resize+0x85>
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
qht_resize():										qht_resize():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:775						/home/alex/lsrc/qemu/qemu.git/util/qht.----:775
     ----:	mov    %rax,%rsi							     ----:	mov    %rax,%rsi
     ----:	mov    %r13,%rdi							     ----:	mov    %r13,%rdi
     ----:	callq  270 <qht_do_resize>					   |	     ----:	callq  2d0 <qht_do_resize>
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	xor    %eax,%eax							     ----:	xor    %eax,%eax
     ----:	cmpq   $0x0,0x18(%rbx)							     ----:	cmpq   $0x0,0x18(%rbx)
     ----:	je     f03 <qht_resize+0xd3>						     ----:	je     f03 <qht_resize+0xd3>
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	mov    %rax,%rdx							     ----:	mov    %rax,%rdx
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	add    $0x1,%rax							     ----:	add    $0x1,%rax
qemu_spin_unlock():									qemu_spin_unlock():
/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95					/home/alex/lsrc/qemu/qemu.git/include/qemu/thread.h:95
     ----:	shl    $0x6,%rdx							     ----:	shl    $0x6,%rdx
     ----:	add    0x10(%rbx),%rdx							     ----:	add    0x10(%rbx),%rdx
     ----:	movl   $0x0,(%rdx)							     ----:	movl   $0x0,(%rdx)
qht_map_unlock_buckets():								qht_map_unlock_buckets():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:219						/home/alex/lsrc/qemu/qemu.git/util/qht.----:219
     ----:	cmp    0x18(%rbx),%rax							     ----:	cmp    0x18(%rbx),%rax
     ----:	jb     ee8 <qht_resize+0xb8>						     ----:	jb     ee8 <qht_resize+0xb8>
qht_resize():										qht_resize():
     ----:	mov    $0x1,%r14d							     ----:	mov    $0x1,%r14d
/home/alex/lsrc/qemu/qemu.git/util/qht.----:779						/home/alex/lsrc/qemu/qemu.git/util/qht.----:779
     ----:	mov    %rbp,%rdi							     ----:	mov    %rbp,%rdi
     ----:	callq  f11 <qht_resize+0xe1>						     ----:	callq  f11 <qht_resize+0xe1>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:782						/home/alex/lsrc/qemu/qemu.git/util/qht.----:782
     ----:	pop    %rbx								     ----:	pop    %rbx
     ----:	mov    %r14d,%eax							     ----:	mov    %r14d,%eax
     ----:	pop    %rbp								     ----:	pop    %rbp
     ----:	pop    %r12								     ----:	pop    %r12
     ----:	pop    %r13								     ----:	pop    %r13
     ----:	pop    %r14								     ----:	pop    %r14
     ----:	retq   									     ----:	retq   
     ----:	mov    $0x40,%ecx							     ----:	mov    $0x40,%ecx
     ----:	mov    $0x1,%r12d							     ----:	mov    $0x1,%r12d
     ----:	sub    %eax,%ecx							     ----:	sub    %eax,%ecx
     ----:	shl    %cl,%r12								     ----:	shl    %cl,%r12
     ----:	jmpq   e62 <qht_resize+0x32>						     ----:	jmpq   e62 <qht_resize+0x32>
     ----:	nopl   0x0(%rax)							     ----:	nopl   0x0(%rax)
     ----:	nopw   %cs:0x0(%rax,%rax,1)						     ----:	nopw   %cs:0x0(%rax,%rax,1)

0000000000000f40 <qht_statistics_init>:							0000000000000f40 <qht_statistics_init>:
qht_statistics_init():									qht_statistics_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:786						/home/alex/lsrc/qemu/qemu.git/util/qht.----:786
     ----:	push   %r15								     ----:	push   %r15
     ----:	push   %r14								     ----:	push   %r14
     ----:	push   %r13								     ----:	push   %r13
     ----:	push   %r12								     ----:	push   %r12
     ----:	mov    %rsi,%r12							     ----:	mov    %rsi,%r12
     ----:	push   %rbp								     ----:	push   %rbp
     ----:	push   %rbx								     ----:	push   %rbx
     ----:	sub    $0x18,%rsp							     ----:	sub    $0x18,%rsp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:790						/home/alex/lsrc/qemu/qemu.git/util/qht.----:790
     ----:	mov    (%rdi),%r13							     ----:	mov    (%rdi),%r13
/home/alex/lsrc/qemu/qemu.git/util/qht.----:794						/home/alex/lsrc/qemu/qemu.git/util/qht.----:794
     ----:	lea    0x18(%rsi),%r15							     ----:	lea    0x18(%rsi),%r15
/home/alex/lsrc/qemu/qemu.git/util/qht.----:795						/home/alex/lsrc/qemu/qemu.git/util/qht.----:795
     ----:	lea    0x30(%r12),%r14							     ----:	lea    0x30(%r12),%r14
/home/alex/lsrc/qemu/qemu.git/util/qht.----:792						/home/alex/lsrc/qemu/qemu.git/util/qht.----:792
     ----:	movq   $0x0,0x8(%rsi)							     ----:	movq   $0x0,0x8(%rsi)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:793						/home/alex/lsrc/qemu/qemu.git/util/qht.----:793
     ----:	movq   $0x0,0x10(%rsi)							     ----:	movq   $0x0,0x10(%rsi)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:794						/home/alex/lsrc/qemu/qemu.git/util/qht.----:794
     ----:	mov    %r15,%rdi							     ----:	mov    %r15,%rdi
     ----:	callq  f75 <qht_statistics_init+0x35>					     ----:	callq  f75 <qht_statistics_init+0x35>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:795						/home/alex/lsrc/qemu/qemu.git/util/qht.----:795
     ----:	mov    %r14,%rdi							     ----:	mov    %r14,%rdi
     ----:	callq  f7d <qht_statistics_init+0x3d>					     ----:	callq  f7d <qht_statistics_init+0x3d>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:797						/home/alex/lsrc/qemu/qemu.git/util/qht.----:797
     ----:	test   %r13,%r13							     ----:	test   %r13,%r13
     ----:	je     10ba <qht_statistics_init+0x17a>					     ----:	je     10ba <qht_statistics_init+0x17a>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:801						/home/alex/lsrc/qemu/qemu.git/util/qht.----:801
     ----:	mov    0x18(%r13),%rax							     ----:	mov    0x18(%r13),%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:803						/home/alex/lsrc/qemu/qemu.git/util/qht.----:803
     ----:	xor    %r8d,%r8d							     ----:	xor    %r8d,%r8d
     ----:	xor    %ebp,%ebp							     ----:	xor    %ebp,%ebp
/home/alex/lsrc/qemu/qemu.git/util/qht.----:801						/home/alex/lsrc/qemu/qemu.git/util/qht.----:801
     ----:	mov    %rax,(%r12)							     ----:	mov    %rax,(%r12)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:803						/home/alex/lsrc/qemu/qemu.git/util/qht.----:803
     ----:	cmpq   $0x0,0x18(%r13)							     ----:	cmpq   $0x0,0x18(%r13)
     ----:	je     105e <qht_statistics_init+0x11e>					     ----:	je     105e <qht_statistics_init+0x11e>
     ----:	xchg   %ax,%ax								     ----:	xchg   %ax,%ax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:804						/home/alex/lsrc/qemu/qemu.git/util/qht.----:804
     ----:	shl    $0x6,%r8								     ----:	shl    $0x6,%r8
     ----:	add    0x10(%r13),%r8							     ----:	add    0x10(%r13),%r8
     ----:	lea    0x4(%r8),%r10							     ----:	lea    0x4(%r8),%r10
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:51
     ----:	mov    (%r10),%r9d							     ----:	mov    (%r10),%r9d
qht_statistics_init():									qht_statistics_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:814						/home/alex/lsrc/qemu/qemu.git/util/qht.----:814
     ----:	xor    %ebx,%ebx							     ----:	xor    %ebx,%ebx
seqlock_read_begin():									seqlock_read_begin():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:55
     ----:	and    $0xfffffffe,%r9d							     ----:	and    $0xfffffffe,%r9d
qht_statistics_init():									qht_statistics_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:815						/home/alex/lsrc/qemu/qemu.git/util/qht.----:815
     ----:	mov    %r8,%rsi								     ----:	mov    %r8,%rsi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:813						/home/alex/lsrc/qemu/qemu.git/util/qht.----:813
     ----:	xor    %edi,%edi							     ----:	xor    %edi,%edi
     ----:	nopw   0x0(%rax,%rax,1)							     ----:	nopw   0x0(%rax,%rax,1)
     ----:	lea    0x18(%rsi),%rax							     ----:	lea    0x18(%rsi),%rax
     ----:	lea    0x4(%rbx),%rcx							     ----:	lea    0x4(%rbx),%rcx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:818						/home/alex/lsrc/qemu/qemu.git/util/qht.----:818
     ----:	mov    (%rax),%rdx							     ----:	mov    (%rax),%rdx
     ----:	test   %rdx,%rdx							     ----:	test   %rdx,%rdx
     ----:	je     fdd <qht_statistics_init+0x9d>					     ----:	je     fdd <qht_statistics_init+0x9d>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:821 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:821 (discriminator 2)
     ----:	add    $0x1,%rbx							     ----:	add    $0x1,%rbx
     ----:	add    $0x8,%rax							     ----:	add    $0x8,%rax
/home/alex/lsrc/qemu/qemu.git/util/qht.----:817 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:817 (discriminator 2)
     ----:	cmp    %rcx,%rbx							     ----:	cmp    %rcx,%rbx
     ----:	jne    fc8 <qht_statistics_init+0x88>					     ----:	jne    fc8 <qht_statistics_init+0x88>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:823						/home/alex/lsrc/qemu/qemu.git/util/qht.----:823
     ----:	add    $0x1,%rdi							     ----:	add    $0x1,%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:824						/home/alex/lsrc/qemu/qemu.git/util/qht.----:824
     ----:	mov    0x38(%rsi),%rsi							     ----:	mov    0x38(%rsi),%rsi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:825						/home/alex/lsrc/qemu/qemu.git/util/qht.----:825
     ----:	test   %rsi,%rsi							     ----:	test   %rsi,%rsi
     ----:	jne    fc0 <qht_statistics_init+0x80>					     ----:	jne    fc0 <qht_statistics_init+0x80>
seqlock_read_retry():									seqlock_read_retry():
/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62					/home/alex/lsrc/qemu/qemu.git/include/qemu/seqlock.h:62
     ----:	mov    (%r10),%eax							     ----:	mov    (%r10),%eax
qht_statistics_init():									qht_statistics_init():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:826						/home/alex/lsrc/qemu/qemu.git/util/qht.----:826
     ----:	cmp    %eax,%r9d							     ----:	cmp    %eax,%r9d
     ----:	jne    fac <qht_statistics_init+0x6c>					     ----:	jne    fac <qht_statistics_init+0x6c>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:828						/home/alex/lsrc/qemu/qemu.git/util/qht.----:828
     ----:	test   %rbx,%rbx							     ----:	test   %rbx,%rbx
     ----:	je     1070 <qht_statistics_init+0x130>					     ----:	je     1070 <qht_statistics_init+0x130>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:829						/home/alex/lsrc/qemu/qemu.git/util/qht.----:829
     ----:	test   %rdi,%rdi							     ----:	test   %rdi,%rdi
     ----:	js     109c <qht_statistics_init+0x15c>					     ----:	js     109c <qht_statistics_init+0x15c>
    ----:	pxor   %xmm1,%xmm1							    ----:	pxor   %xmm1,%xmm1
    ----:	cvtsi2sd %rdi,%xmm1							    ----:	cvtsi2sd %rdi,%xmm1
    ----:	movapd %xmm1,%xmm0							    ----:	movapd %xmm1,%xmm0
    ----:	mov    %r15,%rdi							    ----:	mov    %r15,%rdi
    ----:	movsd  %xmm1,0x8(%rsp)							    ----:	movsd  %xmm1,0x8(%rsp)
    ----:	callq  101b <qht_statistics_init+0xdb>					    ----:	callq  101b <qht_statistics_init+0xdb>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:830						/home/alex/lsrc/qemu/qemu.git/util/qht.----:830
    ----:	test   %rbx,%rbx							    ----:	test   %rbx,%rbx
    ----:	movsd  0x8(%rsp),%xmm1							    ----:	movsd  0x8(%rsp),%xmm1
    ----:	js     107e <qht_statistics_init+0x13e>					    ----:	js     107e <qht_statistics_init+0x13e>
    ----:	pxor   %xmm0,%xmm0							    ----:	pxor   %xmm0,%xmm0
    ----:	cvtsi2sd %rbx,%xmm0							    ----:	cvtsi2sd %rbx,%xmm0
    ----:	mulsd  0x0(%rip),%xmm0        # 1037 <qht_statistics_init+0xf7>		    ----:	mulsd  0x0(%rip),%xmm0        # 1037 <qht_statistics_init+0xf7>
    ----:	mov    %r14,%rdi							    ----:	mov    %r14,%rdi
    ----:	divsd  %xmm1,%xmm0							    ----:	divsd  %xmm1,%xmm0
    ----:	callq  1043 <qht_statistics_init+0x103>					    ----:	callq  1043 <qht_statistics_init+0x103>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:832						/home/alex/lsrc/qemu/qemu.git/util/qht.----:832
    ----:	addq   $0x1,0x8(%r12)							    ----:	addq   $0x1,0x8(%r12)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:833						/home/alex/lsrc/qemu/qemu.git/util/qht.----:833
    ----:	add    %rbx,0x10(%r12)							    ----:	add    %rbx,0x10(%r12)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:803 (discriminator 2)			/home/alex/lsrc/qemu/qemu.git/util/qht.----:803 (discriminator 2)
    ----:	add    $0x1,%ebp							    ----:	add    $0x1,%ebp
    ----:	movslq %ebp,%r8								    ----:	movslq %ebp,%r8
    ----:	cmp    0x18(%r13),%r8							    ----:	cmp    0x18(%r13),%r8
    ----:	jb     fa0 <qht_statistics_init+0x60>					    ----:	jb     fa0 <qht_statistics_init+0x60>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:838						/home/alex/lsrc/qemu/qemu.git/util/qht.----:838
    ----:	add    $0x18,%rsp							    ----:	add    $0x18,%rsp
    ----:	pop    %rbx								    ----:	pop    %rbx
    ----:	pop    %rbp								    ----:	pop    %rbp
    ----:	pop    %r12								    ----:	pop    %r12
    ----:	pop    %r13								    ----:	pop    %r13
    ----:	pop    %r14								    ----:	pop    %r14
    ----:	pop    %r15								    ----:	pop    %r15
    ----:	retq   									    ----:	retq   
    ----:	nopl   (%rax)								    ----:	nopl   (%rax)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:835						/home/alex/lsrc/qemu/qemu.git/util/qht.----:835
    ----:	pxor   %xmm0,%xmm0							    ----:	pxor   %xmm0,%xmm0
    ----:	mov    %r14,%rdi							    ----:	mov    %r14,%rdi
    ----:	callq  107c <qht_statistics_init+0x13c>					    ----:	callq  107c <qht_statistics_init+0x13c>
    ----:	jmp    104e <qht_statistics_init+0x10e>					    ----:	jmp    104e <qht_statistics_init+0x10e>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:830						/home/alex/lsrc/qemu/qemu.git/util/qht.----:830
    ----:	mov    %rbx,%rax							    ----:	mov    %rbx,%rax
    ----:	mov    %rbx,%rdx							    ----:	mov    %rbx,%rdx
    ----:	pxor   %xmm0,%xmm0							    ----:	pxor   %xmm0,%xmm0
    ----:	shr    %rax								    ----:	shr    %rax
    ----:	and    $0x1,%edx							    ----:	and    $0x1,%edx
    ----:	or     %rdx,%rax							    ----:	or     %rdx,%rax
    ----:	cvtsi2sd %rax,%xmm0							    ----:	cvtsi2sd %rax,%xmm0
    ----:	addsd  %xmm0,%xmm0							    ----:	addsd  %xmm0,%xmm0
    ----:	jmp    102f <qht_statistics_init+0xef>					    ----:	jmp    102f <qht_statistics_init+0xef>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:829						/home/alex/lsrc/qemu/qemu.git/util/qht.----:829
    ----:	mov    %rdi,%rax							    ----:	mov    %rdi,%rax
    ----:	pxor   %xmm1,%xmm1							    ----:	pxor   %xmm1,%xmm1
    ----:	shr    %rax								    ----:	shr    %rax
    ----:	and    $0x1,%edi							    ----:	and    $0x1,%edi
    ----:	or     %rdi,%rax							    ----:	or     %rdi,%rax
    ----:	cvtsi2sd %rax,%xmm1							    ----:	cvtsi2sd %rax,%xmm1
    ----:	addsd  %xmm1,%xmm1							    ----:	addsd  %xmm1,%xmm1
    ----:	jmpq   1009 <qht_statistics_init+0xc9>					    ----:	jmpq   1009 <qht_statistics_init+0xc9>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:798						/home/alex/lsrc/qemu/qemu.git/util/qht.----:798
    ----:	movq   $0x0,(%r12)							    ----:	movq   $0x0,(%r12)
/home/alex/lsrc/qemu/qemu.git/util/qht.----:838						/home/alex/lsrc/qemu/qemu.git/util/qht.----:838
    ----:	add    $0x18,%rsp							    ----:	add    $0x18,%rsp
    ----:	pop    %rbx								    ----:	pop    %rbx
    ----:	pop    %rbp								    ----:	pop    %rbp
    ----:	pop    %r12								    ----:	pop    %r12
    ----:	pop    %r13								    ----:	pop    %r13
    ----:	pop    %r14								    ----:	pop    %r14
    ----:	pop    %r15								    ----:	pop    %r15
    ----:	retq   									    ----:	retq   
    ----:	nopl   0x0(%rax,%rax,1)							    ----:	nopl   0x0(%rax,%rax,1)
    ----:	nopw   %cs:0x0(%rax,%rax,1)						    ----:	nopw   %cs:0x0(%rax,%rax,1)

00000000000010e0 <qht_statistics_destroy>:						00000000000010e0 <qht_statistics_destroy>:
qht_statistics_destroy():								qht_statistics_destroy():
/home/alex/lsrc/qemu/qemu.git/util/qht.----:841						/home/alex/lsrc/qemu/qemu.git/util/qht.----:841
    ----:	push   %rbx								    ----:	push   %rbx
    ----:	mov    %rdi,%rbx							    ----:	mov    %rdi,%rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:842						/home/alex/lsrc/qemu/qemu.git/util/qht.----:842
    ----:	lea    0x30(%rdi),%rdi							    ----:	lea    0x30(%rdi),%rdi
    ----:	callq  10ed <qht_statistics_destroy+0xd>				    ----:	callq  10ed <qht_statistics_destroy+0xd>
/home/alex/lsrc/qemu/qemu.git/util/qht.----:843						/home/alex/lsrc/qemu/qemu.git/util/qht.----:843
    ----:	lea    0x18(%rbx),%rdi							    ----:	lea    0x18(%rbx),%rdi
/home/alex/lsrc/qemu/qemu.git/util/qht.----:844						/home/alex/lsrc/qemu/qemu.git/util/qht.----:844
    ----:	pop    %rbx								    ----:	pop    %rbx
/home/alex/lsrc/qemu/qemu.git/util/qht.----:843						/home/alex/lsrc/qemu/qemu.git/util/qht.----:843
    ----:	jmpq   10f7 <qht_statistics_destroy+0x17>				    ----:	jmpq   10f7 <qht_statistics_destroy+0x17>

[-- Attachment #3: Type: text/plain, Size: 18 bytes --]



--
Alex Bennée

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2016-09-22  9:53 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-19 15:51 [Qemu-devel] [RFC 0/8] A couple of fixes for ThreadSanitizer Alex Bennée
2016-09-19 15:51 ` [Qemu-devel] [RFC 1/8] ui/vnc-enc-tight: add abort() for unexpected default Alex Bennée
2016-09-20  8:02   ` Marc-André Lureau
2016-09-20  8:24     ` Paolo Bonzini
2016-09-20 14:59       ` Alex Bennée
2016-09-19 15:51 ` [Qemu-devel] [RFC 2/8] tcg/optimize: move default return out of if statement Alex Bennée
2016-09-20  8:02   ` Marc-André Lureau
2016-09-19 15:51 ` [Qemu-devel] [RFC 3/8] new: blacklist.tsan Alex Bennée
2016-09-20  8:03   ` Marc-André Lureau
2016-09-19 15:51 ` [Qemu-devel] [RFC 4/8] seqlock: use atomic writes for the sequence Alex Bennée
2016-09-19 15:51 ` [Qemu-devel] [RFC 5/8] qom/object: update class cache atomically Alex Bennée
2016-09-20  8:36   ` Marc-André Lureau
2016-09-20 14:59     ` Alex Bennée
2016-09-20 15:04       ` Paolo Bonzini
2016-09-19 15:51 ` [Qemu-devel] [RFC 6/8] cpu: atomically modify cpu->exit_request Alex Bennée
2016-09-19 15:51 ` [Qemu-devel] [RFC 7/8] util/qht: atomically set b->hashes Alex Bennée
2016-09-19 18:06   ` Emilio G. Cota
2016-09-19 18:37     ` Paolo Bonzini
2016-09-19 19:06       ` Emilio G. Cota
2016-09-20  7:39         ` Paolo Bonzini
2016-09-22  9:51           ` Alex Bennée
2016-09-19 15:51 ` [Qemu-devel] [RFC 8/8] .travis.yml: add gcc sanitizer build Alex Bennée

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.