From nobody Mon May 6 18:27:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1509111167089936.2179363311639; Fri, 27 Oct 2017 06:32:47 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1DD2C82111; Fri, 27 Oct 2017 13:32:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D36F5DD6A; Fri, 27 Oct 2017 13:32:44 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 377EC6EF21; Fri, 27 Oct 2017 13:32:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9RDVq2Y000924 for ; Fri, 27 Oct 2017 09:31:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id B49195CC3B; Fri, 27 Oct 2017 13:31:52 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-204-199.brq.redhat.com [10.40.204.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id DD61A60BEB; Fri, 27 Oct 2017 13:31:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1DD2C82111 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Fri, 27 Oct 2017 14:31:39 +0100 Message-Id: <20171027133143.2553-2-berrange@redhat.com> In-Reply-To: <20171027133143.2553-1-berrange@redhat.com> References: <20171027133143.2553-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH dbus 1/5] util: don't inline virtDBusUtilVirDomainListFreep X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 27 Oct 2017 13:32:45 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 When building GCC reports that it'll never inline this method, so don't mark it status+inline as that will cause multiple instances of it to be defined in each source file that includes util.h In file included from manager.c:4:0: manager.c: In function =E2=80=98virtDBusManagerEnumarateDomains=E2=80=99: util.h:62:1: error: inlining failed in call to =E2=80=98virtDBusUtilVirDoma= inListFreep.isra.0=E2=80=99: call is unlikely and code size would grow [-We= rror=3Dinline] virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ manager.c:17:61: note: called from here _cleanup_(virtDBusUtilVirDomainListFreep) virDomainPtr *domains =3D NU= LL; ^~~~~~~ Signed-off-by: Daniel P. Berrange Reviewed-by: Pavel Hrdina --- src/util.c | 14 ++++++++++++++ src/util.h | 15 ++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/util.c b/src/util.c index 8f0796a..2445ce0 100644 --- a/src/util.c +++ b/src/util.c @@ -94,3 +94,17 @@ virtDBusUtilVirDomainFromBusPath(virConnectPtr connectio= n, =20 return virDomainLookupByUUIDString(connection, name); } + +void +virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp) +{ + virDomainPtr *domains =3D *domainsp; + + if (!domains) + return; + + for (int i =3D 0; domains[i] !=3D NULL; i +=3D 1) + virDomainFree(domains[i]); + + free(domains); +} diff --git a/src/util.h b/src/util.h index 782c588..3c80fef 100644 --- a/src/util.h +++ b/src/util.h @@ -56,16 +56,5 @@ virtDBusUtilVirDomainFreep(virDomainPtr *domainp) virDomainFree(*domainp); } =20 -static inline void -virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp) -{ - virDomainPtr *domains =3D *domainsp; - - if (!domains) - return; - - for (int i =3D 0; domains[i] !=3D NULL; i +=3D 1) - virDomainFree(domains[i]); - - free(domains); -} +void +virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp); --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon May 6 18:27:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1509111176075461.5779188364222; Fri, 27 Oct 2017 06:32:56 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D4E1961D35; Fri, 27 Oct 2017 13:32:53 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B0C4E80DFC; Fri, 27 Oct 2017 13:32:53 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6D71F6EF25; Fri, 27 Oct 2017 13:32:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9RDVslh000932 for ; Fri, 27 Oct 2017 09:31:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id 43A9960C8A; Fri, 27 Oct 2017 13:31:54 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-204-199.brq.redhat.com [10.40.204.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2006960BEB; Fri, 27 Oct 2017 13:31:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D4E1961D35 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Fri, 27 Oct 2017 14:31:40 +0100 Message-Id: <20171027133143.2553-3-berrange@redhat.com> In-Reply-To: <20171027133143.2553-1-berrange@redhat.com> References: <20171027133143.2553-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH dbus 2/5] src: annotate parameters that are unused in functions X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Fri, 27 Oct 2017 13:32:54 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Introduce a VIR_ATTR_UNUSED macro to annotate parameters that are unused in functions. Signed-off-by: Daniel P. Berrange Reviewed-by: Pavel Hrdina --- src/domain.c | 78 +++++++++++++++++++++++++++++--------------------------= ---- src/events.c | 12 ++++----- src/main.c | 12 ++++----- src/manager.c | 4 +-- src/util.h | 2 ++ 5 files changed, 55 insertions(+), 53 deletions(-) diff --git a/src/domain.c b/src/domain.c index bbe27b9..5527778 100644 --- a/src/domain.c +++ b/src/domain.c @@ -2,13 +2,13 @@ #include "util.h" =20 static int -virtDBusDomainGetName(sd_bus *bus, +virtDBusDomainGetName(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -26,13 +26,13 @@ virtDBusDomainGetName(sd_bus *bus, } =20 static int -virtDBusDomainGetUUID(sd_bus *bus, +virtDBusDomainGetUUID(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -48,13 +48,13 @@ virtDBusDomainGetUUID(sd_bus *bus, } =20 static int -virtDBusDomainGetId(sd_bus *bus, +virtDBusDomainGetId(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -67,13 +67,13 @@ virtDBusDomainGetId(sd_bus *bus, } =20 static int -virtDBusDomainGetVcpus(sd_bus *bus, +virtDBusDomainGetVcpus(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -86,13 +86,13 @@ virtDBusDomainGetVcpus(sd_bus *bus, } =20 static int -virtDBusDomainGetOsType(sd_bus *bus, +virtDBusDomainGetOsType(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -110,13 +110,13 @@ virtDBusDomainGetOsType(sd_bus *bus, } =20 static int -virtDBusDomainGetActive(sd_bus *bus, +virtDBusDomainGetActive(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -134,13 +134,13 @@ virtDBusDomainGetActive(sd_bus *bus, } =20 static int -virtDBusDomainGetPersistent(sd_bus *bus, +virtDBusDomainGetPersistent(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -158,13 +158,13 @@ virtDBusDomainGetPersistent(sd_bus *bus, } =20 static int -virtDBusDomainGetState(sd_bus *bus, +virtDBusDomainGetState(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -209,13 +209,13 @@ virtDBusDomainGetState(sd_bus *bus, } =20 static int -virtDBusDomainGetAutostart(sd_bus *bus, +virtDBusDomainGetAutostart(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, - const char *property, + const char *interface VIR_ATTR_UNUSED, + const char *property VIR_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -502,12 +502,12 @@ static const sd_bus_vtable virt_domain_vtable[] =3D { }; =20 static int -virtDBusDomainLookup(sd_bus *bus, +virtDBusDomainLookup(sd_bus *bus VIR_ATTR_UNUSED, const char *path, - const char *interface, + const char *interface VIR_ATTR_UNUSED, void *userdata, void **found, - sd_bus_error *error) + sd_bus_error *error VIR_ATTR_UNUSED) { virtDBusManager *manager =3D userdata; _cleanup_(virtDBusUtilFreep) char *name =3D NULL; diff --git a/src/events.c b/src/events.c index f8fe839..731ef02 100644 --- a/src/events.c +++ b/src/events.c @@ -6,10 +6,10 @@ #include =20 static int -virtDBusEventsDomainLifecycle(virConnectPtr connection, +virtDBusEventsDomainLifecycle(virConnectPtr connection VIR_ATTR_UNUSED, virDomainPtr domain, int event, - int detail, + int detail VIR_ATTR_UNUSED, void *opaque) { virtDBusManager *manager =3D opaque; @@ -70,7 +70,7 @@ virtDBusEventsDomainLifecycle(virConnectPtr connection, } =20 static int -virtDBusEventsDomainDeviceAdded(virConnectPtr connection, +virtDBusEventsDomainDeviceAdded(virConnectPtr connection VIR_ATTR_UNUSED, virDomainPtr domain, const char *device, void *opaque) @@ -98,7 +98,7 @@ virtDBusEventsDomainDeviceAdded(virConnectPtr connection, } =20 static int -virtDBusEventsDomainDeviceRemoved(virConnectPtr connection, +virtDBusEventsDomainDeviceRemoved(virConnectPtr connection VIR_ATTR_UNUSED, virDomainPtr domain, const char *device, void *opaque) @@ -126,7 +126,7 @@ virtDBusEventsDomainDeviceRemoved(virConnectPtr connect= ion, } =20 static int -virtDBusEventsDomainDiskChange(virConnectPtr connection, +virtDBusEventsDomainDiskChange(virConnectPtr connection VIR_ATTR_UNUSED, virDomainPtr domain, const char *device, int reason, @@ -168,7 +168,7 @@ virtDBusEventsDomainDiskChange(virConnectPtr connection, } =20 static int -virtDBusEventsDomainTrayChange(virConnectPtr connection, +virtDBusEventsDomainTrayChange(virConnectPtr connection VIR_ATTR_UNUSED, virDomainPtr domain, const char *old_src_path, const char *new_src_path, diff --git a/src/main.c b/src/main.c index db5d4a5..a6a0212 100644 --- a/src/main.c +++ b/src/main.c @@ -55,18 +55,18 @@ virtDBusVirEventRemoveHandlep(int *watchp) } =20 static void -virtDBusHandleSignal(int watch, - int fd, - int events, - void *opaque) +virtDBusHandleSignal(int watch VIR_ATTR_UNUSED, + int fd VIR_ATTR_UNUSED, + int events VIR_ATTR_UNUSED, + void *opaque VIR_ATTR_UNUSED) { loop_status =3D -ECANCELED; } =20 static void virtDBusHandleBusEvent(int watch, - int fd, - int events, + int fd VIR_ATTR_UNUSED, + int events VIR_ATTR_UNUSED, void *opaque) { sd_bus *bus =3D opaque; diff --git a/src/manager.c b/src/manager.c index 77fb4bc..f289a7a 100644 --- a/src/manager.c +++ b/src/manager.c @@ -7,8 +7,8 @@ #include =20 static int -virtDBusManagerEnumarateDomains(sd_bus *bus, - const char *path, +virtDBusManagerEnumarateDomains(sd_bus *bus VIR_ATTR_UNUSED, + const char *path VIR_ATTR_UNUSED, void *userdata, char ***nodes, sd_bus_error *error) diff --git a/src/util.h b/src/util.h index 3c80fef..0c9f3d7 100644 --- a/src/util.h +++ b/src/util.h @@ -6,6 +6,8 @@ #include =20 #define _cleanup_(_x) __attribute__((__cleanup__(_x))) +#define VIR_ATTR_UNUSED __attribute__((__unused__)) + =20 int virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon May 6 18:27:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1509111180639456.0108124363793; Fri, 27 Oct 2017 06:33:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0A201213D; Fri, 27 Oct 2017 13:32:58 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BA8FB5C548; Fri, 27 Oct 2017 13:32:58 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 835191804488; Fri, 27 Oct 2017 13:32:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9RDVtFW000942 for ; Fri, 27 Oct 2017 09:31:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id A392A60BEB; Fri, 27 Oct 2017 13:31:55 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-204-199.brq.redhat.com [10.40.204.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id C1FC95FCB7; Fri, 27 Oct 2017 13:31:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E0A201213D Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Fri, 27 Oct 2017 14:31:41 +0100 Message-Id: <20171027133143.2553-4-berrange@redhat.com> In-Reply-To: <20171027133143.2553-1-berrange@redhat.com> References: <20171027133143.2553-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH dbus 3/5] build: turn on all practical compiler warning flags X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 27 Oct 2017 13:32:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel P. Berrange Reviewed-by: Pavel Hrdina --- .gitignore | 1 + Makefile.am | 2 + configure.ac | 3 + m4/manywarnings.m4 | 276 ++++++++++++++++++++++++++++++++++++++++= ++++ m4/virt-arg.m4 | 154 ++++++++++++++++++++++++ m4/virt-compile-warnings.m4 | 225 ++++++++++++++++++++++++++++++++++++ m4/warnings.m4 | 79 +++++++++++++ src/Makefile.am | 4 +- 8 files changed, 743 insertions(+), 1 deletion(-) create mode 100644 m4/manywarnings.m4 create mode 100644 m4/virt-arg.m4 create mode 100644 m4/virt-compile-warnings.m4 create mode 100644 m4/warnings.m4 diff --git a/.gitignore b/.gitignore index 727877b..95b2271 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ vgcore.* /configure /libvirt-dbus-*.tar.gz /libvirt-dbus.spec +/m4/aclocal\.m4 /stamp-h1 =20 /data/session/org.libvirt.service diff --git a/Makefile.am b/Makefile.am index 065334f..d2c3fc5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,8 @@ =20 SUBDIRS =3D data src test =20 +ACLOCAL_AMFLAGS =3D -I m4 + EXTRA_DIST =3D \ $(PACKAGE).spec \ $(PACKAGE).spec.in \ diff --git a/configure.ac b/configure.ac index 4c654fa..4c96fbe 100644 --- a/configure.ac +++ b/configure.ac @@ -3,6 +3,7 @@ AC_INIT([libvirt-dbus], [0.0.1], [libvir-list@redhat.com], = [], [http://libvirt.o AC_CONFIG_SRCDIR(src/main.c) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) dnl Make automake keep quiet about wildcards & other GNUmake-isms AM_INIT_AUTOMAKE([foreign -Wno-portability]) AC_CANONICAL_HOST @@ -35,6 +36,8 @@ AM_PROG_CC_C_O PKG_CHECK_MODULES(LIBVIRT, libvirt >=3D $LIBVIRT_REQUIRED) PKG_CHECK_MODULES(SYSTEMD, libsystemd >=3D $SYSTEMD_REQUIRED) =20 +LIBVIRT_COMPILE_WARNINGS + AC_ARG_WITH(dbus-services, [AC_HELP_STRING([--with-dbus-services=3D], [where D-BUS session services directory is])]) diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 new file mode 100644 index 0000000..0f06ade --- /dev/null +++ b/m4/manywarnings.m4 @@ -0,0 +1,276 @@ +# manywarnings.m4 serial 8 +dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) +# -------------------------------------------------- +# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. +# Elements separated by whitespace. In set logic terms, the function +# does OUTVAR =3D LISTVAR \ REMOVEVAR. +AC_DEFUN([gl_MANYWARN_COMPLEMENT], +[ + gl_warn_set=3D + set x $2; shift + for gl_warn_item + do + case " $3 " in + *" $gl_warn_item "*) + ;; + *) + gl_warn_set=3D"$gl_warn_set $gl_warn_item" + ;; + esac + done + $1=3D$gl_warn_set +]) + +# gl_MANYWARN_ALL_GCC(VARIABLE) +# ----------------------------- +# Add all documented GCC warning parameters to variable VARIABLE. +# Note that you need to test them using gl_WARN_ADD if you want to +# make sure your gcc understands it. +AC_DEFUN([gl_MANYWARN_ALL_GCC], +[ + dnl First, check for some issues that only occur when combining multiple + dnl gcc warning categories. + AC_REQUIRE([AC_PROG_CC]) + if test -n "$GCC"; then + + dnl Check if -W -Werror -Wno-missing-field-initializers is supported + dnl with the current $CC $CFLAGS $CPPFLAGS. + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) + AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ + gl_save_CFLAGS=3D"$CFLAGS" + CFLAGS=3D"$CFLAGS -W -Werror -Wno-missing-field-initializers" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_nomfi_supported=3Dyes], + [gl_cv_cc_nomfi_supported=3Dno]) + CFLAGS=3D"$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) + + if test "$gl_cv_cc_nomfi_supported" =3D yes; then + dnl Now check whether -Wno-missing-field-initializers is needed + dnl for the { 0, } construct. + AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) + AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ + gl_save_CFLAGS=3D"$CFLAGS" + CFLAGS=3D"$CFLAGS -W -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[int f (void) + { + typedef struct { int a; int b; } s_t; + s_t s1 =3D { 0, }; + return s1.b; + } + ]], + [[]])], + [gl_cv_cc_nomfi_needed=3Dno], + [gl_cv_cc_nomfi_needed=3Dyes]) + CFLAGS=3D"$gl_save_CFLAGS" + ]) + AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) + fi + + dnl Next, check if -Werror -Wuninitialized is useful with the + dnl user's choice of $CFLAGS; some versions of gcc warn that it + dnl has no effect if -O is not also used + AC_MSG_CHECKING([whether -Wuninitialized is supported]) + AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [ + gl_save_CFLAGS=3D"$CFLAGS" + CFLAGS=3D"$CFLAGS -Werror -Wuninitialized" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_uninitialized_supported=3Dyes], + [gl_cv_cc_uninitialized_supported=3Dno]) + CFLAGS=3D"$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported]) + + fi + + # List all gcc warning categories. + # To compare this list to your installed GCC's, run this Bash command: + # + # comm -3 \ + # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \ + # <(gcc --help=3Dwarnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | + # grep -v -x -f <( + # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec)) + + gl_manywarn_set=3D + for gl_manywarn_item in \ + -fno-common \ + -W \ + -Wabi \ + -Waddress \ + -Waggressive-loop-optimizations \ + -Wall \ + -Wattributes \ + -Wbad-function-cast \ + -Wbool-compare \ + -Wbuiltin-macro-redefined \ + -Wcast-align \ + -Wchar-subscripts \ + -Wchkp \ + -Wclobbered \ + -Wcomment \ + -Wcomments \ + -Wcoverage-mismatch \ + -Wcpp \ + -Wdate-time \ + -Wdeprecated \ + -Wdeprecated-declarations \ + -Wdesignated-init \ + -Wdisabled-optimization \ + -Wdiscarded-array-qualifiers \ + -Wdiscarded-qualifiers \ + -Wdiv-by-zero \ + -Wdouble-promotion \ + -Wduplicated-cond \ + -Wempty-body \ + -Wendif-labels \ + -Wenum-compare \ + -Wextra \ + -Wformat-contains-nul \ + -Wformat-extra-args \ + -Wformat-nonliteral \ + -Wformat-security \ + -Wformat-signedness \ + -Wformat-y2k \ + -Wformat-zero-length \ + -Wframe-address \ + -Wfree-nonheap-object \ + -Whsa \ + -Wignored-attributes \ + -Wignored-qualifiers \ + -Wimplicit \ + -Wimplicit-function-declaration \ + -Wimplicit-int \ + -Wincompatible-pointer-types \ + -Winit-self \ + -Winline \ + -Wint-conversion \ + -Wint-to-pointer-cast \ + -Winvalid-memory-model \ + -Winvalid-pch \ + -Wjump-misses-init \ + -Wlogical-not-parentheses \ + -Wlogical-op \ + -Wmain \ + -Wmaybe-uninitialized \ + -Wmemset-transposed-args \ + -Wmisleading-indentation \ + -Wmissing-braces \ + -Wmissing-declarations \ + -Wmissing-field-initializers \ + -Wmissing-include-dirs \ + -Wmissing-parameter-type \ + -Wmissing-prototypes \ + -Wmultichar \ + -Wnarrowing \ + -Wnested-externs \ + -Wnonnull \ + -Wnonnull-compare \ + -Wnull-dereference \ + -Wodr \ + -Wold-style-declaration \ + -Wold-style-definition \ + -Wopenmp-simd \ + -Woverflow \ + -Woverlength-strings \ + -Woverride-init \ + -Wpacked \ + -Wpacked-bitfield-compat \ + -Wparentheses \ + -Wpointer-arith \ + -Wpointer-sign \ + -Wpointer-to-int-cast \ + -Wpragmas \ + -Wreturn-local-addr \ + -Wreturn-type \ + -Wscalar-storage-order \ + -Wsequence-point \ + -Wshadow \ + -Wshift-count-negative \ + -Wshift-count-overflow \ + -Wshift-negative-value \ + -Wsizeof-array-argument \ + -Wsizeof-pointer-memaccess \ + -Wstack-protector \ + -Wstrict-aliasing \ + -Wstrict-overflow \ + -Wstrict-prototypes \ + -Wsuggest-attribute=3Dconst \ + -Wsuggest-attribute=3Dformat \ + -Wsuggest-attribute=3Dnoreturn \ + -Wsuggest-attribute=3Dpure \ + -Wsuggest-final-methods \ + -Wsuggest-final-types \ + -Wswitch \ + -Wswitch-bool \ + -Wswitch-default \ + -Wsync-nand \ + -Wsystem-headers \ + -Wtautological-compare \ + -Wtrampolines \ + -Wtrigraphs \ + -Wtype-limits \ + -Wuninitialized \ + -Wunknown-pragmas \ + -Wunsafe-loop-optimizations \ + -Wunused \ + -Wunused-but-set-parameter \ + -Wunused-but-set-variable \ + -Wunused-function \ + -Wunused-label \ + -Wunused-local-typedefs \ + -Wunused-macros \ + -Wunused-parameter \ + -Wunused-result \ + -Wunused-value \ + -Wunused-variable \ + -Wvarargs \ + -Wvariadic-macros \ + -Wvector-operation-performance \ + -Wvla \ + -Wvolatile-register-var \ + -Wwrite-strings \ + \ + ; do + gl_manywarn_set=3D"$gl_manywarn_set $gl_manywarn_item" + done + + # gcc --help=3Dwarnings outputs an unusual form for these options; list + # them here so that the above 'comm' command doesn't report a false matc= h. + gl_manywarn_set=3D"$gl_manywarn_set -Warray-bounds=3D2" + gl_manywarn_set=3D"$gl_manywarn_set -Wnormalized=3Dnfc" + gl_manywarn_set=3D"$gl_manywarn_set -Wshift-overflow=3D2" + gl_manywarn_set=3D"$gl_manywarn_set -Wunused-const-variable=3D2" + + # These are needed for older GCC versions. + if test -n "$GCC"; then + case `($CC --version) 2>/dev/null` in + 'gcc (GCC) '[[0-3]].* | \ + 'gcc (GCC) '4.[[0-7]].*) + gl_manywarn_set=3D"$gl_manywarn_set -fdiagnostics-show-option" + gl_manywarn_set=3D"$gl_manywarn_set -funit-at-a-time" + ;; + esac + fi + + # Disable specific options as needed. + if test "$gl_cv_cc_nomfi_needed" =3D yes; then + gl_manywarn_set=3D"$gl_manywarn_set -Wno-missing-field-initializers" + fi + + if test "$gl_cv_cc_uninitialized_supported" =3D no; then + gl_manywarn_set=3D"$gl_manywarn_set -Wno-uninitialized" + fi + + $1=3D$gl_manywarn_set +]) diff --git a/m4/virt-arg.m4 b/m4/virt-arg.m4 new file mode 100644 index 0000000..d626d72 --- /dev/null +++ b/m4/virt-arg.m4 @@ -0,0 +1,154 @@ +dnl +dnl virt-arg.m4: Helper macros for adding configure arguments +dnl +dnl Copyright (C) 2012-2014 Red Hat, Inc. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library. If not, see +dnl . +dnl + + +dnl +dnl To be used instead of AC_ARG_WITH +dnl +dnl See LIBVIRT_ARG_WITH_FEATURE if the argument you're adding is going to +dnl be used for switching a feature on and off. +dnl +dnl LIBVIRT_ARG_WITH([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION]) +dnl +dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase. +dnl HELP_DESC: Description that will appear in configure --help +dnl DEFAULT_ACTION: Default configure action +dnl +dnl LIBVIRT_ARG_WITH([PACKAGER], [Extra packager name], [no]) +dnl LIBVIRT_ARG_WITH([HTML_DIR], [path to base html directory], [$(datadir= )/doc]) +dnl +AC_DEFUN([LIBVIRT_ARG_WITH], [ + m4_pushdef([check_name], [$1]) + m4_pushdef([help_desc], [[$2]]) + m4_pushdef([default_action], [$3]) + + m4_pushdef([check_name_lc], m4_tolower(check_name)) + m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-])) + + m4_pushdef([arg_var], [with-]check_name_dash) + m4_pushdef([with_var], [with_]check_name_lc) + + m4_divert_text([DEFAULTS], [with_var][[=3D]][default_action]) + AC_ARG_WITH([check_name_lc], + [AS_HELP_STRING([[--]arg_var], + ]m4_dquote(help_desc)[[ @<:@default=3D]]m4_d= quote(default_action)[[@:>@])]) + + m4_popdef([with_var]) + m4_popdef([arg_var]) + + m4_popdef([check_name_dash]) + m4_popdef([check_name_lc]) + + m4_popdef([default_action]) + m4_popdef([help_desc]) + m4_popdef([check_name]) +]) + +dnl +dnl To be used instead of AC_ARG_WITH +dnl +dnl The difference between LIBVIRT_ARG_WITH and this macro is that the for= mer +dnl is mostly an enhanced drop-in replacement for AC_ARG_WITH, whereas the +dnl latter is tailored for adding an argument that is going to be used to +dnl switch a feature on and off: as a consequence, it optionally supports +dnl specifying the minimum version for libraries the feature depends on and +dnl automatically builds a suitable description from the feature name. +dnl +dnl LIBVIRT_ARG_WITH_FEATURE([CHECK_NAME], [HELP_NAME], [DEFAULT_ACTION], = [MIN_VERSION]) +dnl +dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase. +dnl HELP_NAME: Name that will appear in configure --help +dnl DEFAULT_ACTION: Default configure action +dnl MIN_VERSION: Specify minimal version that will be added to +dnl configure --help (optional) +dnl +dnl LIBVIRT_ARG_WITH_FEATURE([SELINUX], [SeLinux], [check]) +dnl LIBVIRT_ARG_WITH_FEATURE([GLUSTERFS], [glusterfs], [check], [3.4.1]) +dnl +AC_DEFUN([LIBVIRT_ARG_WITH_FEATURE], [ + m4_pushdef([check_name], [$1]) + m4_pushdef([help_name], [[$2]]) + m4_pushdef([default_action], [$3]) + m4_pushdef([min_version], [$4]) + + m4_pushdef([check_name_lc], m4_tolower(check_name)) + m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-])) + + m4_pushdef([arg_var], [with-]check_name_dash) + m4_pushdef([with_var], [with_]check_name_lc) + + m4_pushdef([version_text], m4_ifnblank(min_version, [[ (>=3D ]]min_versi= on[[)]])) + + m4_divert_text([DEFAULTS], [with_var][[=3D]][default_action]) + AC_ARG_WITH([check_name_lc], + [AS_HELP_STRING([[--]arg_var], + [with ]]m4_dquote(help_name)m4_dquote(versio= n_text)[[ support @<:@default=3D]]m4_dquote(default_action)[[@:>@])]) + + m4_popdef([version_text]) + + m4_popdef([with_var]) + m4_popdef([arg_var]) + + m4_popdef([check_name_dash]) + m4_popdef([check_name_lc]) + + m4_popdef([min_version]) + m4_popdef([default_action]) + m4_popdef([help_name]) + m4_popdef([check_name]) +]) + +dnl +dnl To be used instead of AC_ARG_ENABLE +dnl +dnl LIBVIRT_ARG_ENABLE([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION]) +dnl +dnl CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase. +dnl HELP_DESC: Description that will appear in configure --help +dnl DEFAULT_ACTION: Default configure action +dnl +dnl LIBVIRT_ARG_ENABLE([DEBUG], [enable debugging output], [yes]) +dnl +AC_DEFUN([LIBVIRT_ARG_ENABLE], [ + m4_pushdef([check_name], [$1]) + m4_pushdef([help_desc], [[$2]]) + m4_pushdef([default_action], [$3]) + + m4_pushdef([check_name_lc], m4_tolower(check_name)) + m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-])) + + m4_pushdef([arg_var], [enable-]check_name_dash) + m4_pushdef([enable_var], [enable_]check_name_lc) + + m4_divert_text([DEFAULTS], [enable_var][[=3D]][default_action]) + AC_ARG_ENABLE([check_name_lc], + [AS_HELP_STRING([[--]arg_var], + ]m4_dquote(help_desc)[[ @<:@default=3D]]m4= _dquote(default_action)[[@:>@])]) + + m4_popdef([enable_var]) + m4_popdef([arg_var]) + + m4_popdef([check_name_dash]) + m4_popdef([check_name_lc]) + + m4_popdef([default_action]) + m4_popdef([help_desc]) + m4_popdef([check_name]) +]) diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4 new file mode 100644 index 0000000..4d96a0e --- /dev/null +++ b/m4/virt-compile-warnings.m4 @@ -0,0 +1,225 @@ +dnl +dnl Enable all known GCC compiler warnings, except for those +dnl we can't yet cope with +dnl +AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[ + dnl ****************************** + dnl More compiler warnings + dnl ****************************** + + LIBVIRT_ARG_ENABLE([WERROR], [Use -Werror (if supported)], [check]) + if test "$enable_werror" =3D "check"; then + if test -d $srcdir/.git; then + is_git_version=3Dtrue + enable_werror=3Dyes + else + enable_werror=3Dno + fi + fi + + # List of warnings that are not relevant / wanted + + # Don't care about C++ compiler compat + dontwarn=3D"$dontwarn -Wc++-compat" + dontwarn=3D"$dontwarn -Wabi" + dontwarn=3D"$dontwarn -Wdeprecated" + # Don't care about ancient C standard compat + dontwarn=3D"$dontwarn -Wtraditional" + # Don't care about ancient C standard compat + dontwarn=3D"$dontwarn -Wtraditional-conversion" + # Ignore warnings in /usr/include + dontwarn=3D"$dontwarn -Wsystem-headers" + # Happy for compiler to add struct padding + dontwarn=3D"$dontwarn -Wpadded" + # GCC very confused with -O2 + dontwarn=3D"$dontwarn -Wunreachable-code" + # Too many to deal with + dontwarn=3D"$dontwarn -Wconversion" + # Too many to deal with + dontwarn=3D"$dontwarn -Wsign-conversion" + # GNULIB gettext.h violates + dontwarn=3D"$dontwarn -Wvla" + # Many GNULIB header violations + dontwarn=3D"$dontwarn -Wundef" + # Need to allow bad cast for execve() + dontwarn=3D"$dontwarn -Wcast-qual" + # We need to use long long in many places + dontwarn=3D"$dontwarn -Wlong-long" + # We allow manual list of all enum cases without default: + dontwarn=3D"$dontwarn -Wswitch-default" + # We allow optional default: instead of listing all enum values + dontwarn=3D"$dontwarn -Wswitch-enum" + # Not a problem since we don't use -fstrict-overflow + dontwarn=3D"$dontwarn -Wstrict-overflow" + # Not a problem since we don't use -funsafe-loop-optimizations + dontwarn=3D"$dontwarn -Wunsafe-loop-optimizations" + # Gnulib's stat-time.h violates this + dontwarn=3D"$dontwarn -Waggregate-return" + # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -W= all + dontwarn=3D"$dontwarn -Wenum-compare" + # gcc 5.1 -Wformat-signedness mishandles enums, not ready for prime ti= me + dontwarn=3D"$dontwarn -Wformat-signedness" + # Several conditionals expand the same on both branches + # depending on the particular platform/architecture + dontwarn=3D"$dontwarn -Wduplicated-branches" + # > This warning does not generally indicate that there is anything wr= ong + # > with your code; it merely indicates that GCC's optimizers are unab= le + # > to handle the code effectively. + # Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html + dontwarn=3D"$dontwarn -Wdisabled-optimization" + + # gcc 4.2 treats attribute(format) as an implicit attribute(nonnull), + # which triggers spurious warnings for our usage + AC_CACHE_CHECK([whether the C compiler's -Wformat allows NULL strings], + [lv_cv_gcc_wformat_null_works], [ + save_CFLAGS=3D$CFLAGS + CFLAGS=3D'-Wunknown-pragmas -Werror -Wformat' + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + static __attribute__ ((__format__ (__printf__, 1, 2))) int + foo (const char *fmt, ...) { return !fmt; } + ]], [[ + return foo(NULL); + ]])], + [lv_cv_gcc_wformat_null_works=3Dyes], + [lv_cv_gcc_wformat_null_works=3Dno]) + CFLAGS=3D$save_CFLAGS]) + + AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op], + [lv_cv_gcc_wlogical_op_equal_expr_broken], [ + save_CFLAGS=3D"$CFLAGS" + CFLAGS=3D"-O2 -Wlogical-op -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #define TEST1 1 + #define TEST2 TEST1 + ]], [[ + int test =3D 0; + return test =3D=3D TEST1 || test =3D=3D TEST2;]])], + [lv_cv_gcc_wlogical_op_equal_expr_broken=3Dno], + [lv_cv_gcc_wlogical_op_equal_expr_broken=3Dyes]) + CFLAGS=3D"$save_CFLAGS"]) + + AC_CACHE_CHECK([whether clang gives bogus warnings for -Wdouble-promot= ion], + [lv_cv_clang_double_promotion_broken], [ + save_CFLAGS=3D"$CFLAGS" + CFLAGS=3D"-O2 -Wdouble-promotion -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + float f =3D 0.0; + return isnan(f);]])], + [lv_cv_clang_double_promotion_broken=3Dno], + [lv_cv_clang_double_promotion_broken=3Dyes]) + CFLAGS=3D"$save_CFLAGS"]) + + if test "$lv_cv_clang_double_promotion_broken" =3D "yes"; + then + dontwarn=3D"$dontwarn -Wdouble-promotion" + fi + + # Get all possible GCC warnings + gl_MANYWARN_ALL_GCC([maybewarn]) + + # Remove the ones we don't want, blacklisted earlier + gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn]) + + # GNULIB uses '-W' (aka -Wextra) which includes a bunch of stuff. + # Unfortunately, this means you can't simply use '-Wsign-compare' + # with gl_MANYWARN_COMPLEMENT + # So we have -W enabled, and then have to explicitly turn off... + wantwarn=3D"$wantwarn -Wno-sign-compare" + + # GNULIB expects this to be part of -Wc++-compat, but we turn + # that one off, so we need to manually enable this again + wantwarn=3D"$wantwarn -Wjump-misses-init" + + # GNULIB turns on -Wformat=3D2 which implies -Wformat-nonliteral, + # so we need to manually re-exclude it. Also, older gcc 4.2 + # added an implied ATTRIBUTE_NONNULL on any parameter marked + # ATTRIBUTE_FMT_PRINT, which causes -Wformat failure on our + # intentional use of virReportError(code, NULL). + wantwarn=3D"$wantwarn -Wno-format-nonliteral" + if test $lv_cv_gcc_wformat_null_works =3D no; then + wantwarn=3D"$wantwarn -Wno-format" + fi + + # -Wformat enables this by default, and we should keep it, + # but need to rewrite various areas of code first + wantwarn=3D"$wantwarn -Wno-format-truncation" + + # This should be < 256 really. Currently we're down to 4096, + # but using 1024 bytes sized buffers (mostly for virStrerror) + # stops us from going down further + gl_WARN_ADD([-Wframe-larger-than=3D4096], [STRICT_FRAME_LIMIT_CFLAGS]) + gl_WARN_ADD([-Wframe-larger-than=3D25600], [RELAXED_FRAME_LIMIT_CFLAGS= ]) + + # Extra special flags + dnl -fstack-protector stuff passes gl_WARN_ADD with gcc + dnl on Mingw32, but fails when actually used + case $host in + aarch64-*-*) + dnl "error: -fstack-protector not supported for this target [-Werro= r]" + ;; + *-*-linux*) + dnl Prefer -fstack-protector-strong if it's available. + dnl There doesn't seem to be great overhead in adding + dnl -fstack-protector-all instead of -fstack-protector. + dnl + dnl We also don't need ssp-buffer-size with -all or -strong, + dnl since functions are protected regardless of buffer size. + dnl wantwarn=3D"$wantwarn --param=3Dssp-buffer-size=3D4" + wantwarn=3D"$wantwarn -fstack-protector-strong" + ;; + *-*-freebsd*) + dnl FreeBSD ships old gcc 4.2.1 which doesn't handle + dnl -fstack-protector-all well + wantwarn=3D"$wantwarn -fstack-protector" + + wantwarn=3D"$wantwarn -Wno-unused-command-line-argument" + ;; + esac + wantwarn=3D"$wantwarn -fexceptions" + wantwarn=3D"$wantwarn -fasynchronous-unwind-tables" + + # Need -fipa-pure-const in order to make -Wsuggest-attribute=3Dpure + # fire even without -O. + wantwarn=3D"$wantwarn -fipa-pure-const" + + if test "$enable_werror" =3D "yes" + then + wantwarn=3D"$wantwarn -Werror" + fi + + # Check for $CC support of each warning + for w in $wantwarn; do + gl_WARN_ADD([$w]) + done + + case $host in + *-*-linux*) + dnl Fall back to -fstack-protector-all if -strong is not available + case $WARN_CFLAGS in + *-fstack-protector-strong*) + ;; + *) + gl_WARN_ADD([-fstack-protector-all]) + ;; + esac + ;; + esac + + case $WARN_CFLAGS in + *-Wsuggest-attribute=3Dformat*) + AC_DEFINE([HAVE_SUGGEST_ATTRIBUTE_FORMAT], [1], [Whether -Wsugg= est-attribute=3Dformat works]) + ;; + esac + + # Silence certain warnings in gnulib, and use improved glibc headers + AH_VERBATIM([FORTIFY_SOURCE], + [/* Enable compile-time and run-time bounds-checking, and some warning= s, + without upsetting newer glibc. */ + #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ + # define _FORTIFY_SOURCE 2 + #endif + ]) +]) diff --git a/m4/warnings.m4 b/m4/warnings.m4 new file mode 100644 index 0000000..e697174 --- /dev/null +++ b/m4/warnings.m4 @@ -0,0 +1,79 @@ +# warnings.m4 serial 11 +dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# gl_AS_VAR_APPEND(VAR, VALUE) +# ---------------------------- +# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. +m4_ifdef([AS_VAR_APPEND], +[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], +[m4_define([gl_AS_VAR_APPEND], +[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) + + +# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], +# [PROGRAM =3D AC_LANG_PROGRAM()]) +# ----------------------------------------------------------------- +# Check if the compiler supports OPTION when compiling PROGRAM. +# +# FIXME: gl_Warn must be used unquoted until we can assume Autoconf +# 2.64 or newer. +AC_DEFUN([gl_COMPILER_OPTION_IF], +[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl +AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl +AS_LITERAL_IF([$1], + [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], + [gl_positive=3D"$1" +case $gl_positive in + -Wno-*) gl_positive=3D-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; +esac +m4_pushdef([gl_Positive], [$gl_positive])])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]),= [ + gl_save_compiler_FLAGS=3D"$gl_Flags" + gl_AS_VAR_APPEND(m4_defn([gl_Flags]), + [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) + AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], + [AS_VAR_SET(gl_Warn, [yes])], + [AS_VAR_SET(gl_Warn, [no])]) + gl_Flags=3D"$gl_save_compiler_FLAGS" +]) +AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) +m4_popdef([gl_Positive])dnl +AS_VAR_POPDEF([gl_Flags])dnl +AS_VAR_POPDEF([gl_Warn])dnl +]) + +# gl_UNKNOWN_WARNINGS_ARE_ERRORS +# ------------------------------ +# Clang doesn't complain about unknown warning options unless one also +# specifies -Wunknown-warning-option -Werror. Detect this. +AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], +[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], + [gl_unknown_warnings_are_errors=3D'-Wunknown-warning-option -Werror'], + [gl_unknown_warnings_are_errors=3D])]) + +# gl_WARN_ADD(OPTION, [VARIABLE =3D WARN_CFLAGS], +# [PROGRAM =3D AC_LANG_PROGRAM()]) +# --------------------------------------------- +# Adds parameter to WARN_CFLAGS if the compiler supports it when +# compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). +# +# If VARIABLE is a variable name, AC_SUBST it. +AC_DEFUN([gl_WARN_ADD], +[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) +gl_COMPILER_OPTION_IF([$1], + [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])], + [], + [$3]) +m4_ifval([$2], + [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], + [AC_SUBST([WARN_CFLAGS])])dnl +]) + +# Local Variables: +# mode: autoconf +# End: diff --git a/src/Makefile.am b/src/Makefile.am index 917c46d..17b4fe1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,7 +18,9 @@ libvirt_dbus_SOURCES =3D $(DAEMON_SOURCES) =20 libvirt_dbus_CFLAGS =3D \ $(SYSTEMD_CFLAGS) \ - $(LIBVIRT_CFLAGS) + $(LIBVIRT_CFLAGS) \ + $(WARN_CFLAGS) \ + $(NULL) =20 libvirt_dbus_LDFLAGS =3D \ $(SYSTEMD_LDFLAGS) \ --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon May 6 18:27:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1509111228734717.3973902131744; Fri, 27 Oct 2017 06:33:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3295B7E382; Fri, 27 Oct 2017 13:33:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 080BF80E16; Fri, 27 Oct 2017 13:33:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C2E661804485; Fri, 27 Oct 2017 13:33:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9RDVvgV000949 for ; Fri, 27 Oct 2017 09:31:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0BD2C60BEB; Fri, 27 Oct 2017 13:31:57 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-204-199.brq.redhat.com [10.40.204.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1FB1160C8A; Fri, 27 Oct 2017 13:31:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3295B7E382 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Fri, 27 Oct 2017 14:31:42 +0100 Message-Id: <20171027133143.2553-5-berrange@redhat.com> In-Reply-To: <20171027133143.2553-1-berrange@redhat.com> References: <20171027133143.2553-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH dbus 4/5] Enable full RELRO mode X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 27 Oct 2017 13:33:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" By passing the flags -z relro -z now to the linker, we can force it to resolve all library symbols at startup, instead of on-demand. This allows it to then make the global offset table (GOT) read-only, which makes some security attacks harder. Signed-off-by: Daniel P. Berrange Reviewed-by: Pavel Hrdina --- configure.ac | 1 + m4/virt-linker-relro.m4 | 35 +++++++++++++++++++++++++++++++++++ src/Makefile.am | 4 +++- 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 m4/virt-linker-relro.m4 diff --git a/configure.ac b/configure.ac index 4c96fbe..b9ccf93 100644 --- a/configure.ac +++ b/configure.ac @@ -37,6 +37,7 @@ PKG_CHECK_MODULES(LIBVIRT, libvirt >=3D $LIBVIRT_REQUIRED) PKG_CHECK_MODULES(SYSTEMD, libsystemd >=3D $SYSTEMD_REQUIRED) =20 LIBVIRT_COMPILE_WARNINGS +LIBVIRT_LINKER_RELRO =20 AC_ARG_WITH(dbus-services, [AC_HELP_STRING([--with-dbus-services=3D], diff --git a/m4/virt-linker-relro.m4 b/m4/virt-linker-relro.m4 new file mode 100644 index 0000000..7669b23 --- /dev/null +++ b/m4/virt-linker-relro.m4 @@ -0,0 +1,35 @@ +dnl +dnl Check for -z now and -z relro linker flags +dnl +dnl Copyright (C) 2013 Red Hat, Inc. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library. If not, see +dnl . +dnl + +AC_DEFUN([LIBVIRT_LINKER_RELRO],[ + AC_MSG_CHECKING([for how to force completely read-only GOT table]) + + RELRO_LDFLAGS=3D + ld_help=3D`ld --help 2>&1` + case $ld_help in + *"-z relro"*) RELRO_LDFLAGS=3D"-Wl,-z -Wl,relro" ;; + esac + case $ld_help in + *"-z now"*) RELRO_LDFLAGS=3D"$RELRO_LDFLAGS -Wl,-z -Wl,now" ;; + esac + AC_SUBST([RELRO_LDFLAGS]) + + AC_MSG_RESULT([$RELRO_LDFLAGS]) +]) diff --git a/src/Makefile.am b/src/Makefile.am index 17b4fe1..8dd8ecd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,7 +24,9 @@ libvirt_dbus_CFLAGS =3D \ =20 libvirt_dbus_LDFLAGS =3D \ $(SYSTEMD_LDFLAGS) \ - $(LIBVIRT_LDFLAGS) + $(LIBVIRT_LDFLAGS) \ + $(RELRO_LDFLAGS) \ + $(NULL) =20 libvirt_dbus_LDADD =3D \ $(SYSTEMD_LIBS) \ --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon May 6 18:27:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1509111178508380.1470798651293; Fri, 27 Oct 2017 06:32:58 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C06A4C050047; Fri, 27 Oct 2017 13:32:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A1A7A7BAE4; Fri, 27 Oct 2017 13:32:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 63D8F1804486; Fri, 27 Oct 2017 13:32:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9RDVwAG000959 for ; Fri, 27 Oct 2017 09:31:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7271C60C8A; Fri, 27 Oct 2017 13:31:58 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-204-199.brq.redhat.com [10.40.204.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6102F60BEB; Fri, 27 Oct 2017 13:31:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C06A4C050047 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Fri, 27 Oct 2017 14:31:43 +0100 Message-Id: <20171027133143.2553-6-berrange@redhat.com> In-Reply-To: <20171027133143.2553-1-berrange@redhat.com> References: <20171027133143.2553-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH dbus 5/5] Build all binaries with PIE X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 27 Oct 2017 13:32:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" PIE (position independent executable) adds security to executables by composing them entirely of position-independent code (PIC. The .so libraries already build with -fPIC. This adds -fPIE which is the equivalent to -fPIC, but for executables. This for allows Exec Shield to use address space layout randomization to prevent attackers from knowing where existing executable code is during a security attack using exploits that rely on knowing the offset of the executable code in the binary, such as return-to-libc attacks. Signed-off-by: Daniel P. Berrange Reviewed-by: Pavel Hrdina --- configure.ac | 1 + m4/virt-compile-pie.m4 | 35 +++++++++++++++++++++++++++++++++++ src/Makefile.am | 2 ++ 3 files changed, 38 insertions(+) create mode 100644 m4/virt-compile-pie.m4 diff --git a/configure.ac b/configure.ac index b9ccf93..228ea11 100644 --- a/configure.ac +++ b/configure.ac @@ -38,6 +38,7 @@ PKG_CHECK_MODULES(SYSTEMD, libsystemd >=3D $SYSTEMD_REQUI= RED) =20 LIBVIRT_COMPILE_WARNINGS LIBVIRT_LINKER_RELRO +LIBVIRT_COMPILE_PIE =20 AC_ARG_WITH(dbus-services, [AC_HELP_STRING([--with-dbus-services=3D], diff --git a/m4/virt-compile-pie.m4 b/m4/virt-compile-pie.m4 new file mode 100644 index 0000000..a2df38e --- /dev/null +++ b/m4/virt-compile-pie.m4 @@ -0,0 +1,35 @@ +dnl +dnl Check for support for position independent executables +dnl +dnl Copyright (C) 2013 Red Hat, Inc. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library. If not, see +dnl . +dnl + +AC_DEFUN([LIBVIRT_COMPILE_PIE],[ + PIE_CFLAGS=3D + PIE_LDFLAGS=3D + case "$host" in + *-*-mingw* | *-*-msvc* | *-*-cygwin* ) + ;; dnl All code is position independent on Win32 target + *) + gl_COMPILER_OPTION_IF([-fPIE -DPIE -pie], [ + PIE_CFLAGS=3D"-fPIE -DPIE" + PIE_LDFLAGS=3D"-pie" + ]) + esac + AC_SUBST([PIE_CFLAGS]) + AC_SUBST([PIE_LDFLAGS]) +]) diff --git a/src/Makefile.am b/src/Makefile.am index 8dd8ecd..5d4cb04 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -20,12 +20,14 @@ libvirt_dbus_CFLAGS =3D \ $(SYSTEMD_CFLAGS) \ $(LIBVIRT_CFLAGS) \ $(WARN_CFLAGS) \ + $(PIE_CFLAGS) \ $(NULL) =20 libvirt_dbus_LDFLAGS =3D \ $(SYSTEMD_LDFLAGS) \ $(LIBVIRT_LDFLAGS) \ $(RELRO_LDFLAGS) \ + $(PID_LDFLAGS) \ $(NULL) =20 libvirt_dbus_LDADD =3D \ --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list