|
[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 |