From e2f1d502a5a5ab6a8885cc518ed254c79f7ab27c Mon Sep 17 00:00:00 2001 From: Luca Dariz Date: Sun, 3 Apr 2022 16:59:54 +0200 Subject: add port name types * include/mach/mach_port.defs - use C type mach_port_name_array_t * include/mach/port.h: - add new types mach_port_name_t and mach_port_name_array_t - refine mach_port_t type for user and kernel space - use port names in mach_port_status to allow compilation of 64-bit - use port name to have uniform sizes and remove the old_mach_port_status_t as it's unused * include/mach/std_types.defs - use C type mach_port_name_array_t * kern/thread.{h,c} - fix prototype to use port names. So far it seems the only rpc to cause a conflict between the mig-generated header and the regular header, so compilation fails. Signed-off-by: Luca Dariz Message-Id: <20220403145955.120742-2-luca@orpolo.org> --- include/mach/mach_port.defs | 6 ++---- include/mach/port.h | 18 +++++++++++++++++- include/mach/std_types.defs | 6 ++---- 3 files changed, 21 insertions(+), 9 deletions(-) (limited to 'include') diff --git a/include/mach/mach_port.defs b/include/mach/mach_port.defs index c21c34bc..7cb8a659 100644 --- a/include/mach/mach_port.defs +++ b/include/mach/mach_port.defs @@ -53,8 +53,7 @@ subsystem routine mach_port_names( task : ipc_space_t; out names : mach_port_name_array_t = - ^array[] of mach_port_name_t - ctype: mach_port_array_t; + ^array[] of mach_port_name_t; out types : mach_port_type_array_t = ^array[] of mach_port_type_t); @@ -209,8 +208,7 @@ routine mach_port_get_set_status( task : ipc_space_t; name : mach_port_name_t; out members : mach_port_name_array_t = - ^array[] of mach_port_name_t - ctype: mach_port_array_t); + ^array[] of mach_port_name_t); /* * Puts the member port (the task must have receive rights) diff --git a/include/mach/port.h b/include/mach/port.h index 7ab3ab7c..3c226f6c 100644 --- a/include/mach/port.h +++ b/include/mach/port.h @@ -38,8 +38,24 @@ #include #include +/* + * Port names are the type used by userspace, they are always 32-bit wide. + */ +typedef unsigned int mach_port_name_t; +typedef mach_port_name_t *mach_port_name_array_t; +/* + * A port is represented + * - by a port name in userspace + * - by a pointer in kernel space + * While in userspace mach_port_name_t and mach_port_name are interchangable, + * in kernelspace they need to be different and appropriately converted. + */ +#ifdef KERNEL typedef vm_offset_t mach_port_t; +#else /* KERNEL */ +typedef mach_port_name_t mach_port_t; +#endif typedef mach_port_t *mach_port_array_t; typedef const mach_port_t *const_mach_port_array_t; typedef int *rpc_signature_info_t; @@ -121,7 +137,7 @@ typedef unsigned int mach_port_msgcount_t; /* number of msgs */ typedef unsigned int mach_port_rights_t; /* number of rights */ typedef struct mach_port_status { - mach_port_t mps_pset; /* containing port set */ + mach_port_name_t mps_pset; /* containing port set */ mach_port_seqno_t mps_seqno; /* sequence number */ /*mach_port_mscount_t*/natural_t mps_mscount; /* make-send count */ /*mach_port_msgcount_t*/natural_t mps_qlimit; /* queue limit */ diff --git a/include/mach/std_types.defs b/include/mach/std_types.defs index 5d95ab42..46987380 100644 --- a/include/mach/std_types.defs +++ b/include/mach/std_types.defs @@ -58,10 +58,8 @@ type mach_port_t = MACH_MSG_TYPE_COPY_SEND ; type mach_port_array_t = array[] of mach_port_t; -type mach_port_name_t = MACH_MSG_TYPE_PORT_NAME - ctype: mach_port_t; -type mach_port_name_array_t = array[] of mach_port_name_t - ctype: mach_port_array_t; +type mach_port_name_t = MACH_MSG_TYPE_PORT_NAME; +type mach_port_name_array_t = array[] of mach_port_name_t; type mach_port_right_t = natural_t; -- cgit v1.2.3