qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] oslib-posix: Use sysctl(2) call to resolve exec


From: Kamil Rytarowski
Subject: Re: [Qemu-devel] [PATCH] oslib-posix: Use sysctl(2) call to resolve exec_dir on NetBSD
Date: Thu, 2 Nov 2017 18:27:55 +0100
User-agent: Mozilla/5.0 (X11; NetBSD amd64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0

On 02.11.2017 17:55, Peter Maydell wrote:
> On 28 October 2017 at 20:48, Kamil Rytarowski <address@hidden> wrote:
>> NetBSD 8.0(beta) ships with KERN_PROC_PATHNAME in sysctl(2).
>> Older NetBSD versions can use argv[0] parsing fallback.
>>
>> This code section is partly shared with FreeBSD.
>>
>> Signed-off-by: Kamil Rytarowski <address@hidden>
>> ---
>>  util/oslib-posix.c | 11 ++++++++++-
>>  1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
>> index 382bd4a231..77369c92ce 100644
>> --- a/util/oslib-posix.c
>> +++ b/util/oslib-posix.c
>> @@ -49,6 +49,10 @@
>>  #include <libutil.h>
>>  #endif
>>
>> +#ifdef __NetBSD__
>> +#include <sys/sysctl.h>
>> +#endif
>> +
>>  #include "qemu/mmap-alloc.h"
>>
>>  #ifdef CONFIG_DEBUG_STACK_USAGE
>> @@ -250,9 +254,14 @@ void qemu_init_exec_dir(const char *argv0)
>>              p = buf;
>>          }
>>      }
>> -#elif defined(__FreeBSD__)
>> +#elif defined(__FreeBSD__) \
>> +      || (defined(__NetBSD__) && defined(KERN_PROC_PATHNAME))
>>      {
>> +#if defined(__FreeBSD__)
>>          static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
>> +#else
>> +        static int mib[4] = {CTL_KERN, KERN_PROC_ARGS, -1, 
>> KERN_PROC_PATHNAME};
>> +#endif
>>          size_t len = sizeof(buf) - 1;
>>
>>          *buf = '\0';
> 
> It's a shame the BSDs can't agree on a single way to implement this :-(
> 
> I had a look at how Go implements this:
> https://github.com/golang/go/commit/2fc67e71af142bfa1e7662a4fde361f43509d2d7
> 
> and for NetBSD it uses readlink("/proc/curproc/exe"), which would be
> a better fallback for "sysctl not implemented" than the argv[0]
> stuff, perhaps (but then nobody's complained much so perhaps not
> worth the effort now). It also has /proc/curproc/file for OpenBSD, but
> my OpenBSD VM doesn't mount /proc/, which reduces my enthusiasm
> for trying for a "generic for BSDs try various /proc/ paths" approach.
> 
> In any case, I think this is better than what we have today,
> so I've applied it to master.
> 

It's better to assume that there is no such entity as a shared BSD code
in modern BSD Operating Systems. My opinion is to drop CONFIG_BSD
entirely from qemu and treat __NetBSD__, __FreeBSD__ and __OpenBSD__ as
diverse targets.

(I'm not sure how about bsd-user, whether it should be dropped and
reimplemented on per-OS basis? I think that in the current state of
affairs it's a reasonable move forwards.).

OpenBSD does not ship any interface except argv[0] to get executable
path. They have removed their procfs.

NetBSD and FreeBSD deprecate procfs and fallback to /proc shall not be
introduced into new code.

> thanks
> -- PMM
> 


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]