From c1d219c066a5fbf6a6a4c3139f64954dbf12fd02 Mon Sep 17 00:00:00 2001 From: Flavio Cruz Date: Wed, 10 May 2023 01:00:45 -0400 Subject: Only use host_get_kernel_version and default_pager_paging_storage_new in x86_64. Also fixed the implementation of default_pager_paging_storage_new in proxy def pager to call into default_pager_paging_storage_new. We can fast track the simplification of the RPC ABI for x86_64 if we don't have MACH_MSG_TYPE_STRING used in RPCs which forces msgt_size to use more than 8 bits. Message-Id: --- trans/proxy-defpager.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'trans/proxy-defpager.c') diff --git a/trans/proxy-defpager.c b/trans/proxy-defpager.c index 5d952546..e44db152 100644 --- a/trans/proxy-defpager.c +++ b/trans/proxy-defpager.c @@ -100,28 +100,44 @@ S_default_pager_object_pages (mach_port_t default_pager, } kern_return_t -S_default_pager_paging_storage (mach_port_t default_pager, +S_default_pager_paging_storage_new (mach_port_t default_pager, mach_port_t device, const recnum_t *runs, mach_msg_type_number_t nruns, const_default_pager_filename_t name, boolean_t add) { - return allowed (default_pager, O_WRITE) - ?: default_pager_paging_storage (real_defpager, dev_master, - runs, nruns, name, add) - ?: mach_port_deallocate (mach_task_self (), device); + error_t err = allowed (default_pager, O_WRITE); + if (err) + return err; + + err = default_pager_paging_storage_new (real_defpager, dev_master, + runs, nruns, name, add); +#ifndef __x86_64__ + if (err == MIG_BAD_ID || err == EOPNOTSUPP) + { + err = default_pager_paging_storage (real_defpager, dev_master, + runs, nruns, name, add); + } +#endif + + if (err) + return err; + + mach_port_deallocate (mach_task_self (), device); } +#ifndef __x86_64__ kern_return_t -S_default_pager_paging_storage_new (mach_port_t default_pager, +S_default_pager_paging_storage (mach_port_t default_pager, mach_port_t device, const recnum_t *runs, mach_msg_type_number_t nruns, const_default_pager_filename_t name, boolean_t add) { - return S_default_pager_paging_storage (default_pager, + return S_default_pager_paging_storage_new (default_pager, device, runs, nruns, name, add); } +#endif kern_return_t S_default_pager_object_set_size (mach_port_t memory_object, -- cgit v1.2.3