* [PATCH] meson: fix botched compile check conversions
@ 2021-11-16 9:38 Paolo Bonzini
2021-11-16 11:13 ` Daniel P. Berrangé
2021-11-16 11:51 ` Peter Maydell
0 siblings, 2 replies; 8+ messages in thread
From: Paolo Bonzini @ 2021-11-16 9:38 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell
Fix a bunch of incorrect conversions from configure to Meson, which result
in different outcomes with --extra-cflags=-Werror.
pthread_setname_np needs "#define _GNU_SOURCE" on Linux (which I am using
also for the non-Linux check, so that it correctly fails with an error
about having too few parameters).
Fix struct checks to use has_type instead of has_symbol, and "#define
_GNU_SOURCE" too in the case of struct mmsghdr.
Remove an apostrophe that ended up at the end of a #include line.
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/meson.build b/meson.build
index 2ece4fe088..93a5e50a16 100644
--- a/meson.build
+++ b/meson.build
@@ -1547,8 +1547,6 @@ config_host_data.set('CONFIG_INOTIFY',
cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
config_host_data.set('CONFIG_INOTIFY1',
cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
-config_host_data.set('CONFIG_IOVEC',
- cc.has_header_symbol('sys/uio.h', 'struct iovec'))
config_host_data.set('CONFIG_MACHINE_BSWAP_H',
cc.has_header_symbol('machine/bswap.h', 'bswap32',
prefix: '''#include <sys/endian.h>
@@ -1561,8 +1559,6 @@ config_host_data.set('CONFIG_SYSMACROS',
cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
config_host_data.set('HAVE_OPTRESET',
cc.has_header_symbol('getopt.h', 'optreset'))
-config_host_data.set('HAVE_UTMPX',
- cc.has_header_symbol('utmpx.h', 'struct utmpx'))
config_host_data.set('HAVE_IPPROTO_MPTCP',
cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP'))
@@ -1574,6 +1570,14 @@ config_host_data.set('HAVE_STRUCT_STAT_ST_ATIM',
cc.has_member('struct stat', 'st_atim',
prefix: '#include <sys/stat.h>'))
+# has_type
+config_host_data.set('CONFIG_IOVEC',
+ cc.has_type('struct iovec',
+ prefix: '#include <sys/uio.h>'))
+config_host_data.set('HAVE_UTMPX',
+ cc.has_type('struct utmpx',
+ prefix: '#include <utmpx.h>'))
+
config_host_data.set('CONFIG_EVENTFD', cc.links('''
#include <sys/eventfd.h>
int main(void) { return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); }'''))
@@ -1615,7 +1619,7 @@ config_host_data.set('CONFIG_POSIX_MADVISE', cc.links(gnu_source_prefix + '''
#include <stddef.h>
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }'''))
-config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
+config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links(gnu_source_prefix + '''
#include <pthread.h>
static void *f(void *p) { return NULL; }
@@ -1626,7 +1630,7 @@ config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
pthread_setname_np(thread, "QEMU");
return 0;
}''', dependencies: threads))
-config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links('''
+config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links(gnu_source_prefix + '''
#include <pthread.h>
static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
@@ -1662,8 +1666,10 @@ config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
have_l2tpv3 = false
if not get_option('l2tpv3').disabled() and have_system
- have_l2tpv3 = (cc.has_header_symbol('sys/socket.h', 'struct mmsghdr')
- and cc.has_header('linux/ip.h'))
+ have_l2tpv3 = cc.has_type('struct mmsghdr',
+ prefix: gnu_source_prefix + '''
+ #include <sys/socket.h>
+ #include <linux/ip.h>''')
endif
config_host_data.set('CONFIG_L2TPV3', have_l2tpv3)
@@ -1689,7 +1695,7 @@ config_host_data.set('CONFIG_NETMAP', have_netmap)
# xfs headers will not try to redefine structs from linux headers
# if this macro is set.
config_host_data.set('HAVE_FSXATTR', cc.links('''
- #include <linux/fs.h>'
+ #include <linux/fs.h>
struct fsxattr foo;
int main(void) {
return 0;
--
2.33.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 9:38 [PATCH] meson: fix botched compile check conversions Paolo Bonzini
@ 2021-11-16 11:13 ` Daniel P. Berrangé
2021-11-16 14:24 ` Paolo Bonzini
2021-11-16 11:51 ` Peter Maydell
1 sibling, 1 reply; 8+ messages in thread
From: Daniel P. Berrangé @ 2021-11-16 11:13 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Peter Maydell, qemu-devel
On Tue, Nov 16, 2021 at 10:38:34AM +0100, Paolo Bonzini wrote:
> Fix a bunch of incorrect conversions from configure to Meson, which result
> in different outcomes with --extra-cflags=-Werror.
>
> pthread_setname_np needs "#define _GNU_SOURCE" on Linux (which I am using
> also for the non-Linux check, so that it correctly fails with an error
> about having too few parameters).
>
> Fix struct checks to use has_type instead of has_symbol, and "#define
> _GNU_SOURCE" too in the case of struct mmsghdr.
Ok, so relies on fact that passing an incorrect number of arguments
is a fatal error, when function prototypes are available, even
without -Werror being set.
Side note, GCC looks to be trying to make explicit function prototypes
mandatory at last
https://linuxplumbersconf.org/event/11/contributions/1014/
> Remove an apostrophe that ended up at the end of a #include line.
>
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
And the setname_np stuff, I've tested on Fedora 34 and FreebSD 12.2
Tested-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> meson.build | 24 +++++++++++++++---------
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 2ece4fe088..93a5e50a16 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1547,8 +1547,6 @@ config_host_data.set('CONFIG_INOTIFY',
> cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
> config_host_data.set('CONFIG_INOTIFY1',
> cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
> -config_host_data.set('CONFIG_IOVEC',
> - cc.has_header_symbol('sys/uio.h', 'struct iovec'))
> config_host_data.set('CONFIG_MACHINE_BSWAP_H',
> cc.has_header_symbol('machine/bswap.h', 'bswap32',
> prefix: '''#include <sys/endian.h>
> @@ -1561,8 +1559,6 @@ config_host_data.set('CONFIG_SYSMACROS',
> cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
> config_host_data.set('HAVE_OPTRESET',
> cc.has_header_symbol('getopt.h', 'optreset'))
> -config_host_data.set('HAVE_UTMPX',
> - cc.has_header_symbol('utmpx.h', 'struct utmpx'))
> config_host_data.set('HAVE_IPPROTO_MPTCP',
> cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP'))
>
> @@ -1574,6 +1570,14 @@ config_host_data.set('HAVE_STRUCT_STAT_ST_ATIM',
> cc.has_member('struct stat', 'st_atim',
> prefix: '#include <sys/stat.h>'))
>
> +# has_type
> +config_host_data.set('CONFIG_IOVEC',
> + cc.has_type('struct iovec',
> + prefix: '#include <sys/uio.h>'))
> +config_host_data.set('HAVE_UTMPX',
> + cc.has_type('struct utmpx',
> + prefix: '#include <utmpx.h>'))
> +
> config_host_data.set('CONFIG_EVENTFD', cc.links('''
> #include <sys/eventfd.h>
> int main(void) { return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); }'''))
> @@ -1615,7 +1619,7 @@ config_host_data.set('CONFIG_POSIX_MADVISE', cc.links(gnu_source_prefix + '''
> #include <stddef.h>
> int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }'''))
>
> -config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
> +config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links(gnu_source_prefix + '''
> #include <pthread.h>
>
> static void *f(void *p) { return NULL; }
> @@ -1626,7 +1630,7 @@ config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
> pthread_setname_np(thread, "QEMU");
> return 0;
> }''', dependencies: threads))
> -config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links('''
> +config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links(gnu_source_prefix + '''
> #include <pthread.h>
>
> static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
> @@ -1662,8 +1666,10 @@ config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
>
> have_l2tpv3 = false
> if not get_option('l2tpv3').disabled() and have_system
> - have_l2tpv3 = (cc.has_header_symbol('sys/socket.h', 'struct mmsghdr')
> - and cc.has_header('linux/ip.h'))
> + have_l2tpv3 = cc.has_type('struct mmsghdr',
> + prefix: gnu_source_prefix + '''
> + #include <sys/socket.h>
> + #include <linux/ip.h>''')
> endif
> config_host_data.set('CONFIG_L2TPV3', have_l2tpv3)
>
> @@ -1689,7 +1695,7 @@ config_host_data.set('CONFIG_NETMAP', have_netmap)
> # xfs headers will not try to redefine structs from linux headers
> # if this macro is set.
> config_host_data.set('HAVE_FSXATTR', cc.links('''
> - #include <linux/fs.h>'
> + #include <linux/fs.h>
> struct fsxattr foo;
> int main(void) {
> return 0;
> --
> 2.33.1
>
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 9:38 [PATCH] meson: fix botched compile check conversions Paolo Bonzini
2021-11-16 11:13 ` Daniel P. Berrangé
@ 2021-11-16 11:51 ` Peter Maydell
2021-11-16 12:00 ` Daniel P. Berrangé
1 sibling, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2021-11-16 11:51 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
On Tue, 16 Nov 2021 at 09:38, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Fix a bunch of incorrect conversions from configure to Meson, which result
> in different outcomes with --extra-cflags=-Werror.
FWIW this still won't give the right answer for the 'struct iovec'
test if you include -Werror via --extra-cflags, because the
generated code trips over an "expression result unused" warning:
Running compile:
Working directory:
/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n
Command line: clang-7 -m64 -mcx16
/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/testfile.c
-o /mnt/nvmedis
k/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/output.obj
-c -fsanitize=undefined -fno-sanitize=shift-base -Werror -D_FI
LE_OFFSET_BITS=64 -O0 -Werror=implicit-function-declaration
-Werror=unknown-warning-option -Werror=unused-command-line-argument
-Werror=ignored-op
timization-argument -std=gnu11
Code:
#include <sys/uio.h>
void bar(void) {
sizeof(struct iovec);
};
Compiler stdout:
Compiler stderr:
/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/testfile.c:3:13:
error: expression result unused [-Werror,-Wunused-value]
sizeof(struct iovec);
^~~~~~~~~~~~~~~~~~~~
1 error generated.
Checking for type "struct iovec" : NO
But maybe we should just explicitly reject -Werror in --extra-cflags...
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 11:51 ` Peter Maydell
@ 2021-11-16 12:00 ` Daniel P. Berrangé
2021-11-16 13:10 ` Peter Maydell
2021-11-16 14:31 ` Paolo Bonzini
0 siblings, 2 replies; 8+ messages in thread
From: Daniel P. Berrangé @ 2021-11-16 12:00 UTC (permalink / raw)
To: Peter Maydell; +Cc: Paolo Bonzini, qemu-devel
On Tue, Nov 16, 2021 at 11:51:16AM +0000, Peter Maydell wrote:
> On Tue, 16 Nov 2021 at 09:38, Paolo Bonzini <pbonzini@redhat.com> wrote:
> >
> > Fix a bunch of incorrect conversions from configure to Meson, which result
> > in different outcomes with --extra-cflags=-Werror.
>
> FWIW this still won't give the right answer for the 'struct iovec'
> test if you include -Werror via --extra-cflags, because the
> generated code trips over an "expression result unused" warning:
>
>
> Running compile:
> Working directory:
> /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n
> Command line: clang-7 -m64 -mcx16
> /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/testfile.c
> -o /mnt/nvmedis
> k/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/output.obj
> -c -fsanitize=undefined -fno-sanitize=shift-base -Werror -D_FI
> LE_OFFSET_BITS=64 -O0 -Werror=implicit-function-declaration
> -Werror=unknown-warning-option -Werror=unused-command-line-argument
> -Werror=ignored-op
> timization-argument -std=gnu11
>
> Code:
> #include <sys/uio.h>
> void bar(void) {
> sizeof(struct iovec);
> };
> Compiler stdout:
>
> Compiler stderr:
> /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/arm-clang/meson-private/tmpeiz36t2n/testfile.c:3:13:
> error: expression result unused [-Werror,-Wunused-value]
> sizeof(struct iovec);
> ^~~~~~~~~~~~~~~~~~~~
> 1 error generated.
>
> Checking for type "struct iovec" : NO
>
>
> But maybe we should just explicitly reject -Werror in --extra-cflags...
I wonder if the problem is more fundamental than that. Passing
stuff in --extra-cflags is done to influence the flags used to
compile the QEMU end user binaries. Unfortunately --extra-cflags
is also getting applied to all the meson.build feature checks.
IMHO we would get a more reliable result if the meson.build
checks were fully isolated from the cflags we used for building
everything else, so the checks get a well understood, predictable
environment.
IIUC, this current behaviour is a result of us adding cflags
using add_global_arguments / add_project_arguments.
I wonder if we need to exclusively use the 'c_args' parameter
to library()/executable() and friends ? The downside is of
course would be extra work to make sure we pass c_args in all
the right places.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 12:00 ` Daniel P. Berrangé
@ 2021-11-16 13:10 ` Peter Maydell
2021-11-16 13:15 ` Daniel P. Berrangé
2021-11-16 14:31 ` Paolo Bonzini
1 sibling, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2021-11-16 13:10 UTC (permalink / raw)
To: Daniel P. Berrangé; +Cc: Paolo Bonzini, qemu-devel
On Tue, 16 Nov 2021 at 12:00, Daniel P. Berrangé <berrange@redhat.com> wrote:
> I wonder if the problem is more fundamental than that. Passing
> stuff in --extra-cflags is done to influence the flags used to
> compile the QEMU end user binaries. Unfortunately --extra-cflags
> is also getting applied to all the meson.build feature checks.
>
> IMHO we would get a more reliable result if the meson.build
> checks were fully isolated from the cflags we used for building
> everything else, so the checks get a well understood, predictable
> environment.
If you're using --extra-cflags to pass in "-I/path/to/libfoo/headers"
then you do want that to be used in the meson check for "do we have
libfoo", though...
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 13:10 ` Peter Maydell
@ 2021-11-16 13:15 ` Daniel P. Berrangé
0 siblings, 0 replies; 8+ messages in thread
From: Daniel P. Berrangé @ 2021-11-16 13:15 UTC (permalink / raw)
To: Peter Maydell; +Cc: Paolo Bonzini, qemu-devel
On Tue, Nov 16, 2021 at 01:10:04PM +0000, Peter Maydell wrote:
> On Tue, 16 Nov 2021 at 12:00, Daniel P. Berrangé <berrange@redhat.com> wrote:
> > I wonder if the problem is more fundamental than that. Passing
> > stuff in --extra-cflags is done to influence the flags used to
> > compile the QEMU end user binaries. Unfortunately --extra-cflags
> > is also getting applied to all the meson.build feature checks.
> >
> > IMHO we would get a more reliable result if the meson.build
> > checks were fully isolated from the cflags we used for building
> > everything else, so the checks get a well understood, predictable
> > environment.
>
> If you're using --extra-cflags to pass in "-I/path/to/libfoo/headers"
> then you do want that to be used in the meson check for "do we have
> libfoo", though...
For pkg-config-ized things meson lets you override those paths
per-library IIRC.
For the non-pkg-config-izied case, that could be an argument for
specialized --extra-header-dir=PATH and --extra-lib-dir=$PATH args.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 11:13 ` Daniel P. Berrangé
@ 2021-11-16 14:24 ` Paolo Bonzini
0 siblings, 0 replies; 8+ messages in thread
From: Paolo Bonzini @ 2021-11-16 14:24 UTC (permalink / raw)
To: Daniel P. Berrangé; +Cc: Peter Maydell, qemu-devel
On 11/16/21 12:13, Daniel P. Berrangé wrote:
> On Tue, Nov 16, 2021 at 10:38:34AM +0100, Paolo Bonzini wrote:
>> Fix a bunch of incorrect conversions from configure to Meson, which result
>> in different outcomes with --extra-cflags=-Werror.
>>
>> pthread_setname_np needs "#define _GNU_SOURCE" on Linux (which I am using
>> also for the non-Linux check, so that it correctly fails with an error
>> about having too few parameters).
>>
>> Fix struct checks to use has_type instead of has_symbol, and "#define
>> _GNU_SOURCE" too in the case of struct mmsghdr.
>
> Ok, so relies on fact that passing an incorrect number of arguments
> is a fatal error, when function prototypes are available, even
> without -Werror being set.
>
> Side note, GCC looks to be trying to make explicit function prototypes
> mandatory at last
>
> https://linuxplumbersconf.org/event/11/contributions/1014/
Yes, and that's also why Meson adds the -Werror=implicit-declaration
option; these days it's simply too dangerous to assume a function is
present, if it links but you don't really know which header it comes from.
Paolo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] meson: fix botched compile check conversions
2021-11-16 12:00 ` Daniel P. Berrangé
2021-11-16 13:10 ` Peter Maydell
@ 2021-11-16 14:31 ` Paolo Bonzini
1 sibling, 0 replies; 8+ messages in thread
From: Paolo Bonzini @ 2021-11-16 14:31 UTC (permalink / raw)
To: Daniel P. Berrangé, Peter Maydell; +Cc: qemu-devel
On 11/16/21 13:00, Daniel P. Berrangé wrote:
> I wonder if the problem is more fundamental than that. Passing
> stuff in --extra-cflags is done to influence the flags used to
> compile the QEMU end user binaries. Unfortunately --extra-cflags
> is also getting applied to all the meson.build feature checks.
>
> IMHO we would get a more reliable result if the meson.build
> checks were fully isolated from the cflags we used for building
> everything else, so the checks get a well understood, predictable
> environment.
>
> IIUC, this current behaviour is a result of us adding cflags
> using add_global_arguments / add_project_arguments.
No, it's not using add_global_arguments/add_project_arguments for
--extra-cflags.
The --extra-cflags (aka the CFLAGS envvar, or "meson setup -Dc_args") is
messy: on one hand it's kinda legacy (we have configure flags to set
-O2, -g, -Werror, etc.), on the other hand not really possible to kill
it because it's how distros expect to set flags such as -O2.
But it's full of pitfalls, and the only good use of it seems to be for
-I and -L flags. We already saw issues with it last week with distros
adding "-Wall" to CFLAGS or --extra-cflags and that gives you bogus
warnings. Unfortunately you certainly want flags such as -g to override
earlier flags, and you might even want -Wall to override earlier -Wno-*
flags *unless -Werror is in use*.
Apart from this, the sizeof() issue (which by the way I didn't see with
GCC) has to be fixed in Meson and is probably visible also in e.g.
has_members.
Paolo
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-11-16 14:34 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-16 9:38 [PATCH] meson: fix botched compile check conversions Paolo Bonzini
2021-11-16 11:13 ` Daniel P. Berrangé
2021-11-16 14:24 ` Paolo Bonzini
2021-11-16 11:51 ` Peter Maydell
2021-11-16 12:00 ` Daniel P. Berrangé
2021-11-16 13:10 ` Peter Maydell
2021-11-16 13:15 ` Daniel P. Berrangé
2021-11-16 14:31 ` Paolo Bonzini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.