build mirage on android phones
Use the passed in start_info page rather than copying it elsewhere.
Fix definition of HYPERVISOR_suspend
Add the C level pieces needed for suspend/resume
Support suspend/resume in activations, xenstore and blkif.

The principle is to allow xenstore to quiesce properly, but
have everything else clean up on resume.

For example, in the block/ring path, we reissue requests that
haven't completed properly when woken up after the resume. We
should do something similar for the net path (not yet implemented).
Use wakeup_later in preference to wakeup in the activations and
ring paths. This is because 'wakeup' switches context to the new
thread immediately without considering other runnable threads,
which causes unfair scheduling. For example, this was observed
when heavy IO load was causing Time.sleep threads to sleep indefinitely.
Fix suspend/resume such that it doesn't spin after resuming.
Turns out the event channels were masked.
Use the passed in start_info page rather than copying it elsewhere.
Split the netif device into a mutable transport and a non-mutable id.
Suspend/resume for netifs
Merge https://github.com/crotsos/mirage-platform
match the Netif function signature to UNIX.

This needs some refactoring as the dev option isn't currently used, but this unbreaks the build
sync CHANGES
add mir-build script to convert .nobj.o outputs from the ocaml compiler into .xen unikernels
Update cstruct_stubs to Pierre's new version
C stubs which compute checksums now take Cstruct.ts directly

This replaces the use of Bigarrays. Note this code should probably
be moved into mirage-net, where the ocaml function declarations
live now.

This must be kept in sync with the mirage-net declarations, or
nasty segfaults will definitely result.
Move stubs which grabbed the xenstore and console rings into start_info_stubs.c

Even when the ring code is moved out-of-tree, we still need mirage-xen
code to find the pre-created xenstore and console rings.
Remove the C ring_stubs, import stubs for the memory barriers.

The shared-memory-ring code is all OCaml, except for small C/asm
stubs to invoke memory barriers.
Unix: When allocating memory, we get an Io_page.t. When handling fragments we use Cstruct.t

We don't need Io_page.sub: every caller should be using Cstruct.sub: removed.

To convert an Io_page.t into a Cstruct.t we can use Io_page.to_cstruct.

Note there is one place where the Cstruct.t is not opaque: when we access
the underlying bytes to pass to a write function.
xen: update to new Cstruct and shared-memory-ring interfaces

Similar to Unix, everywhere we wanted a 'view' we use a Cstruct.t
but we still allocate buffers via Io_page.get()

We now use the new shared-memory-ring code which is mostly OCaml
and has an improved interface so one set of temporary string
copies is removed in the xenstore interface.