Просмотр исходного кода

configure: Split valgrind test into pragma test and valgrind.h test

Split the configure test that checks for valgrind into two, one
part checking whether we have the gcc pragma to disable unused-but-set
variables, and the other part checking for the existence of valgrind.h.
The first of these has to be compiled with -Werror and the second
does not and shouldn't generate any warnings.

This (a) allows us to enable "make errors in configure tests be
build failures" and (b) enables use of valgrind on systems with
a gcc which doesn't know about -Wunused-but-set-varibale, like
Debian squeeze.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Peter Maydell 13 лет назад
Родитель
Сommit
06d71fa148
2 измененных файлов с 25 добавлено и 2 удалено
  1. 21 2
      configure
  2. 4 0
      coroutine-ucontext.c

+ 21 - 2
configure

@@ -2872,15 +2872,30 @@ if compile_prog "" "" ; then
     linux_magic_h=yes
     linux_magic_h=yes
 fi
 fi
 
 
+########################################
+# check whether we can disable the -Wunused-but-set-variable
+# option with a pragma (this is needed to silence a warning in
+# some versions of the valgrind VALGRIND_STACK_DEREGISTER macro.)
+# This test has to be compiled with -Werror as otherwise an
+# unknown pragma is only a warning.
+pragma_disable_unused_but_set=no
+cat > $TMPC << EOF
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+int main(void) {
+    return 0;
+}
+EOF
+if compile_prog "-Werror" "" ; then
+    pragma_disable_unused_but_set=yes
+fi
+
 ########################################
 ########################################
 # check if we have valgrind/valgrind.h
 # check if we have valgrind/valgrind.h
 
 
 valgrind_h=no
 valgrind_h=no
 cat > $TMPC << EOF
 cat > $TMPC << EOF
 #include <valgrind/valgrind.h>
 #include <valgrind/valgrind.h>
-#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 int main(void) {
 int main(void) {
-  VALGRIND_STACK_DEREGISTER(0);
   return 0;
   return 0;
 }
 }
 EOF
 EOF
@@ -3397,6 +3412,10 @@ if test "$linux_magic_h" = "yes" ; then
   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
 fi
 fi
 
 
+if test "$pragma_disable_unused_but_set" = "yes" ; then
+  echo "CONFIG_PRAGMA_DISABLE_UNUSED_BUT_SET=y" >> $config_host_mak
+fi
+
 if test "$valgrind_h" = "yes" ; then
 if test "$valgrind_h" = "yes" ; then
   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
 fi
 fi

+ 4 - 0
coroutine-ucontext.c

@@ -200,14 +200,18 @@ Coroutine *qemu_coroutine_new(void)
 }
 }
 
 
 #ifdef CONFIG_VALGRIND_H
 #ifdef CONFIG_VALGRIND_H
+#ifdef CONFIG_PRAGMA_DISABLE_UNUSED_BUT_SET
 /* Work around an unused variable in the valgrind.h macro... */
 /* Work around an unused variable in the valgrind.h macro... */
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
 static inline void valgrind_stack_deregister(CoroutineUContext *co)
 static inline void valgrind_stack_deregister(CoroutineUContext *co)
 {
 {
     VALGRIND_STACK_DEREGISTER(co->valgrind_stack_id);
     VALGRIND_STACK_DEREGISTER(co->valgrind_stack_id);
 }
 }
+#ifdef CONFIG_PRAGMA_DISABLE_UNUSED_BUT_SET
 #pragma GCC diagnostic error "-Wunused-but-set-variable"
 #pragma GCC diagnostic error "-Wunused-but-set-variable"
 #endif
 #endif
+#endif
 
 
 void qemu_coroutine_delete(Coroutine *co_)
 void qemu_coroutine_delete(Coroutine *co_)
 {
 {