[PATCH, RFC] fix UP futex code to not generate invalid streqt instruction
Russell King - ARM Linux
linux at arm.linux.org.uk
Fri Jul 22 14:13:22 EDT 2011
On Fri, Jul 22, 2011 at 07:25:14PM +0200, Mikael Pettersson wrote:
> Compiling kernel 3.0 for UP ARM (ARMv5) I see:
> kernel/futex.c: In function 'fixup_pi_state_owner':
> kernel/futex.c:1549: warning: 'curval' may be used uninitialized in this function
> kernel/futex.c: In function 'handle_futex_death':
> kernel/futex.c:2454: warning: 'nval' may be used uninitialized in this function
> /tmp/ccVDjh0q.s: Assembler messages:
> /tmp/ccVDjh0q.s:113: Warning: source register same as write-back base
It's actually not a problem - the warning has been around for quite a long
time and I've just been ignoring it having investigated it already. Why?
The compare-and-exchange is guaranteed to fail at this point without this
instruction even being executed.
> @@ -104,13 +104,14 @@ futex_init:
> mvnne r3, #13
> bne .L6
> mvn r2, #13
> @ 97 "/tmp/linux-3.0/arch/arm/include/asm/futex.h" 1
> -1: ldrt r1, [r3]
> teq r1, r3
> it eq @ explicit IT needed for the 2b label
> -2: streqt r3, [r3]
> .pushsection __ex_table,"a"
> .align 3
r3 = 0, so the ldrt causes a data abort, and invokes the fixup, which
will skip over the above.
So it's really not a problem, and this is the only place where that
'optimization' by the compiler will happen. So no need to fix it.
More information about the linux-arm-kernel