From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH] fix compat mode type checking macros for gcc 4.5 Date: Mon, 08 Mar 2010 15:58:59 +0000 Message-ID: <4B952CD30200007800033442@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part7B51A8D3.0__=" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part7B51A8D3.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Just like with the __RING_SIZE() macro, the compat mode type checking macros also need changing in order to work with gcc 4.5. Signed-off-by: Jan Beulich --- 2010-03-02.orig/xen/common/compat/memory.c 2009-07-06 15:07:20.0000000= 00 +0200 +++ 2010-03-02/xen/common/compat/memory.c 2010-03-05 13:42:15.0000000= 00 +0100 @@ -7,6 +7,12 @@ #include #include =20 +#define xen_domid_t domid_t +#define compat_domid_t domid_compat_t +CHECK_TYPE(domid); +#undef compat_domid_t +#undef xen_domid_t + int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE(void) compat) { int rc, split, op =3D cmd & MEMOP_CMD_MASK; @@ -169,13 +175,6 @@ int compat_memory_op(unsigned int cmd, X case XENMEM_current_reservation: case XENMEM_maximum_reservation: case XENMEM_maximum_gpfn: - { -#define xen_domid_t domid_t -#define compat_domid_t domid_compat_t - CHECK_TYPE(domid); -#undef compat_domid_t -#undef xen_domid_t - } case XENMEM_maximum_ram_page: nat.hnd =3D compat; break; --- 2010-03-02.orig/xen/include/xen/compat.h 2009-03-04 12:16:26.0000000= 00 +0100 +++ 2010-03-02/xen/include/xen/compat.h 2010-03-05 13:44:11.000000000 = +0100 @@ -128,44 +128,61 @@ }) =20 =20 +#define CHECK_NAME(name, tag) __check ## tag ## name +#define CHECK_NAME_(k, n, tag) __check ## tag ## k ## _ ## n + #define CHECK_TYPE(name) \ - typedef int __checkT ## name[1 - ((xen_ ## name ## _t *)0 !=3D \ - (compat_ ## name ## _t *)0) * 2] +static inline int CHECK_NAME(name, T)(xen_ ## name ## _t *x, \ + compat_ ## name ## _t *c) \ +{ \ + return x =3D=3D c; \ +} #define CHECK_TYPE_(k, n) \ - typedef int __checkT ## k ## _ ## n[1 - ((k xen_ ## n *)0 !=3D \ - (k compat_ ## n *)0) * 2] +static inline int CHECK_NAME_(k, n, T)(k xen_ ## n *x, \ + k compat_ ## n *c) \ +{ \ + return x =3D=3D c; \ +} =20 #define CHECK_SIZE(name) \ - typedef int __checkS ## name[1 - (sizeof(xen_ ## name ## _t) !=3D \ - sizeof(compat_ ## name ## _t)) * 2] + typedef int CHECK_NAME(name, S)[1 - (sizeof(xen_ ## name ## _t) !=3D = \ + sizeof(compat_ ## name ## _t)) * = 2] #define CHECK_SIZE_(k, n) \ - typedef int __checkS ## k ## _ ## n[1 - (sizeof(k xen_ ## n) !=3D \ + typedef int CHECK_NAME_(k, n, S)[1 - (sizeof(k xen_ ## n) !=3D \ sizeof(k compat_ ## n)) * 2] =20 +#define CHECK_FIELD_COMMON(name, t, f) \ +static inline int name(xen_ ## t ## _t *x, compat_ ## t ## _t *c) \ +{ \ + BUILD_BUG_ON(offsetof(xen_ ## t ## _t, f) !=3D \ + offsetof(compat_ ## t ## _t, f)); \ + return &x->f =3D=3D &c->f; \ +} +#define CHECK_FIELD_COMMON_(k, name, n, f) \ +static inline int name(k xen_ ## n *x, k compat_ ## n *c) \ +{ \ + BUILD_BUG_ON(offsetof(k xen_ ## n, f) !=3D \ + offsetof(k compat_ ## n, f)); \ + return &x->f =3D=3D &c->f; \ +} + #define CHECK_FIELD(t, f) \ - typedef int __checkF ## t ## __ ## f[1 - (&((xen_ ## t ## _t *)0)->f = !=3D \ - &((compat_ ## t ## _t *)0)->f) = * 2] + CHECK_FIELD_COMMON(CHECK_NAME(t ## __ ## f, F), t, f) #define CHECK_FIELD_(k, n, f) \ - typedef int __checkF ## k ## _ ## n ## __ ## f[1 - (&((k xen_ ## n = *)0)->f !=3D \ - &((k compat_ ## n = *)0)->f) * 2] + CHECK_FIELD_COMMON_(k, CHECK_NAME_(k, n ## __ ## f, F), n, f) =20 #define CHECK_SUBFIELD_1(t, f1, f2) \ - typedef int __checkF1 ## t ## __ ## f1 ## __ ## f2 \ - [1 - (&((xen_ ## t ## _t *)0)->f1.f2 !=3D \ - &((compat_ ## t ## _t *)0)->f1.f2) * 2] + CHECK_FIELD_COMMON(CHECK_NAME(t ## __ ## f1 ## __ ## f2, F1), t, = f1.f2) #define CHECK_SUBFIELD_1_(k, n, f1, f2) \ - typedef int __checkF1 ## k ## _ ## n ## __ ## f1 ## __ ## f2 \ - [1 - (&((k xen_ ## n *)0)->f1.f2 !=3D \ - &((k compat_ ## n *)0)->f1.f2) * 2] + CHECK_FIELD_COMMON_(k, CHECK_NAME_(k, n ## __ ## f1 ## __ ## f2, F1), = \ + n, f1.f2) =20 #define CHECK_SUBFIELD_2(t, f1, f2, f3) \ - typedef int __checkF2 ## t ## __ ## f1 ## __ ## f2 ## __ ## f3 \ - [1 - (&((xen_ ## t ## _t *)0)->f1.f2.f3 !=3D \ - &((compat_ ## t ## _t *)0)->f1.f2.f3) * 2] + CHECK_FIELD_COMMON(CHECK_NAME(t ## __ ## f1 ## __ ## f2 ## __ ## f3, = F2), \ + t, f1.f2.f3) #define CHECK_SUBFIELD_2_(k, n, f1, f2, f3) \ - typedef int __checkF2 ## k ## _ ## n ## __ ## f1 ## __ ## f2 ## __ ## = f3 \ - [1 - (&((k xen_ ## n *)0)->f1.f2.f3 !=3D \ - &((k compat_ ## n *)0)->f1.f2.f3) * 2] + CHECK_FIELD_COMMON_(k, CHECK_NAME_(k, n ## __ ## f1 ## __ ## f2 ## __ = ## \ + f3, F2), n, f1.f2.f3) =20 int hypercall_xlat_continuation(unsigned int *id, unsigned int mask, = ...); =20 --=__Part7B51A8D3.0__= Content-Type: text/plain; name="compat-checks-gcc-4.5.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="compat-checks-gcc-4.5.patch" Just like with the __RING_SIZE() macro, the compat mode type checking=0Amac= ros also need changing in order to work with gcc 4.5.=0A=0ASigned-off-by: = Jan Beulich =0A=0A--- 2010-03-02.orig/xen/common/compa= t/memory.c 2009-07-06 15:07:20.000000000 +0200=0A+++ 2010-03-02/xen/co= mmon/compat/memory.c 2010-03-05 13:42:15.000000000 +0100=0A@@ -7,6 = +7,12 @@=0A #include =0A #include =0A = =0A+#define xen_domid_t domid_t=0A+#define compat_domid_t domid_compat_t=0A= +CHECK_TYPE(domid);=0A+#undef compat_domid_t=0A+#undef xen_domid_t=0A+=0A = int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE(void) compat)=0A = {=0A int rc, split, op =3D cmd & MEMOP_CMD_MASK;=0A@@ -169,13 +175,6 = @@ int compat_memory_op(unsigned int cmd, X=0A case XENMEM_current_= reservation:=0A case XENMEM_maximum_reservation:=0A case = XENMEM_maximum_gpfn:=0A- {=0A-#define xen_domid_t domid_t=0A-#define= compat_domid_t domid_compat_t=0A- CHECK_TYPE(domid);=0A-#undef = compat_domid_t=0A-#undef xen_domid_t=0A- }=0A case = XENMEM_maximum_ram_page:=0A nat.hnd =3D compat;=0A = break;=0A--- 2010-03-02.orig/xen/include/xen/compat.h 2009-03-04 = 12:16:26.000000000 +0100=0A+++ 2010-03-02/xen/include/xen/compat.h = 2010-03-05 13:44:11.000000000 +0100=0A@@ -128,44 +128,61 @@=0A })=0A =0A = =0A+#define CHECK_NAME(name, tag) __check ## tag ## name=0A+#define = CHECK_NAME_(k, n, tag) __check ## tag ## k ## _ ## n=0A+=0A #define = CHECK_TYPE(name) \=0A- typedef int __checkT ## name[1 - ((xen_ ## name = ## _t *)0 !=3D \=0A- (compat_ ## name ## = _t *)0) * 2]=0A+static inline int CHECK_NAME(name, T)(xen_ ## name ## _t = *x, \=0A+ compat_ ## name ## _t *c) = \=0A+{ \=0A+ return x =3D=3D c; \=0A+}=0A #define CHECK_TYPE_(k, n) = \=0A- typedef int __checkT ## k ## _ ## n[1 - ((k xen_ ## n *)0 !=3D = \=0A- (k compat_ ## n *)0) * = 2]=0A+static inline int CHECK_NAME_(k, n, T)(k xen_ ## n *x, \=0A+ = k compat_ ## n *c) \=0A+{ \=0A+ return x = =3D=3D c; \=0A+}=0A =0A #define CHECK_SIZE(name) \=0A- typedef int = __checkS ## name[1 - (sizeof(xen_ ## name ## _t) !=3D \=0A- = sizeof(compat_ ## name ## _t)) * 2]=0A+ typedef int = CHECK_NAME(name, S)[1 - (sizeof(xen_ ## name ## _t) !=3D \=0A+ = sizeof(compat_ ## name ## _t)) * 2]=0A #define = CHECK_SIZE_(k, n) \=0A- typedef int __checkS ## k ## _ ## n[1 - = (sizeof(k xen_ ## n) !=3D \=0A+ typedef int CHECK_NAME_(k, n, S)[1 - = (sizeof(k xen_ ## n) !=3D \=0A = sizeof(k compat_ ## n)) * 2]=0A =0A+#define CHECK_FIELD_COMMON(name, t, f) = \=0A+static inline int name(xen_ ## t ## _t *x, compat_ ## t ## _t *c) = \=0A+{ \=0A+ BUILD_BUG_ON(offsetof(xen_ ## t ## _t, f) !=3D \=0A+ = offsetof(compat_ ## t ## _t, f)); \=0A+ return &x->f =3D=3D = &c->f; \=0A+}=0A+#define CHECK_FIELD_COMMON_(k, name, n, f) \=0A+static = inline int name(k xen_ ## n *x, k compat_ ## n *c) \=0A+{ \=0A+ = BUILD_BUG_ON(offsetof(k xen_ ## n, f) !=3D \=0A+ offsetof(k= compat_ ## n, f)); \=0A+ return &x->f =3D=3D &c->f; \=0A+}=0A+=0A = #define CHECK_FIELD(t, f) \=0A- typedef int __checkF ## t ## __ ## f[1 = - (&((xen_ ## t ## _t *)0)->f !=3D \=0A- = &((compat_ ## t ## _t *)0)->f) * 2]=0A+ CHECK_FIELD_COMMON(CHECK= _NAME(t ## __ ## f, F), t, f)=0A #define CHECK_FIELD_(k, n, f) \=0A- = typedef int __checkF ## k ## _ ## n ## __ ## f[1 - (&((k xen_ ## n *)0)->f = !=3D \=0A- &((k = compat_ ## n *)0)->f) * 2]=0A+ CHECK_FIELD_COMMON_(k, CHECK_NAME_(k, n = ## __ ## f, F), n, f)=0A =0A #define CHECK_SUBFIELD_1(t, f1, f2) \=0A- = typedef int __checkF1 ## t ## __ ## f1 ## __ ## f2 \=0A- [1 = - (&((xen_ ## t ## _t *)0)->f1.f2 !=3D \=0A- &((compat_ = ## t ## _t *)0)->f1.f2) * 2]=0A+ CHECK_FIELD_COMMON(CHECK_NAME(t ## __ = ## f1 ## __ ## f2, F1), t, f1.f2)=0A #define CHECK_SUBFIELD_1_(k, n, f1, = f2) \=0A- typedef int __checkF1 ## k ## _ ## n ## __ ## f1 ## __ ## f2 = \=0A- [1 - (&((k xen_ ## n *)0)->f1.f2 !=3D \=0A- = &((k compat_ ## n *)0)->f1.f2) * 2]=0A+ CHECK_FIELD_COMMON_(k, = CHECK_NAME_(k, n ## __ ## f1 ## __ ## f2, F1), \=0A+ = n, f1.f2)=0A =0A #define CHECK_SUBFIELD_2(t, f1, f2, f3) \=0A- typedef = int __checkF2 ## t ## __ ## f1 ## __ ## f2 ## __ ## f3 \=0A- = [1 - (&((xen_ ## t ## _t *)0)->f1.f2.f3 !=3D \=0A- = &((compat_ ## t ## _t *)0)->f1.f2.f3) * 2]=0A+ CHECK_FIELD_COMMON(CHECK_= NAME(t ## __ ## f1 ## __ ## f2 ## __ ## f3, F2), \=0A+ = t, f1.f2.f3)=0A #define CHECK_SUBFIELD_2_(k, n, f1, f2, f3) \=0A- = typedef int __checkF2 ## k ## _ ## n ## __ ## f1 ## __ ## f2 ## __ ## f3 = \=0A- [1 - (&((k xen_ ## n *)0)->f1.f2.f3 !=3D \=0A- = &((k compat_ ## n *)0)->f1.f2.f3) * 2]=0A+ CHECK_FIELD_COMMON= _(k, CHECK_NAME_(k, n ## __ ## f1 ## __ ## f2 ## __ ## \=0A+ = f3, F2), n, f1.f2.f3)=0A =0A int hypercall_xlat_con= tinuation(unsigned int *id, unsigned int mask, ...);=0A =0A --=__Part7B51A8D3.0__= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=__Part7B51A8D3.0__=--