Comment 2 for bug 670776

Revision history for this message
Peter Maydell (pmaydell) wrote :

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 :-)