From d15f4b53d0d52a94b3c44b927816967a151f7ccf Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Mon, 12 Mar 2012 15:53:06 +0200 Subject: Fix q_atomic_decrement for 64-bit Solaris q_atomic_decrement and q_atomic_increment did not set return value correctly. They expected the %eax return value register to be empty, when it was not necessarily so. This could occur when when compiler inlined e.g., ~QByteArray -> QBasicAtomicInt::deref -> q_atomic_decrement chain to application code. Data would not to be freed and leak memory. Fixed so that %eax is now zero'd before setting return value. Task-number: QTBUG-24470 Change-Id: I83495e3ddb938713863a7b00714215c331b9562b Reviewed-by: Thiago Macieira --- src/corelib/arch/x86_64/qatomic_sun.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/corelib/arch/x86_64/qatomic_sun.s b/src/corelib/arch/x86_64/qatomic_sun.s index 37969e6..b7ce769 100644 --- a/src/corelib/arch/x86_64/qatomic_sun.s +++ b/src/corelib/arch/x86_64/qatomic_sun.s @@ -7,6 +7,7 @@ q_atomic_increment: lock incl (%rdi) + movl $0,%eax setne %al ret .size q_atomic_increment,.-q_atomic_increment @@ -18,6 +19,7 @@ q_atomic_increment: q_atomic_decrement: lock decl (%rdi) + movl $0,%eax setne %al ret .size q_atomic_decrement,.-q_atomic_decrement -- cgit v0.12