|  | # zx_system_mexec | 
|  |  | 
|  | ## NAME | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | Soft reboot the system with a new kernel and bootimage. | 
|  |  | 
|  | ## SYNOPSIS | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | ```c | 
|  | #include <zircon/syscalls.h> | 
|  |  | 
|  | zx_status_t zx_system_mexec(zx_handle_t resource, | 
|  | zx_handle_t kernel_vmo, | 
|  | zx_handle_t bootimage_vmo); | 
|  | ``` | 
|  |  | 
|  | ## DESCRIPTION | 
|  |  | 
|  | `zx_system_mexec()` accepts two vmo handles: *kernel_vmo* should contain a | 
|  | kernel image and *bootimage_vmo* should contain an initrd whose address shall | 
|  | be passed to the new kernel as a kernel argument. | 
|  |  | 
|  | To supplant the running kernel, a *resource* of **ZX_RSRC_KIND_ROOT** must be | 
|  | supplied. | 
|  |  | 
|  | Upon success, `zx_system_mexec()` shall supplant the currently running kernel | 
|  | image with the kernel image contained within *kernel_vmo*, load the ramdisk | 
|  | contained within *bootimage_vmo* to a location in physical memory and branch | 
|  | directly into the new kernel while providing the address of the loaded initrd | 
|  | to the new kernel. | 
|  |  | 
|  | To use the `zx_system_mexec()` function, you must specify | 
|  | `kernel.enable-debugging-syscalls=true` on the kernel command line. Otherwise, | 
|  | the function returns **ZX_ERR_NOT_SUPPORTED**. | 
|  |  | 
|  | ## RIGHTS | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | *resource* must have resource kind **ZX_RSRC_KIND_ROOT**. | 
|  |  | 
|  | *kernel_vmo* must be of type **ZX_OBJ_TYPE_VMO** and have **ZX_RIGHT_READ**. | 
|  |  | 
|  | *bootimage_vmo* must be of type **ZX_OBJ_TYPE_VMO** and have **ZX_RIGHT_READ**. | 
|  |  | 
|  | ## RETURN VALUE | 
|  |  | 
|  | `zx_system_mexec()` shall not return upon success. | 
|  |  | 
|  | **ZX_ERR_NOT_SUPPORTED**  `kernel.enable-debugging-syscalls` is not set to `true` | 
|  | on the kernel command line. | 
|  |  | 
|  | ## SEE ALSO | 
|  |  | 
|  | - [`zx_system_mexec_payload_get()`] | 
|  |  | 
|  | <!-- References updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | [`zx_system_mexec_payload_get()`]: system_mexec_payload_get.md |