[Python-checkins] cpython (2.7): Issue #18028: Fix aliasing issue in READ_TIMESTAMP() of ceval.c on x86_64,

victor.stinner python-checkins at python.org
Fri Dec 12 13:20:32 CET 2014


https://hg.python.org/cpython/rev/9565b56a4615
changeset:   93851:9565b56a4615
branch:      2.7
parent:      93841:cb085b07ea34
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Fri Dec 12 13:19:00 2014 +0100
summary:
  Issue #18028: Fix aliasing issue in READ_TIMESTAMP() of ceval.c  on x86_64,
when Python is configure with --with-tsc. Patch written by Christian Heimes.

files:
  Python/ceval.c |  8 +++++---
  1 files changed, 5 insertions(+), 3 deletions(-)


diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -66,9 +66,11 @@
    even in 64-bit mode, we need to use "a" and "d" for the lower and upper
    32-bit pieces of the result. */
 
-#define READ_TIMESTAMP(val) \
-    __asm__ __volatile__("rdtsc" : \
-                         "=a" (((int*)&(val))[0]), "=d" (((int*)&(val))[1]));
+#define READ_TIMESTAMP(val) do {                        \
+    unsigned int h, l;                                  \
+    __asm__ __volatile__("rdtsc" : "=a" (l), "=d" (h)); \
+    (val) = ((uint64)l) | (((uint64)h) << 32);          \
+    } while(0)
 
 
 #else

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list