WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [xen-4.0-testing test] 7147: regressions - FAIL

To: Keir Fraser <keir@xxxxxxx>
Subject: Re: [Xen-devel] [xen-4.0-testing test] 7147: regressions - FAIL
From: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Date: Mon, 23 May 2011 16:33:02 +0100
Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>, Olaf Hering <olaf@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 23 May 2011 08:33:35 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <CA003AA1.2D8CD%keir@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <19930.30837.468592.46428@xxxxxxxxxxxxxxxxxxxxxxxx> <CA003AA1.2D8CD%keir@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Keir Fraser writes ("Re: [Xen-devel] [xen-4.0-testing test] 7147: regressions - 
FAIL"):
> I've been fiddling with a similar principle but much smaller patch (see
> below). But it's failing for me in the same way as yours -- *all* optional
> flags disappear from my CFLAGS (e.g., -Wno-unused-but-set-variable, which my
> gcc-4.5.1 definitely does support).

You have to check the exit status, not the stderr output.  It might be
right do do that even for ordinary (non -Wno-*) options.

But TBH I really prefer my script because it's actually
comprehensible.  You can even run it by hand from the command line:

mariner:xen-unstable-tools.hg> config/test-cc-option.sh gcc -fno-strict-aliasing
-fno-strict-aliasing
mariner:xen-unstable-tools.hg> config/test-cc-option.sh gcc -fno-rapture

mariner:xen-unstable-tools.hg> config/test-cc-option.sh gcc 
-Wdeclaration-after-statement
-Wdeclaration-after-statement
mariner:xen-unstable-tools.hg> config/test-cc-option.sh gcc 
-Wno-declaration-after-statement
-Wno-declaration-after-statement
mariner:xen-unstable-tools.hg> config/test-cc-option.sh gcc -Wno-rapture

mariner:xen-unstable-tools.hg>

Below is a final version of my fix, ready to push to unstable.

Ian.

# HG changeset patch
# User Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
# Date 1306164314 -3600
# Node ID 512f0b1937b40e3ecc79dea6768646206e0f69f3
# Parent  0f670f5146c858ffdc743176d4e22aef4bfe12da
gcc compile fix (reprise): deal with fallout from GCC PR 28322

21492:19eefd764f6f breaks the build on certain GCC 4.3 systems which
have a broken version of the fix to upstream GCC PR 28322.

Specifically, those gcc's (which include current Debian lenny's)
ignore unknown -Wno-foo options if there are no warnings, but treat
them as an error otherwise.  If you compile with -Wno-error the effect
is to defeat straightforward attempts (like ours) to filter out
unknown -Wno-foo options and instead to bomb out with a complaint the
first time any file is compiled which causes any other, unrelated,
warning.

In this patch I introduce a more sophisticated way of trying to filter
out unknown -Wno-foo options.  The machinery is moved into a helper
script.  For -Wno-foo options, we test whether compiling a file with
another warning, with -Wno-error, and with the option to be tested,
succeeds or fails.  On compilers with no fix for PR 28322, or with the
broken fix, this will fail.  On compilers with a correct fix for PR
28322 this will succeed but the warning option is then harmless.

For normal compiler options, we simply use the same test we did
before: does compiling /dev/null with this option produce any stderr
output.

Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>

diff -r 0f670f5146c8 -r 512f0b1937b4 Config.mk
--- a/Config.mk Sat May 21 07:55:46 2011 +0100
+++ b/Config.mk Mon May 23 16:25:14 2011 +0100
@@ -72,8 +72,7 @@ PYTHON_PREFIX_ARG ?= --prefix="$(PREFIX)
 
 # cc-option: Check if compiler supports first option, else fall back to second.
 # Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586)
-cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \
-              /dev/null 2>&1`"; then echo "$(2)"; else echo "$(3)"; fi ;)
+cc-option = $(shell $(XEN_ROOT)/config/test-cc-option.sh "$(1)" "$(2)" "$(3)")
 
 # cc-option-add: Add an option to compilation flags, but only if supported.
 # Usage: $(call cc-option-add CFLAGS,CC,-march=winchip-c6)
diff -r 0f670f5146c8 -r 512f0b1937b4 config/test-cc-option.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/config/test-cc-option.sh  Mon May 23 16:25:14 2011 +0100
@@ -0,0 +1,31 @@
+#!/bin/sh
+set -e
+
+cc="$1"
+opt="$2"
+alt="$3"
+
+case "$opt" in
+-Wno-*)
+   # Sadly a broken implementation of the fix to GCC PR 28322
+   # (actually shipped eg in Debian lenny) makes it hard to spot
+   # whether the compiler recognises a -Wno-foo option without
+   # generating a warning for some other reason.
+
+   input="${0%-cc-option.sh}-cc-warning.c"
+   if $cc $opt -Wreturn-type -Wno-error -S -o /dev/null "$input" \
+           >/dev/null 2>&1; then
+       res="$opt"
+   else
+       res="$alt"
+   fi
+   ;;
+*)
+    if test -z "`$cc $opt -S -o /dev/null -xc $input 2>&1`"; then
+        res="$opt"
+    else
+        res="$alt"
+    fi
+    ;;
+esac
+printf "%s\n" "$res"
diff -r 0f670f5146c8 -r 512f0b1937b4 config/test-cc-warning.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/config/test-cc-warning.c  Mon May 23 16:25:14 2011 +0100
@@ -0,0 +1,2 @@
+extern int bogus(void);
+int bogus(void) { }

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel