aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/time
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2018-10-01 12:52:15 -0700
committerThomas Gleixner <tglx@linutronix.de>2018-10-02 08:28:15 +0200
commit715bd9d12f84d8f5cc8ad21d888f9bc304a8eb0b (patch)
treea213618d05116da7b643f574d30072e46a7274c7 /tools/time
parentLinux 4.19-rc6 (diff)
downloadwireguard-linux-715bd9d12f84d8f5cc8ad21d888f9bc304a8eb0b.tar.xz
wireguard-linux-715bd9d12f84d8f5cc8ad21d888f9bc304a8eb0b.zip
x86/vdso: Fix asm constraints on vDSO syscall fallbacks
The syscall fallbacks in the vDSO have incorrect asm constraints. They are not marked as writing to their outputs -- instead, they are marked as clobbering "memory", which is useless. In particular, gcc is smart enough to know that the timespec parameter hasn't escaped, so a memory clobber doesn't clobber it. And passing a pointer as an asm *input* does not tell gcc that the pointed-to value is changed. Add in the fact that the asm instructions weren't volatile, and gcc was free to omit them entirely unless their sole output (the return value) is used. Which it is (phew!), but that stops happening with some upcoming patches. As a trivial example, the following code: void test_fallback(struct timespec *ts) { vdso_fallback_gettime(CLOCK_MONOTONIC, ts); } compiles to: 00000000000000c0 <test_fallback>: c0: c3 retq To add insult to injury, the RCX and R11 clobbers on 64-bit builds were missing. The "memory" clobber is also unnecessary -- no ordering with respect to other memory operations is needed, but that's going to be fixed in a separate not-for-stable patch. Fixes: 2aae950b21e4 ("x86_64: Add vDSO for x86-64 with gettimeofday/clock_gettime/getcpu") Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/2c0231690551989d2fafa60ed0e7b5cc8b403908.1538422295.git.luto@kernel.org
Diffstat (limited to 'tools/time')
0 files changed, 0 insertions, 0 deletions