[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/4] xen/public: arm: rework the macro set_xen_guest_handle_raw
On Fri, 30 Oct 2015, Julien Grall wrote: > The current implementation of set_xen_guest_handle_raw is using the > keyword "typeof" which is not part of C spec. > > Furthermore, when the guest handle is defined in ARM32 guest, the > pointer will always be smaller than the handle. Based on the C99 spec > [1] 6.2.6.1#7, the bits that do not correspond to the member written > will take unspecified value. > > Finally, based on the defect report #283 [2], the behavior of writing > from one member and reading from another is not clear. In that case, with set_xen_guest_handle_raw implemented as: > +#define set_xen_guest_handle_raw(hnd, val) \ > + do { \ > + /* Check if the handle is 64-bit (i.e 8-byte) */ \ > + (void) sizeof(struct { int : -!!(sizeof (hnd) != 8); }); \ > + /* Check if the type of val is compatible with the handle */ \ > + (void) sizeof((val) != (hnd).p); \ > + (hnd).q = (uint64_t)(uintptr_t)(val); \ > } while ( 0 ) > #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val) will get_xen_guest_handle, which access (hnd).p, have undefined behaviour? _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |