| # Zircon System Calls | 
 |  | 
 | ## Handles | 
 | + [handle_close](handle_close.md) - close a handle | 
 | + [handle_close_many](handle_close_many.md) - close several handles | 
 | + [handle_duplicate](handle_duplicate.md) - create a duplicate handle (optionally with reduced rights) | 
 | + [handle_replace](handle_replace.md) - create a new handle (optionally with reduced rights) and destroy the old one | 
 |  | 
 | ## Objects | 
 | + [object_get_child](object_get_child.md) - find the child of an object by its koid | 
 | + [object_get_info](object_get_info.md) - obtain information about an object | 
 | + [object_get_property](object_get_property.md) - read an object property | 
 | + [object_set_profile](object_set_profile.md) - apply a profile to a thread | 
 | + [object_set_property](object_set_property.md) - modify an object property | 
 | + [object_signal](object_signal.md) - set or clear the user signals on an object | 
 | + [object_signal_peer](object_signal_peer.md) - set or clear the user signals in the opposite end | 
 | + [object_wait_many](object_wait_many.md) - wait for signals on multiple objects | 
 | + [object_wait_one](object_wait_one.md) - wait for signals on one object | 
 | + [object_wait_async](object_wait_async.md) - asynchronous notifications on signal change | 
 |  | 
 | ## Threads | 
 | + [thread_create](thread_create.md) - create a new thread within a process | 
 | + [thread_exit](thread_exit.md) - exit the current thread | 
 | + [thread_read_state](thread_read_state.md) - read register state from a thread | 
 | + [thread_start](thread_start.md) - cause a new thread to start executing | 
 | + [thread_write_state](thread_write_state.md) - modify register state of a thread | 
 |  | 
 | ## Processes | 
 | + [process_create](process_create.md) - create a new process within a job | 
 | + [process_read_memory](process_read_memory.md) - read from a process's address space | 
 | + [process_start](process_start.md) - cause a new process to start executing | 
 | + [process_write_memory](process_write_memory.md) - write to a process's address space | 
 | + [process_exit](process_exit.md) - exit the current process | 
 |  | 
 | ## Jobs | 
 | + [job_create](job_create.md) - create a new job within a job | 
 | + [job_set_critical](job_set_critical.md) - set a process as critical to a job | 
 | + [job_set_policy](job_set_policy.md) - modify policies for a job and its descendants | 
 |  | 
 | ## Tasks (Thread, Process, or Job) | 
 | + [task_create_exception_channel](task_create_exception_channel.md) - create an exception channel on a task | 
 | + [task_kill](task_kill.md) - cause a task to stop running | 
 | + [task_suspend](task_suspend.md) - cause a task to be suspended | 
 |  | 
 | ## Profiles | 
 | + [profile_create](profile_create.md) - create a new profile object | 
 |  | 
 | ## Exceptions | 
 | + [exception_get_thread](exception_get_thread.md) - create a handle for the exception thread | 
 | + [exception_get_process](exception_get_process.md) - create a handle for the exception process | 
 |  | 
 | ## Channels | 
 | + [channel_call](channel_call.md) - synchronously send a message and receive a reply | 
 | + [channel_call_etc](channel_call_etc.md) - synchronously send a message and receive a reply with handle information | 
 | + [channel_create](channel_create.md) - create a new channel | 
 | + [channel_read](channel_read.md) - receive a message from a channel | 
 | + [channel_read_etc](channel_read_etc.md) - receive a message from a channel with handle information | 
 | + [channel_write](channel_write.md) - write a message to a channel | 
 | + [channel_write_etc](channel_write_etc.md) - write a message to the channel and modify the handles | 
 |  | 
 | ## Sockets | 
 | + [socket_create](socket_create.md) - create a new socket | 
 | + [socket_read](socket_read.md) - read data from a socket | 
 | + [socket_shutdown](socket_shutdown.md) - prevent reading or writing | 
 | + [socket_write](socket_write.md) - write data to a socket | 
 |  | 
 | ## Stream | 
 | + [`zx_stream_create()`](stream_create.md) - create a stream from a VMO | 
 | + [`zx_stream_readv()`](stream_readv.md) - read data from the stream at the current seek offset | 
 | + [`zx_stream_readv_at()`](stream_readv_at.md) - read data from the stream at a given offset | 
 | + [`zx_stream_writev()`](stream_writev.md) - write data to the stream at the current seek offset | 
 | + [`zx_stream_writev_at()`](stream_writev_at.md) - write data to the stream at a given offset | 
 | + [`zx_stream_seek()`](stream_seek.md) - modify the current seek offset of the stream | 
 |  | 
 | ## Fifos | 
 | + [fifo_create](fifo_create.md) - create a new fifo | 
 | + [fifo_read](fifo_read.md) - read data from a fifo | 
 | + [fifo_write](fifo_write.md) - write data to a fifo | 
 |  | 
 | ## Events and Event Pairs | 
 | + [event_create](event_create.md) - create an event | 
 | + [eventpair_create](eventpair_create.md) - create a connected pair of events | 
 | + [system_get_event](system_get_event.md) - retrieve a handle to a system event | 
 |  | 
 | ## Ports | 
 | + [port_create](port_create.md) - create a port | 
 | + [port_queue](port_queue.md) - send a packet to a port | 
 | + [port_wait](port_wait.md) - wait for packets to arrive on a port | 
 | + [port_cancel](port_cancel.md) - cancel notifications from async_wait | 
 |  | 
 | ## Futexes | 
 | + [futex_wait](futex_wait.md) - wait on a futex | 
 | + [futex_wake](futex_wake.md) - wake waiters on a futex | 
 | + [futex_requeue](futex_requeue.md) - wake some waiters and requeue other waiters | 
 |  | 
 | ## Virtual Memory Objects (VMOs) | 
 | + [vmo_create](vmo_create.md) - create a new vmo | 
 | + [vmo_read](vmo_read.md) - read from a vmo | 
 | + [vmo_write](vmo_write.md) - write to a vmo | 
 | + [vmo_create_child](vmo_create_child.md) - creates a child of a vmo | 
 | + [vmo_get_size](vmo_get_size.md) - obtain the size of a vmo | 
 | + [vmo_set_size](vmo_set_size.md) - adjust the size of a vmo | 
 | + [vmo_op_range](vmo_op_range.md) - perform an operation on a range of a vmo | 
 | + [vmo_replace_as_executable](vmo_replace_as_executable.md) - add execute rights to a vmo | 
 | + [vmo_create_physical](vmo_create_physical.md) - create a VM object referring to a specific contiguous range of physical memory | 
 | + [vmo_set_cache_policy](vmo_set_cache_policy.md) - set the caching policy for pages held by a VMO | 
 |  | 
 | ## Virtual Memory Address Regions (VMARs) | 
 | + [vmar_allocate](vmar_allocate.md) - create a new child VMAR | 
 | + [vmar_map](vmar_map.md) - map a VMO into a process | 
 | + [vmar_unmap](vmar_unmap.md) - unmap a memory region from a process | 
 | + [vmar_protect](vmar_protect.md) - adjust memory access permissions | 
 | + [vmar_op_range](vmar_op_range.md) - perform an operation on VMOs mapped into a range of a VMAR | 
 | + [vmar_destroy](vmar_destroy.md) - destroy a VMAR and all of its children | 
 |  | 
 | ## Userspace Pagers | 
 | + [pager_create](pager_create.md) - create a new pager object | 
 | + [pager_create_vmo](pager_create_vmo.md) - create a pager owned vmo | 
 | + [pager_detach_vmo](pager_detach_vmo.md) - detaches a pager from a vmo | 
 | + [pager_supply_pages](pager_supply_pages.md) - supply pages into a pager owned vmo | 
 | + [pager_op_range](pager_op_range.md) - perform an operation on a range of a pager owned vmo | 
 |  | 
 | ## Cryptographically Secure RNG | 
 | + [cprng_add_entropy](cprng_add_entropy.md) | 
 | + [cprng_draw](cprng_draw.md) | 
 |  | 
 | ## Time | 
 | + [nanosleep](nanosleep.md) - sleep for some number of nanoseconds | 
 | + [clock_get](clock_get.md) - read a system clock (**DEPRECATED**) | 
 | + [clock_get_monotonic](clock_get_monotonic.md) - read the monotonic system clock | 
 | + [ticks_get](ticks_get.md) - read high-precision timer ticks | 
 | + [ticks_per_second](ticks_per_second.md) - read the number of high-precision timer ticks in a second | 
 | + [deadline_after](deadline_after.md) - Convert a time relative to now to an absolute deadline | 
 | + [clock_adjust](clock_adjust.md) (**DEPRECATED**) | 
 |  | 
 | ## Timers | 
 | + [timer_create](timer_create.md) - create a timer object | 
 | + [timer_set](timer_set.md) - start a timer | 
 | + [timer_cancel](timer_cancel.md) - cancel a timer | 
 |  | 
 | ## Hypervisor guests | 
 | + [guest_create](guest_create.md) - create a hypervisor guest | 
 | + [guest_set_trap](guest_set_trap.md) - set a trap in a hypervisor guest | 
 |  | 
 | ## Virtual CPUs | 
 | + [vcpu_create](vcpu_create.md) - create a virtual cpu | 
 | + [vcpu_resume](vcpu_resume.md) - resume execution of a virtual cpu | 
 | + [vcpu_interrupt](vcpu_interrupt.md) - raise an interrupt on a virtual cpu | 
 | + [vcpu_read_state](vcpu_read_state.md) - read state from a virtual cpu | 
 | + [vcpu_write_state](vcpu_write_state.md) - write state to a virtual cpu | 
 | + [interrupt_bind_vcpu](interrupt_bind_vcpu.md) - Bind an interrupt object to a VCPU | 
 |  | 
 | ## Global system information | 
 | + [system_get_dcache_line_size](system_get_dcache_line_size.md) | 
 | + [system_get_features](system_get_features.md) - get hardware-specific features | 
 | + [system_get_num_cpus](system_get_num_cpus.md) - get number of CPUs | 
 | + [system_get_physmem](system_get_physmem.md) - get physical memory size | 
 | + [system_get_version_string](system_get_version_string.md) - get version string | 
 |  | 
 | ## Debug Logging | 
 | + [debuglog_create](debuglog_create.md) - create a kernel managed debuglog reader or writer | 
 | + [debuglog_write](debuglog_write.md) - write log entry to debuglog | 
 | + [debuglog_read](debuglog_read.md) - read log entries from debuglog | 
 | + [debug_read](debug_read.md) - TODO(fxbug.dev/32938) | 
 | + [debug_write](debug_write.md) - TODO(fxbug.dev/32938) | 
 | + [debug_send_command](debug_send_command.md) - TODO(fxbug.dev/32938) | 
 |  | 
 | ## Multi-function | 
 | + [vmar_unmap_handle_close_thread_exit](vmar_unmap_handle_close_thread_exit.md) - three-in-one | 
 | + [futex_wake_handle_close_thread_exit](futex_wake_handle_close_thread_exit.md) - three-in-one | 
 |  | 
 | ## System | 
 | + [system_mexec](system_mexec.md) - Soft reboot the system with a new kernel and bootimage | 
 | + [system_mexec_payload_get](system_mexec_payload_get.md) - Return a ZBI containing ZBI entries necessary to boot this system | 
 | + [system_powerctl](system_powerctl.md) | 
 |  | 
 | ## DDK | 
 | + [bti_create](bti_create.md) - create a new bus transaction initiator | 
 | + [bti_pin](bti_pin.md) - pin pages and grant devices access to them | 
 | + [bti_release_quarantine](bti_release_quarantine.md) - releases all quarantined PMTs | 
 | + [cache_flush](cache_flush.md) - Flush CPU data and/or instruction caches | 
 | + [interrupt_ack](interrupt_ack.md) - Acknowledge an interrupt object | 
 | + [interrupt_bind](interrupt_bind.md) - Bind an interrupt object to a port | 
 | + [interrupt_create](interrupt_create.md) - Create a physical or virtual interrupt object | 
 | + [interrupt_destroy](interrupt_destroy.md) - Destroy an interrupt object | 
 | + [interrupt_trigger](interrupt_trigger.md) - Trigger a virtual interrupt object | 
 | + [interrupt_wait](interrupt_wait.md) - Wait on an interrupt object | 
 | + [iommu_create](iommu_create.md) - create a new IOMMU object in the kernel | 
 | + [pmt_unpin](pmt_unpin.md) - unpin pages and revoke device access to them | 
 | + [resource_create](resource_create.md) - create a resource object | 
 | + [smc_call](smc_call.md) - Make an SMC call from user space | 
 |  | 
 | ## Display drivers | 
 | + [framebuffer_get_info](framebuffer_get_info.md) | 
 | + [framebugger_set_range](framebuffer_set_range.md) | 
 |  | 
 | ## Tracing | 
 | + [ktrace_control](ktrace_control.md) | 
 | + [ktrace_read](ktrace_read.md) | 
 | + [ktrace_write](ktrace_write.md) | 
 | + [mtrace_control](mtrace_control.md) | 
 |  | 
 | ## Others/Work in progress | 
 | + [ioports_release](ioports_release.md) | 
 | + [pc_firmware_tables](pc_firmware_tables.md) | 
 | + [pci_add_subtract_io_range](pci_add_subtract_io_range.md) | 
 | + [pci_cfg_pio_rw](pci_cfg_pio_rw.md) | 
 | + [pci_config_read](pci_config_read.md) | 
 | + [pci_config_write](pci_config_write.md) | 
 | + [pci_enable_bus_master](pci_enable_bus_master.md) | 
 | + [pci_get_bar](pci_get_bar.md) | 
 | + [pci_get_nth_device](pci_get_nth_device.md) | 
 | + [pci_init](pci_init.md) | 
 | + [pci_map_interrupt](pci_map_interrupt.md) | 
 | + [pci_query_irq_mode](pci_query_irq_mode.md) | 
 | + [pci_reset_device](pci_reset_device.md) | 
 | + [pci_set_irq_mode](pci_set_irq_mode.md) | 
 |  | 
 |  | 
 | + [syscall_test_0](syscall_test_0.md) | 
 | + [syscall_test_1](syscall_test_1.md) | 
 | + [syscall_test_2](syscall_test_2.md) | 
 | + [syscall_test_3](syscall_test_3.md) | 
 | + [syscall_test_4](syscall_test_4.md) | 
 | + [syscall_test_5](syscall_test_5.md) | 
 | + [syscall_test_6](syscall_test_6.md) | 
 | + [syscall_test_7](syscall_test_7.md) | 
 | + [syscall_test_8](syscall_test_8.md) | 
 | + [syscall_test_wrapper](syscall_test_wrapper.md) | 
 | + [syscall_test_handle_create](syscall_test_handle_create.md) | 
 |  | 
 | ## Syscall generation | 
 |  | 
 | Syscall support is generated from `//zircon/syscalls`. The FIDL files in that | 
 | directory are first run through `fidlc` which produces an intermediate format. | 
 | That intermediate format is consumed by [kazoo](/zircon/tools/kazoo) which | 
 | produces output for both the kernel and userspace in a variety of languages. | 
 | This output includes C or C++ headers for both the kernel and userspace, syscall | 
 | entry points, other language bindings, and so on. | 
 |  | 
 | This tool is invoked as a part of the build, rather than checking in its output. | 
 |  |