qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Bug 670776] Re: Build errors on TEGRA2(ubuntu), testandset


From: Peter Maydell
Subject: [Qemu-devel] [Bug 670776] Re: Build errors on TEGRA2(ubuntu), testandset()
Date: Thu, 04 Nov 2010 11:03:44 -0000

The Ubuntu ARM gcc defaults to building in Thumb mode. The swp/swpb
instructions only exist in ARM mode.

In any case, swp is deprecated for more recent ARM architectures (ARMv6
and above), and on ARMv7 MP it will UNDEF and have to be emulated in the
kernel. So the testandset implementation should probably be replaced
with something involving ldrex/strex for cores that support it, or by
using the gcc sync primitives (needs a gcc 4.4.1 or better, I think).

This Ubuntu bug: https://bugs.launchpad.net/ubuntu/+source/qemu-
kvm/+bug/514252 has a patch which checks for the gcc primitives in
configure and uses them if they exist -- you might like to try that.

Or if we believe the comment at the top of qemu-lock.h that "most of
this code should be redundant" we could do the cleanup to get rid of it
completely :-)

-- 
Build errors on TEGRA2(ubuntu), testandset()
https://bugs.launchpad.net/bugs/670776
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.

Status in QEMU: New

Bug description:
Build errors on TEGRA2(ubuntu)

/tmp/ccqt9Y5t.s: Assembler messages:
/tmp/ccqt9Y5t.s:1899: Error: selected processor does not support Thumb mode 
'swp r4, r4, [r2]'
/tmp/ccqt9Y5t.s:1974: Error: selected processor does not support Thumb mode 
'swp r5, r5, [ip]'
make[1]: *** [exec.o Error 1

qemu-lock.h

#elif defined(__arm__)
static inline int testandset (int *spinlock)
{
    register unsigned int ret;
    __asm__ __volatile__("swp %0, %1, [%2]"
                         : "=r"(ret)
                         : "0"(1), "r"(spinlock));
    return ret;
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]