+/* Allocates a kobject port, never fails */
+extern ipc_port_t ipc_kobject_alloc_port(
+ ipc_kobject_t kobject,
+ ipc_kobject_type_t type,
+ ipc_kobject_alloc_options_t options);
+
+/* Allocates a kobject port, never fails */
+extern ipc_port_t ipc_kobject_alloc_labeled_port(
+ ipc_kobject_t kobject,
+ ipc_kobject_type_t type,
+ ipc_label_t label,
+ ipc_kobject_alloc_options_t options);
+
+/* Makes a send right, lazily allocating a kobject port, arming for no-senders, never fails */
+extern boolean_t ipc_kobject_make_send_lazy_alloc_port(
+ ipc_port_t *port_store,
+ ipc_kobject_t kobject,
+ ipc_kobject_type_t type,
+ boolean_t should_ptrauth,
+ uint64_t ptrauth_discriminator) __result_use_check;
+
+/* Makes a send right, lazily allocating a kobject port, arming for no-senders, never fails */
+extern boolean_t ipc_kobject_make_send_lazy_alloc_labeled_port(
+ ipc_port_t *port_store,
+ ipc_kobject_t kobject,
+ ipc_kobject_type_t type,
+ ipc_label_t label) __result_use_check;
+
+/* Get the kobject address associated with a port */
+static inline ipc_kobject_t
+ipc_kobject_get(ipc_port_t port)
+{
+ if (ip_is_kobject(port)) {
+ if (ip_is_kolabeled(port)) {
+ return port->ip_kolabel->ikol_kobject;
+ }
+ return port->ip_kobject;
+ }
+ return 0;
+}
+
+/* Check if a kobject can be copied out to a given space */
+extern boolean_t ipc_kobject_label_check(
+ ipc_space_t space,
+ ipc_port_t port,
+ mach_msg_type_name_t msgt_name);