Skip to content

Mach vm operations improvements

Marc-Aurel Zent requested to merge mzent/wine:mach-vm into master

For all mach vm operations this removes the task suspend and resume, which are not needed.

This uses mach_vm_read_overwrite to read into a caller-specified buffer, saving the mach_vm_deallocate call (bringing all read operations down to 1 syscall from 4).

The only alignment restriction on mach_vm_write according to the original CMU documentation is that data is

[pointer to page aligned in array of bytes] An array of data to be written.

(In practice it also works with arbitrary addresses on macOS, but it probably doesn't hurt to follow the original specifications here).

The only other reference that these read/writes should be page-aligned is from the GNU Hurd documentation

The current implementation requires that address, data and data_count all be page-aligned. Otherwise, KERN_INVALID_ARGUMENT is returned.

which I assume was the reason why this was originally done (plus it sounds to me like they will fix that in the future and 4fe19777 already broke GNU Hurd support anyways, if that was supposed to be working).

Also this includes the missing mach part of 5b1f3b14, which was only applied to the ptrace backend, and together with the write_process_memory rework, this gets rid of all fixmes in mach.c

Merge request reports

Loading