# Copyright 2017 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

# See https://cs.opensource.google/fuchsia/fuchsia/+/main:zircon/vdso/object.fidl

include <zircon/syscalls.h>
include <zircon/syscalls/exception.h>
include <zircon/syscalls/object.h>
include <zircon/syscalls/port.h>
include <zircon/syscalls/profile.h>

resource koid[int64]: 0

zx_object_get_child(handle zx_handle, koid koid, rights flags[zx_rights], out ptr[out, zx_handle])

zx_object_get_info$ZX_INFO_HANDLE_VALID(handle zx_handle, topic const[ZX_INFO_HANDLE_VALID], buffer const[0], buffer_size const[0], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_HANDLE_BASIC(handle zx_handle, topic const[ZX_INFO_HANDLE_BASIC], buffer ptr[out, zx_info_handle_basic], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_HANDLE_TABLE(handle zx_handle, topic const[ZX_INFO_HANDLE_TABLE], buffer ptr[out, zx_info_handle_extended], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_HANDLE_COUNT(handle zx_handle, topic const[ZX_INFO_HANDLE_COUNT], buffer ptr[out, zx_info_handle_count], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_PROCESS_HANDLE_STATS(handle zx_process, topic const[ZX_INFO_PROCESS_HANDLE_STATS], buffer ptr[out, zx_info_process_handle_stats], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_JOB(handle zx_process, topic const[ZX_INFO_JOB], buffer ptr[out, zx_info_job], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_PROCESS(handle zx_process, topic const[ZX_INFO_PROCESS], buffer ptr[out, zx_info_process], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_PROCESS_THREADS(handle zx_process, topic const[ZX_INFO_PROCESS_THREADS], buffer ptr[out, array[koid]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_THREAD(handle zx_thread, topic const[ZX_INFO_THREAD], buffer ptr[out, zx_info_thread], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_THREAD_EXCEPTION_REPORT(handle zx_thread, topic const[ZX_INFO_THREAD_EXCEPTION_REPORT], buffer ptr[out, zx_exception_report], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_THREAD_STATS(handle zx_thread, topic const[ZX_INFO_THREAD_STATS], buffer ptr[out, zx_info_thread_stats], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_CPU_STATS(root_resource zx_root_resource, topic const[ZX_INFO_CPU_STATS], buffer ptr[out, array[zx_info_cpu_stats]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_VMAR(handle zx_vmar, topic const[ZX_INFO_VMAR], buffer ptr[out, zx_info_vmar], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_VMO(handle zx_vmar, topic const[ZX_INFO_VMO], buffer ptr[out, zx_info_vmo], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_SOCKET(handle zx_socket, topic const[ZX_INFO_SOCKET], buffer ptr[out, zx_info_socket], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_JOB_CHILDREN(handle zx_job, topic const[ZX_INFO_JOB_CHILDREN], buffer ptr[out, array[koid]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_JOB_PROCESSES(handle zx_job, topic const[ZX_INFO_JOB_PROCESSES], buffer ptr[out, array[koid]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_TASK_STATS(handle zx_process, topic const[ZX_INFO_TASK_STATS], buffer ptr[out, zx_info_task_stats], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_PROCESS_MAPS(handle zx_process, topic const[ZX_INFO_PROCESS_MAPS], buffer ptr[out, array[zx_info_maps]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_PROCESS_VMOS(handle zx_process, topic const[ZX_INFO_PROCESS_VMOS], buffer ptr[out, array[zx_info_vmo]], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_KMEM_STATS(root_resource zx_root_resource, topic const[ZX_INFO_KMEM_STATS], buffer ptr[out, zx_info_kmem_stats], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_KMEM_STATS_EXTENDED(root_resource zx_root_resource, topic const[ZX_INFO_KMEM_STATS_EXTENDED], buffer ptr[out, zx_info_kmem_stats_extended], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_TIMER(handle zx_timer, topic const[ZX_INFO_TIMER], buffer ptr[out, zx_info_timer], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_GUEST_STATS(handle zx_handle, topic const[ZX_INFO_GUEST_STATS], buffer ptr[out, zx_info_handle_basic], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_TASK_RUNTIME(handle zx_handle, topic const[ZX_INFO_TASK_RUNTIME], buffer ptr[out, zx_info_handle_basic], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_RESOURCE(handle zx_resource, topic const[ZX_INFO_RESOURCE], buffer ptr[out, zx_info_resource], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])
zx_object_get_info$ZX_INFO_BTI(handle zx_bti, topic const[ZX_INFO_BTI], buffer ptr[out, zx_info_bti], buffer_size bytesize[buffer], actual ptr[out, intptr], avail ptr[out, intptr])

zx_object_get_property$ZX_PROP_NAME(handle zx_handle, property const[ZX_PROP_NAME], value ptr[out, array[int8]], size len[value])
zx_object_get_property$ZX_PROP_REGISTER_FS(handle zx_thread, property const[ZX_PROP_REGISTER_FS], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_REGISTER_GS(handle zx_thread, property const[ZX_PROP_REGISTER_GS], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_PROCESS_DEBUG_ADDR(handle zx_process, property const[ZX_PROP_PROCESS_DEBUG_ADDR], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_PROCESS_BREAK_ON_LOAD(handle zx_process, property const[ZX_PROP_PROCESS_BREAK_ON_LOAD], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_PROCESS_VDSO_BASE_ADDRESS(handle zx_process, property const[ZX_PROP_PROCESS_VDSO_BASE_ADDRESS], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID(handle zx_process, property const[ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID], value ptr[out, intptr], size len[value])
zx_object_get_property$ZX_PROP_SOCKET_RX_THRESHOLD(handle zx_socket, property const[ZX_PROP_SOCKET_RX_THRESHOLD], value ptr[out, int64], size len[value])
zx_object_get_property$ZX_PROP_SOCKET_TX_THRESHOLD(handle zx_socket, property const[ZX_PROP_SOCKET_TX_THRESHOLD], value ptr[out, int64], size len[value])
zx_object_get_property$ZX_PROP_STREAM_MODE_APPEND(handle zx_stream, property const[ZX_PROP_STREAM_MODE_APPEND], value ptr[out, int8], size len[value])
zx_object_get_property$ZX_PROP_VMO_CONTENT_SIZE(handle zx_vmo, property const[ZX_PROP_VMO_CONTENT_SIZE], value ptr[out, int64], size len[value])
# zx_exception not defined because never generated by a syscall
zx_object_get_property$ZX_PROP_EXCEPTION_STATE(handle zx_handle, property const[ZX_PROP_EXCEPTION_STATE], value ptr[out, int32], size len[value])
zx_object_get_property$ZX_PROP_EXCEPTION_STRATEGY(handle zx_handle, property const[ZX_PROP_EXCEPTION_STRATEGY], value ptr[out, int32], size len[value])

zx_object_set_property$ZX_PROP_NAME(handle zx_handle, property const[ZX_PROP_NAME], value ptr[in, array[int8]], size len[value])
zx_object_set_property$ZX_PROP_REGISTER_FS(handle zx_thread, property const[ZX_PROP_REGISTER_FS], value ptr[in, intptr], size len[value])
zx_object_set_property$ZX_PROP_REGISTER_GS(handle zx_thread, property const[ZX_PROP_REGISTER_GS], value ptr[in, intptr], size len[value])
zx_object_set_property$ZX_PROP_PROCESS_DEBUG_ADDR(handle zx_process, property const[ZX_PROP_PROCESS_DEBUG_ADDR], value ptr[in, intptr], size len[value])
zx_object_set_property$ZX_PROP_PROCESS_BREAK_ON_LOAD(handle zx_process, property const[ZX_PROP_PROCESS_BREAK_ON_LOAD], value ptr[in, intptr], size len[value])
zx_object_set_property$ZX_PROP_JOB_KILL_ON_OOM(handle zx_job, property const[ZX_PROP_JOB_KILL_ON_OOM], value ptr[in, int64], size len[value])
zx_object_set_property$ZX_PROP_SOCKET_RX_THRESHOLD(handle zx_socket, property const[ZX_PROP_SOCKET_RX_THRESHOLD], value ptr[in, int64], size len[value])
zx_object_set_property$ZX_PROP_SOCKET_TX_THRESHOLD(handle zx_socket, property const[ZX_PROP_SOCKET_TX_THRESHOLD], value ptr[in, int64], size len[value])
zx_object_set_property$ZX_PROP_STREAM_MODE_APPEND(handle zx_stream, property const[ZX_PROP_STREAM_MODE_APPEND], value ptr[in, int8], size len[value])
zx_object_set_property$ZX_PROP_VMO_CONTENT_SIZE(handle zx_vmo, property const[ZX_PROP_VMO_CONTENT_SIZE], value ptr[in, int64], size len[value])
# zx_exception not defined because never generated by a syscall
zx_object_set_property$ZX_PROP_EXCEPTION_STATE(handle zx_handle, property const[ZX_PROP_EXCEPTION_STATE], value ptr[in, int32], size len[value])
zx_object_set_property$ZX_PROP_EXCEPTION_STRATEGY(handle zx_handle, property const[ZX_PROP_EXCEPTION_STRATEGY], value ptr[in, int32], size len[value])

zx_object_signal(handle zx_handle, clear_mask int32, set_mask int32)
zx_object_signal_peer(handle zx_handle, clear_mask int32, set_mask int32)
zx_object_wait_many(items ptr[in, array[zx_wait_item]], count len[items], deadline zx_time)
zx_object_wait_one(handle zx_handle, signals int32, deadline zx_time, observed ptr[out, int32])
zx_object_wait_async(handle zx_handle, port zx_port, key proc[1000, 4], signals int32, options flags[wait_async_options])
zx_object_set_profile(handle zx_handle, profile zx_profile, options const[0])

wait_async_options = ZX_WAIT_ASYNC_ONCE, ZX_WAIT_ASYNC_EDGE

zx_info_handle_basic {
	koid		koid
	rights		int32
	type		int32
	related_koid	koid
	props		int32
}

zx_info_handle_extended {
	type		int32
	handle		zx_handle
	rights		int32
	reserved	int32
	koid		koid
	related_koid	koid
	peer_owner_koid	koid
}

zx_info_handle_count {
	count	int32
}

zx_info_process_handle_stats {
	handle_count	array[int32, ZX_OBJ_TYPE_UPPER_BOUND]
}

zx_info_job {
	return_code		int64
	exited			int8
	kill_on_oom		int8
	debugger_attached	int8
}

zx_info_process {
	return_code		int64
	started			int8
	exited			int8
	debugger_attached	int8
}

zx_info_thread {
	state				int32
	wait_exception_channel_type	int32
}

zx_exception_report {
	header	zx_exception_header
	context	zx_exception_context
}

zx_info_thread_stats {
	total_runtime	int64
}

zx_info_cpu_stats {
	cpu_number		int32
	flags			int32
	idle_time		int64
	reschedules		int64
	context_switches	int64
	irq_preempts		int64
	preempts		int64
	yields			int64
	ints			int64
	timer_ints		int64
	timers			int64
	page_faults		int64
	exceptions		int64
	syscalls		int64
	reschedule_ipis		int64
	generic_ipis		int64
}

zx_info_vmar {
	base	intptr
	len	intptr
}

zx_info_vmo {
	koid		koid
	name		array[int8, ZX_MAX_NAME_LEN]
	size_bytes	int64
	parent_koid	koid
	num_children	intptr
	num_mappings	intptr
	share_count	intptr
	flags		int32
	committed_bytes	int64
	handle_rights	int32
	create_options	int32
	cache_policy	int32
}

zx_info_socket {
	options			int32
	rx_buf_max		intptr
	rx_buf_size		intptr
	rx_buf_available	intptr
	tx_buf_max		intptr
	tx_buf_size		intptr
}

zx_info_task_stats {
	mem_mapped_bytes	intptr
	mem_private_bytes	intptr
	mem_shared_bytes	intptr
	mem_scaled_shared_bytes	intptr
}

zx_info_maps {
	name	array[int8, ZX_MAX_NAME_LEN]
	base	intptr
	size	intptr
	depth	intptr
	type	int32
	mapping	zx_info_maps_mapping
}

zx_info_maps_mapping {
	mmu_flags	int32
	vmo_koid	koid
	committed_pages	intptr
}

zx_info_kmem_stats {
	total_bytes		int64
	free_bytes		int64
	wired_bytes		int64

	total_heap_bytes	int64
	free_heap_bytes		int64
	vmo_bytes		int64
	mmu_overhead_bytes	int64
	ipc_bytes		int64
	other_bytes		int64
}

zx_info_kmem_stats_extended {
	total_bytes			int64
	free_bytes			int64
	wired_bytes			int64
	total_heap_bytes		int64
	free_heap_bytes			int64
	vmo_bytes			int64
# extended part
	vmo_pager_total_bytes		int64
	vmo_pager_newest_bytes		int64
	vmo_pager_oldest_bytes		int64
	vmo_discardable_locked_bytes	int64
	vmo_discardable_unlocked_bytes	int64
	mmu_overhead_bytes		int64
	ipc_bytes			int64
	other_bytes			int64
}

zx_info_timer {
	options		int32
	deadline	zx_time
	slack		int64
}

zx_info_resource {
	kind	int32
	flags	int32
	base	int64
	size	intptr
	name	array[int8, ZX_MAX_NAME_LEN]
}

zx_info_bti {
	minimum_contiguity	int64
	aspace_size		int64
}

zx_exception_header {
	size	int32
	type	int32
}

zx_exception_context [
	x86_64	x86_64_exc_data
	arm_64	arm64_exc_data
]

x86_64_exc_data {
	vector		int64
	err_code	int64
	cr2		int64
}

arm64_exc_data {
	esr	int32
	far	int64
}

zx_wait_item {
	handle	zx_handle
	waitfor	int32
	pending	int32
}
