On Tue, May 26, 2020 at 09:40:27PM +0100, David CARLIER wrote: > From b24a6702beb2a4e2a9c1c03b69c6d1dd07d4cf08 Mon Sep 17 00:00:00 2001 > From: David Carlier <devne...@gmail.com> > Date: Tue, 26 May 2020 21:35:27 +0100 > Subject: [PATCH] util/oslib: current process full path resolution on MacOS > > Using existing libproc to fill the path. > > Signed-off-by: David Carlier <devne...@gmail.com> > --- > util/oslib-posix.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index 062236a1ab..96f0405ee6 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -55,6 +55,10 @@ > #include <sys/sysctl.h> > #endif > > +#ifdef __APPLE__ > +#include <libproc.h> > +#endif > + > #include "qemu/mmap-alloc.h" > > #ifdef CONFIG_DEBUG_STACK_USAGE > @@ -366,6 +370,15 @@ void qemu_init_exec_dir(const char *argv0) > p = buf; > } > } > +#elif defined(__APPLE__) > + { > + uint32_t len; > + len = proc_pidpath(getpid(), buf, sizeof(buf) - 1);
Hi David, proc_pidpath handler in the xnu kernel is indirectly calling build_path_with_parent [1] and it includes NULL terminator into buffersize, i.e. the patch seems to limit path length to one less character than OS allows. > + if (len > 0) { > + buf[len] = 0; > + p = buf; > + } > + } > #endif > /* If we don't have any way of figuring out the actual executable > location then try argv[0]. */ > -- > 2.26.2 > The change looks okay but it's not clear why it is needed [2]. Also, libproc.h [3] has this comment: /* * This header file contains private interfaces to obtain process information. * These interfaces are subject to change in future releases. */ But iTerm2 [4] an Chromium [5] are using it. An alternative (if it works and IMO less appealing) would be to retrieve process path using AppKit [6]. 1. https://opensource.apple.com/source/xnu/xnu-6153.81.5/bsd/vfs/vfs_cache.c.auto.html 2. https://wiki.qemu.org/Contribute/SubmitAPatch#Write_a_meaningful_commit_message 3. https://opensource.apple.com/source/xnu/xnu-6153.81.5/libsyscall/wrappers/libproc/libproc.h.auto.html 4. https://gitlab.com/gnachman/iterm2/blob/872e3d63fbcaf7b4235c4f3b7273e09a7ba4c1d1/sources/iTermLSOF.m#L31 5. https://github.com/chromium/chromium/blob/2ca8c5037021c9d2ecc00b787d58a31ed8fc8bcb/base/process/process_handle_mac.cc#L31 6. https://developer.apple.com/documentation/appkit/nsworkspace?language=objc Regards, Roman