From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [PATCH 14/24] build: move stack protector flag selection to meson
Date: Thu, 11 May 2023 11:50:11 +0200 [thread overview]
Message-ID: <20230511095021.1397802-15-pbonzini@redhat.com> (raw)
In-Reply-To: <20230511095021.1397802-1-pbonzini@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 44 ++---------------------------------
meson.build | 28 +++++++++++++++++++++-
meson_options.txt | 2 ++
scripts/meson-buildoptions.sh | 3 +++
4 files changed, 34 insertions(+), 43 deletions(-)
diff --git a/configure b/configure
index c264bf4cadee..ca9238e31d46 100755
--- a/configure
+++ b/configure
@@ -180,7 +180,7 @@ compile_prog() {
local_cflags="$1"
local_ldflags="$2"
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
- $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
+ $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $local_ldflags
}
# symbolically link $1 to $2. Portable version of "ln -sf".
@@ -226,7 +226,6 @@ static="no"
cross_compile="no"
cross_prefix=""
host_cc="cc"
-stack_protector=""
use_containers="yes"
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
gdb_arches=""
@@ -395,8 +394,6 @@ sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
-QEMU_LDFLAGS=
-
# Flags that are needed during configure but later taken care of by Meson
CONFIGURE_CFLAGS="-std=gnu11 -Wall"
CONFIGURE_LDFLAGS=
@@ -824,10 +821,6 @@ for opt do
;;
--disable-werror) werror="no"
;;
- --enable-stack-protector) stack_protector="yes"
- ;;
- --disable-stack-protector) stack_protector="no"
- ;;
--enable-cfi)
cfi="true";
meson_option_add -Db_lto=true
@@ -998,7 +991,6 @@ Advanced options (experts only):
--with-devices-ARCH=NAME override default configs/devices
--enable-debug enable common debug build options
--disable-werror disable compilation abort on warning
- --disable-stack-protector disable compiler-provided stack protection
--cpu=CPU Build for host CPU [$cpu]
--enable-plugins
enable plugins via shared library loading
@@ -1257,7 +1249,7 @@ EOF
optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
do_objc -Werror $optflag \
$OBJCFLAGS $EXTRA_OBJCFLAGS $CONFIGURE_OBJCFLAGS $QEMU_OBJCFLAGS \
- -o $TMPE $TMPM $QEMU_LDFLAGS
+ -o $TMPE $TMPM
}
for flag in $gcc_flags; do
@@ -1269,37 +1261,6 @@ for flag in $gcc_flags; do
fi
done
-if test "$stack_protector" != "no"; then
- cat > $TMPC << EOF
-int main(int argc, char *argv[])
-{
- char arr[64], *p = arr, *c = argv[argc - 1];
- while (*c) {
- *p++ = *c++;
- }
- return 0;
-}
-EOF
- gcc_flags="-fstack-protector-strong -fstack-protector-all"
- sp_on=0
- for flag in $gcc_flags; do
- # We need to check both a compile and a link, since some compiler
- # setups fail only on a .c->.o compile and some only at link time
- if compile_object "-Werror $flag" &&
- compile_prog "-Werror $flag" ""; then
- QEMU_CFLAGS="$QEMU_CFLAGS $flag"
- QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
- sp_on=1
- break
- fi
- done
- if test "$stack_protector" = yes; then
- if test $sp_on = 0; then
- error_exit "Stack protector not supported"
- fi
- fi
-fi
-
if test "$static" = "yes" ; then
if test "$plugins" = "yes"; then
error_exit "static and plugins are mutually incompatible"
@@ -2057,7 +2018,6 @@ echo "PKG_CONFIG=${pkg_config}" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
-echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
# use included Linux headers
diff --git a/meson.build b/meson.build
index 2d34ff8a61ec..4a98d7a929af 100644
--- a/meson.build
+++ b/meson.build
@@ -200,7 +200,7 @@ foreach arg : config_host['QEMU_CFLAGS'].split()
endif
endforeach
qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
-qemu_ldflags = config_host['QEMU_LDFLAGS'].split()
+qemu_ldflags = []
if get_option('gprof')
qemu_common_flags += ['-p']
@@ -211,6 +211,32 @@ if get_option('prefer_static')
qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
endif
+if not get_option('stack_protector').disabled()
+ stack_protector_probe = '''
+ int main(int argc, char *argv[])
+ {
+ char arr[64], *p = arr, *c = argv[argc - 1];
+ while (*c) {
+ *p++ = *c++;
+ }
+ return 0;
+ }'''
+ have_stack_protector = false
+ foreach arg : ['-fstack-protector-strong', '-fstack-protector-all']
+ # We need to check both a compile and a link, since some compiler
+ # setups fail only on a .c->.o compile and some only at link time
+ if cc.compiles(stack_protector_probe, args: ['-Werror', arg]) and \
+ cc.links(stack_protector_probe, args: ['-Werror', arg])
+ have_stack_protector = true
+ qemu_cflags += arg
+ qemu_ldflags += arg
+ break
+ endif
+ endforeach
+ get_option('stack_protector') \
+ .require(have_stack_protector, error_message: 'Stack protector not supported')
+endif
+
coroutine_backend = get_option('coroutine_backend')
ucontext_probe = '''
#include <ucontext.h>
diff --git a/meson_options.txt b/meson_options.txt
index 9ddd500f8998..2323d1ca272d 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -91,6 +91,8 @@ option('sanitizers', type: 'boolean', value: false,
description: 'enable default sanitizers')
option('tsan', type: 'boolean', value: false,
description: 'enable thread sanitizer')
+option('stack_protector', type: 'feature', value: 'auto',
+ description: 'compiler-provided stack protection')
option('cfi', type: 'boolean', value: false,
description: 'Control-Flow Integrity (CFI)')
option('cfi_debug', type: 'boolean', value: false,
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 1d14390d972c..dd1c83f6f1b9 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -163,6 +163,7 @@ meson_options_help() {
printf "%s\n" ' sparse sparse checker'
printf "%s\n" ' spice Spice server support'
printf "%s\n" ' spice-protocol Spice protocol support'
+ printf "%s\n" ' stack-protector compiler-provided stack protection'
printf "%s\n" ' tcg TCG support'
printf "%s\n" ' tools build support utilities that come with QEMU'
printf "%s\n" ' tpm TPM support'
@@ -434,6 +435,8 @@ _meson_option_parse() {
--disable-spice) printf "%s" -Dspice=disabled ;;
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
+ --enable-stack-protector) printf "%s" -Dstack_protector=enabled ;;
+ --disable-stack-protector) printf "%s" -Dstack_protector=disabled ;;
--enable-strip) printf "%s" -Dstrip=true ;;
--disable-strip) printf "%s" -Dstrip=false ;;
--sysconfdir=*) quote_sh "-Dsysconfdir=$2" ;;
--
2.40.1
next prev parent reply other threads:[~2023-05-11 9:53 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-11 9:49 [PATCH 00/24] Meson changes for QEMU 8.1 Paolo Bonzini
2023-05-11 9:49 ` [PATCH 01/24] meson: regenerate meson-buildoptions.sh Paolo Bonzini
2023-05-11 9:49 ` [PATCH 02/24] meson: require 0.63.0 Paolo Bonzini
2023-05-11 9:50 ` [PATCH 03/24] meson: use prefer_static option Paolo Bonzini
2023-05-11 9:50 ` [PATCH 04/24] meson: remove static_kwargs Paolo Bonzini
2023-05-11 9:50 ` [PATCH 05/24] meson: add more version numbers to the summary Paolo Bonzini
2023-05-11 9:50 ` [PATCH 06/24] meson: drop unnecessary declare_dependency() Paolo Bonzini
2023-05-11 9:50 ` [PATCH 07/24] build: move glib detection and workarounds to meson Paolo Bonzini
2023-05-11 9:50 ` [PATCH 08/24] configure: remove pkg-config functions Paolo Bonzini
2023-05-11 9:50 ` [PATCH 09/24] configure, meson: move --enable-modules to Meson Paolo Bonzini
2023-05-11 9:50 ` [PATCH 10/24] meson: prepare move of QEMU_CFLAGS to meson Paolo Bonzini
2023-05-11 9:50 ` [PATCH 11/24] build: move sanitizer tests " Paolo Bonzini
2023-05-11 9:50 ` [PATCH 12/24] build: move SafeStack " Paolo Bonzini
2023-05-11 9:50 ` [PATCH 13/24] build: move coroutine backend selection " Paolo Bonzini
2023-05-11 9:50 ` Paolo Bonzini [this message]
2023-05-11 9:50 ` [PATCH 15/24] build: move warning flag " Paolo Bonzini
2023-05-11 9:50 ` [PATCH 16/24] build: move remaining compiler flag tests " Paolo Bonzini
2023-05-11 9:50 ` [PATCH 17/24] build: move compiler version check " Paolo Bonzini
2023-05-11 9:50 ` [PATCH 18/24] build: move --disable-debug-info " Paolo Bonzini
2023-07-26 6:45 ` Michael Tokarev
2023-05-11 9:50 ` [PATCH 19/24] configure: remove compiler sanity check Paolo Bonzini
2024-01-18 19:23 ` Thomas Huth
2023-05-11 9:50 ` [PATCH 20/24] configure: do not rerun the tests with -Werror Paolo Bonzini
2023-05-11 9:50 ` [PATCH 21/24] configure: remove unnecessary mkdir Paolo Bonzini
2023-05-11 9:50 ` [PATCH 22/24] configure: reorder option parsing code Paolo Bonzini
2023-05-11 9:50 ` [PATCH 23/24] configure: remove unnecessary check Paolo Bonzini
2023-05-11 9:50 ` [PATCH 24/24] docs/devel: update build system docs Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230511095021.1397802-15-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).