vmo_clone - create a clone of a VM Object
#include <zircon/syscalls.h> zx_status_t zx_vmo_clone(zx_handle_t handle, uint32_t options, uint64_t offset, uint64_t size, zx_handle_t* out);
vmo_clone() creates a new virtual memory object (VMO) that clones a range of an existing vmo.
One handle is returned on success, representing an object with the requested size.
options must contain one or more flags to control clone creation.
Valid flags:
offset must be page aligned.
offset + size may not exceed the range of a 64bit unsigned value.
Both offset and size may start or extend beyond the original VMO's size.
The size of the VMO will be rounded up to the next page size boundary.
By default the rights of the cloned handled will be the same as the original with a few exceptions. See vmo_create for a discussion of the details of each right.
If options is ZX_VMO_CLONE_COPY_ON_WRITE the following rights are added:
TEMPORARY The following rights are added:
ZX_RIGHT_EXECUTE
ZX_RIGHT_MAP
VMOs produced by this mode will interact with the VMO syscalls in the following ways:
vmo_clone() returns ZX_OK on success. In the event of failure, a negative error value is returned.
ERR_BAD_TYPE Input handle is not a VMO.
ZX_ERR_ACCESS_DENIED Input handle does not have sufficient rights.
ZX_ERR_INVALID_ARGS out is an invalid pointer or NULL or the offset is not page aligned.
ZX_ERR_OUT_OF_RANGE offset + size is too large.
ZX_ERR_NO_MEMORY Failure due to lack of memory.
vmo_create, vmo_read, vmo_write, vmo_set_size, vmo_get_size, vmo_op_range, vmar_map.