aboutsummaryrefslogtreecommitdiffstats
path: root/wsutil/ws_cpuid.h
diff options
context:
space:
mode:
authorDarius Davis <darius@vmware.com>2018-04-04 09:06:20 +1000
committerAnders Broman <a.broman58@gmail.com>2018-04-05 07:34:01 +0000
commit5c2eade45d733433bfa5e513950b28819faa8751 (patch)
tree74ab53362c9e11464f7f934901dae36558496b24 /wsutil/ws_cpuid.h
parent4d19c649cc73dbad6f0606a4890c7b83fb805134 (diff)
Tweak ws_cpuid so that Valgrind is happy.
Valgrind considers the "cpuid" instruction to always depend on inputs from eax and ecx, even though it's only a subset of values of eax for which ecx is relevant. If ecx is undefined when cpuid is executed, the outputs of cpuid will be considered undefined. Instead of suppressing the resulting uninitialised-value warning (the suppression for which is now out-of-date anyway, now that register_all_protocols is moved to a worker thread), let's simply set ecx to zero in ws_cpuid. Testing done: Built Wireshark on Linux amd64. Before this change, running "tools/valgrind-wireshark.sh ./test/captures/dhcp.pcap" with valgrind-3.12.0.SVN on Debian 9.4 amd64 would yield the following Valgrind error: ==2416== Thread 2: ==2416== Conditional jump or move depends on uninitialised value(s) ==2416== at 0xACB8B22: ws_mempbrk_sse42_compile (ws_mempbrk_sse42.c:58) ==2416== by 0x74F4960: register_all_protocols_worker (register.c:37) ==2416== by 0xB1403D4: g_thread_proxy (gthread.c:784) ==2416== by 0xD438493: start_thread (pthread_create.c:333) ==2416== by 0xB4CAACE: clone (clone.S:97) With the change, the above message is gone. Inspected the disassembly of function ws_cpuid, and it looks sane -- just an added "xor ecx, ecx" at the top. Change-Id: I2fb382309cac234c400286a6e9fac7d922912c63 Reviewed-on: https://code.wireshark.org/review/26733 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'wsutil/ws_cpuid.h')
-rw-r--r--wsutil/ws_cpuid.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/wsutil/ws_cpuid.h b/wsutil/ws_cpuid.h
index 2ba696778d..d649e55ced 100644
--- a/wsutil/ws_cpuid.h
+++ b/wsutil/ws_cpuid.h
@@ -38,7 +38,8 @@ ws_cpuid(guint32 *CPUInfo, int selector)
"=b" (CPUInfo[1]),
"=c" (CPUInfo[2]),
"=d" (CPUInfo[3])
- : "a"(selector));
+ : "a" (selector),
+ "c" (0));
return TRUE;
}
#elif defined(__i386__)