Patchwork vhost build fix for i386

login
register
mail settings
Submitter Wolfgang Mauerer
Date July 11, 2011, 12:57 p.m.
Message ID <1310389063-16382-1-git-send-email-wolfgang.mauerer@siemens.com>
Download mbox | patch
Permalink /patch/104207/
State New
Headers show

Comments

Wolfgang Mauerer - July 11, 2011, 12:57 p.m.
vhost.c uses __sync_fetch_and_and(), which is only
available for -march=i486 and above (see
https://bugzilla.redhat.com/show_bug.cgi?id=624279).

Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
---
 configure |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)
Stefan Hajnoczi - July 11, 2011, 1:31 p.m.
On Mon, Jul 11, 2011 at 1:57 PM, Wolfgang Mauerer
<wolfgang.mauerer@siemens.com> wrote:
> vhost.c uses __sync_fetch_and_and(), which is only
> available for -march=i486 and above (see
> https://bugzilla.redhat.com/show_bug.cgi?id=624279).

Seems reasonable.  I am happy to add it to the trivial-patches tree
but will wait another day to let others who are better gcc wizards
consider it.

Stefan
Stefan Hajnoczi - July 25, 2011, 10:17 a.m.
On Mon, Jul 11, 2011 at 02:57:43PM +0200, Wolfgang Mauerer wrote:
> vhost.c uses __sync_fetch_and_and(), which is only
> available for -march=i486 and above (see
> https://bugzilla.redhat.com/show_bug.cgi?id=624279).
> 
> Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com>
> ---
>  configure |   23 +++++++++++++++++++++++
>  1 files changed, 23 insertions(+), 0 deletions(-)

Thanks, applied to the trivial patches tree:
http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/trivial-patches

Stefan

Patch

diff --git a/configure b/configure
index 88159ac..3b6facb 100755
--- a/configure
+++ b/configure
@@ -2464,6 +2464,29 @@  if test "$trace_backend" = "dtrace"; then
 fi
 
 ##########################################
+# __sync_fetch_and_and requires at least -march=i486. Many toolchains
+# use i686 as default anyway, but for those that don't, an explicit
+# specification is necessary
+if test $vhost_net = "yes" && test $cpu = "i386"; then
+  cat > $TMPC << EOF
+int sfaa(unsigned *ptr)
+{
+  return __sync_fetch_and_and(ptr, 0);
+}
+
+int main(int argc, char **argv)
+{
+  int val = 42;
+  sfaa(&val);
+  return val;
+}
+EOF
+  if ! compile_prog "" "" ; then
+    CFLAGS+="-march=i486"
+  fi
+fi
+
+##########################################
 # End of CC checks
 # After here, no more $cc or $ld runs