qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH for-2.0] configure: add option to disable -fstac


From: Noonan, Steven
Subject: Re: [Qemu-devel] [PATCH for-2.0] configure: add option to disable -fstack-protector flags
Date: Tue, 8 Apr 2014 13:47:16 -0700
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Apr 08, 2014 at 09:37:27PM +0100, Peter Maydell wrote:
> On 28 March 2014 16:19, Paolo Bonzini <address@hidden> wrote:
> > This patch introduces a configure option to disable the stack protector
> > entirely, and conditional stack protector flag selection (in order,
> > based on availability): -fstack-protector-strong, -fstack-protector-all,
> > no stack protector.
> 
> I've just noticed that this test doesn't correctly handle MacOSX clang.
> For some reason that has this behaviour:
> 
> manooth$ clang -o /tmp/zz9 -Werror -fstack-protector /tmp/zz9.c
> # OK, plain -fstack-protector works
> manooth$ clang -o /tmp/zz9 -Werror -fstack-protector-strong  /tmp/zz9.c
> clang: error: argument unused during compilation: '-fstack-protector-strong'
> # The strong variant isn't implemented
> manooth$ clang -o /tmp/zz9 -Werror -fstack-protector-strong
> /tmp/zz9.c -framework CoreFoundation
> # ...but for some reason adding the -framework CoreFoundation argument
> # suppresses the error!

Oh good grief. This is no doubt Apple's Xcode-provided Clang with all
their Apple patches applied. Stock Clang would break if you added
-framework, I believe.

> This is bad because we have that framework argument as part of our
> linker flags. Effectively this means that clang won't warn about the
> argument at link time but will warn for every .c->.o compile (as well
> as ending up with no stack protection).

So -framework is designed to transparently add the appropriate -I and
-L/-l flags, pointing to the insides of a .framework bundle.

To me, the -framework arguments belong in CFLAGS and LIBS, but not
LDFLAGS. In the context of QEMU's configure script, I think it'd be
QEMU_INCLUDES and LIBS.

> Changing the test from doing a compile-and-link to just
> compiling a single object seems to fix this:
> 
> manooth$ git diff
> diff --git a/configure b/configure
> index eb0e7bb..c85475f 100755
> --- a/configure
> +++ b/configure
> @@ -1448,7 +1448,7 @@ done
>  if test "$stack_protector" != "no" ; then
>    gcc_flags="-fstack-protector-strong -fstack-protector-all"
>    for flag in $gcc_flags; do
> -    if compile_prog "-Werror $flag" "" ; then
> +    if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC ; then
>        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
>        LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
>        break
> 
> However perhaps the correct fix is to make MacOSX put
> the -framework options in CFLAGS, not LDFLAGS -- they
> seem (from what I can gather from google, which is not much)
> to be a sort of combination of include files and libraries so should
> probably be consistently specified everywhere.
> 
> thanks
> -- PMM



reply via email to

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