From bb2dc4b73a30613216c048fe2a6551e011d1c963 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 30 Sep 2022 09:53:02 +0200 Subject: [PATCH] meson: -display dbus and CFI are incompatible The generated skeletons for DBus call the finalize method of the parent type using code like G_OBJECT_CLASS (qemu_dbus_display1_chardev_skeleton_parent_class)->finalize (object); However, the finalize method is defined in a shared library that is not compiled with CFI. Do not enable anything that uses gdbus-codegen if --enable-cfi was specified. Signed-off-by: Paolo Bonzini --- meson.build | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 3885fc1076..ca47ecbffe 100644 --- a/meson.build +++ b/meson.build @@ -487,6 +487,7 @@ meson.override_dependency('glib-2.0', glib) gio = not_found gdbus_codegen = not_found +gdbus_codegen_error = '@0@ requires gdbus-codegen, please install libgio' if not get_option('gio').auto() or have_system gio = dependency('gio-2.0', required: get_option('gio'), method: 'pkg-config', kwargs: static_kwargs) @@ -511,6 +512,10 @@ if not get_option('gio').auto() or have_system version: gio.version()) endif endif +if gdbus_codegen.found() and get_option('cfi') + gdbus_codegen = not_found + gdbus_codegen_error = '@0@ uses gdbus-codegen, which does not support control flow integrity' +endif lttng = not_found if 'ust' in get_option('trace_backends') @@ -1676,7 +1681,7 @@ dbus_display = get_option('dbus_display') \ .require(enable_modules, error_message: '-display dbus requires --enable-modules') \ .require(gdbus_codegen.found(), - error_message: '-display dbus requires gdbus-codegen') \ + error_message: gdbus_codegen_error.format('-display dbus')) \ .require(opengl.found() and gbm.found(), error_message: '-display dbus requires epoxy/egl and gbm') \ .allowed()