// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SYSROOT_ZIRCON_PROCESS_H_
#define SYSROOT_ZIRCON_PROCESS_H_

#include <stdint.h>
#include <zircon/analyzer.h>
#include <zircon/types.h>

__BEGIN_CDECLS

// Accessors for Zircon-specific state maintained by the language runtime

// Examines the set of handles received at process startup for one matching
// |hnd_info|.  If one is found, atomically returns it and removes it from the
// set available to future calls.
// |hnd_info| is a value returned by PA_HND().
zx_handle_t zx_take_startup_handle(uint32_t hnd_info);

zx_handle_t _zx_thread_self(void);
zx_handle_t zx_thread_self(void);

ZX_HANDLE_ACQUIRE_UNOWNED zx_handle_t _zx_process_self(void);
ZX_HANDLE_ACQUIRE_UNOWNED zx_handle_t zx_process_self(void);

ZX_HANDLE_ACQUIRE_UNOWNED zx_handle_t _zx_vmar_root_self(void);
ZX_HANDLE_ACQUIRE_UNOWNED zx_handle_t zx_vmar_root_self(void);

zx_handle_t _zx_job_default(void);
zx_handle_t zx_job_default(void);

__END_CDECLS

#endif  // SYSROOT_ZIRCON_PROCESS_H_
