* [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.