* [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note @ 2017-06-01 13:03 Marc-André Lureau 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure Marc-André Lureau ` (4 more replies) 0 siblings, 5 replies; 21+ messages in thread From: Marc-André Lureau @ 2017-06-01 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: lersek, qiaonuohan, anderson, Marc-André Lureau Hi, In previously sent series "[PATCH 00/21] WIP: dump: add kaslr support (for after 2.9)", I proposed a qemu-ga change to provide kaslr-related details to qemu, and other patches to append the vmcoreinfo note to the various dump format and tools. Although it remains still undecided how to pass the guest details to qemu (the latest proposal is a vmcoreinfo ACPI device), we can still review the rest of the series dealing with the dump and vmcoreinfo note manipulation. cheers Marc-André Lureau (4): dump: add DumpInfo structure dump: add vmcoreinfo ELF note kdump: add vmcoreinfo scripts/dump-guest-memory.py: add vmcoreinfo scripts/dump-guest-memory.py | 52 ++++++++++++ include/sysemu/dump-info.h | 18 +++++ include/sysemu/dump.h | 2 + dump.c | 184 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 252 insertions(+), 4 deletions(-) create mode 100644 include/sysemu/dump-info.h -- 2.13.0.91.g00982b8dd ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau @ 2017-06-01 13:03 ` Marc-André Lureau 2017-06-01 18:06 ` Laszlo Ersek 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note Marc-André Lureau ` (3 subsequent siblings) 4 siblings, 1 reply; 21+ messages in thread From: Marc-André Lureau @ 2017-06-01 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: lersek, qiaonuohan, anderson, Marc-André Lureau One way or another, the guest could communicate various dump info (via guest agent or vmcoreinfo device) and populate that structure. It can then be used to augment the dump with various details, as done in the following patch. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- include/sysemu/dump-info.h | 18 ++++++++++++++++++ dump.c | 3 +++ 2 files changed, 21 insertions(+) create mode 100644 include/sysemu/dump-info.h diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h new file mode 100644 index 0000000000..d2378e15e2 --- /dev/null +++ b/include/sysemu/dump-info.h @@ -0,0 +1,18 @@ +#ifndef DUMP_INFO_H +#define DUMP_INFO_H + +typedef struct DumpInfo { + bool received; + /* kernel base address */ + bool has_phys_base; + uint64_t phys_base; + /* "_text" symbol location */ + bool has_text; + uint64_t text; + /* the content of /sys/kernel/vmcoreinfo on Linux */ + char *vmcoreinfo; +} DumpInfo; + +extern DumpInfo dump_info; + +#endif /* DUMP_INFO_H */ diff --git a/dump.c b/dump.c index d9090a24cc..bdf3270f02 100644 --- a/dump.c +++ b/dump.c @@ -20,6 +20,7 @@ #include "monitor/monitor.h" #include "sysemu/kvm.h" #include "sysemu/dump.h" +#include "sysemu/dump-info.h" #include "sysemu/sysemu.h" #include "sysemu/memory_mapping.h" #include "sysemu/cpus.h" @@ -38,6 +39,8 @@ #define ELF_MACHINE_UNAME "Unknown" #endif +DumpInfo dump_info = { 0, }; + uint16_t cpu_to_dump16(DumpState *s, uint16_t val) { if (s->dump_info.d_endian == ELFDATA2LSB) { -- 2.13.0.91.g00982b8dd ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure Marc-André Lureau @ 2017-06-01 18:06 ` Laszlo Ersek 2017-06-01 18:18 ` Eric Blake 0 siblings, 1 reply; 21+ messages in thread From: Laszlo Ersek @ 2017-06-01 18:06 UTC (permalink / raw) To: Marc-André Lureau, qemu-devel; +Cc: anderson, qiaonuohan On 06/01/17 15:03, Marc-André Lureau wrote: > One way or another, the guest could communicate various dump info (via > guest agent or vmcoreinfo device) and populate that structure. It can > then be used to augment the dump with various details, as done in the > following patch. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/sysemu/dump-info.h | 18 ++++++++++++++++++ > dump.c | 3 +++ > 2 files changed, 21 insertions(+) > create mode 100644 include/sysemu/dump-info.h > > diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h > new file mode 100644 > index 0000000000..d2378e15e2 > --- /dev/null > +++ b/include/sysemu/dump-info.h > @@ -0,0 +1,18 @@ > +#ifndef DUMP_INFO_H > +#define DUMP_INFO_H > + > +typedef struct DumpInfo { > + bool received; > + /* kernel base address */ > + bool has_phys_base; > + uint64_t phys_base; > + /* "_text" symbol location */ > + bool has_text; > + uint64_t text; > + /* the content of /sys/kernel/vmcoreinfo on Linux */ > + char *vmcoreinfo; > +} DumpInfo; > + > +extern DumpInfo dump_info; > + > +#endif /* DUMP_INFO_H */ > diff --git a/dump.c b/dump.c > index d9090a24cc..bdf3270f02 100644 > --- a/dump.c > +++ b/dump.c > @@ -20,6 +20,7 @@ > #include "monitor/monitor.h" > #include "sysemu/kvm.h" > #include "sysemu/dump.h" > +#include "sysemu/dump-info.h" > #include "sysemu/sysemu.h" > #include "sysemu/memory_mapping.h" > #include "sysemu/cpus.h" > @@ -38,6 +39,8 @@ > #define ELF_MACHINE_UNAME "Unknown" > #endif > > +DumpInfo dump_info = { 0, }; > + > uint16_t cpu_to_dump16(DumpState *s, uint16_t val) > { > if (s->dump_info.d_endian == ELFDATA2LSB) { > Can you please spell out, in the commit message, the reason for introducing a new header file? (I suspect your reason, but it should be documented explicitly.) Thanks Laszlo ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-01 18:06 ` Laszlo Ersek @ 2017-06-01 18:18 ` Eric Blake 2017-06-02 9:46 ` Marc-André Lureau 0 siblings, 1 reply; 21+ messages in thread From: Eric Blake @ 2017-06-01 18:18 UTC (permalink / raw) To: Laszlo Ersek, Marc-André Lureau, qemu-devel; +Cc: qiaonuohan, anderson [-- Attachment #1: Type: text/plain, Size: 1270 bytes --] On 06/01/2017 01:06 PM, Laszlo Ersek wrote: > On 06/01/17 15:03, Marc-André Lureau wrote: >> One way or another, the guest could communicate various dump info (via >> guest agent or vmcoreinfo device) and populate that structure. It can >> then be used to augment the dump with various details, as done in the >> following patch. >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >> --- >> include/sysemu/dump-info.h | 18 ++++++++++++++++++ >> dump.c | 3 +++ >> 2 files changed, 21 insertions(+) >> create mode 100644 include/sysemu/dump-info.h >> >> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h >> new file mode 100644 >> index 0000000000..d2378e15e2 >> --- /dev/null >> +++ b/include/sysemu/dump-info.h >> @@ -0,0 +1,18 @@ >> +#ifndef DUMP_INFO_H >> +#define DUMP_INFO_H >> > > Can you please spell out, in the commit message, the reason for > introducing a new header file? (I suspect your reason, but it should be > documented explicitly.) Also, should you have a copyright header in the new file? And does MAINTAINERS cover it? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 604 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-01 18:18 ` Eric Blake @ 2017-06-02 9:46 ` Marc-André Lureau 2017-06-02 9:55 ` Marc-André Lureau 2017-06-05 7:24 ` Andrew Jones 0 siblings, 2 replies; 21+ messages in thread From: Marc-André Lureau @ 2017-06-02 9:46 UTC (permalink / raw) To: Eric Blake, Laszlo Ersek, qemu-devel, Wen Congyang; +Cc: anderson Hi On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: > On 06/01/2017 01:06 PM, Laszlo Ersek wrote: > > On 06/01/17 15:03, Marc-André Lureau wrote: > >> One way or another, the guest could communicate various dump info (via > >> guest agent or vmcoreinfo device) and populate that structure. It can > >> then be used to augment the dump with various details, as done in the > >> following patch. > >> > >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > >> --- > >> include/sysemu/dump-info.h | 18 ++++++++++++++++++ > >> dump.c | 3 +++ > >> 2 files changed, 21 insertions(+) > >> create mode 100644 include/sysemu/dump-info.h > >> > >> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h > >> new file mode 100644 > >> index 0000000000..d2378e15e2 > >> --- /dev/null > >> +++ b/include/sysemu/dump-info.h > >> @@ -0,0 +1,18 @@ > >> +#ifndef DUMP_INFO_H > >> +#define DUMP_INFO_H > > >> > > > > Can you please spell out, in the commit message, the reason for > > introducing a new header file? (I suspect your reason, but it should be > > documented explicitly.) > > Also, should you have a copyright header in the new file? And does > MAINTAINERS cover it? > None of the dump support is covered. Based on commit history, I can suggest Wen Congyang, as original author. Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if he is still contributing?). Laszlo has done significant changes and reviews too. I can also propose myself to help with reviews. Wen or Laszla, do you want to be the main maintainer? -- Marc-André Lureau ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-02 9:46 ` Marc-André Lureau @ 2017-06-02 9:55 ` Marc-André Lureau 2017-06-02 22:49 ` Laszlo Ersek 2017-06-05 7:24 ` Andrew Jones 1 sibling, 1 reply; 21+ messages in thread From: Marc-André Lureau @ 2017-06-02 9:55 UTC (permalink / raw) To: Eric Blake, Laszlo Ersek, qemu-devel, wencongyang2@huawei.com; +Cc: anderson Hi On Fri, Jun 2, 2017 at 1:46 PM Marc-André Lureau <marcandre.lureau@gmail.com> wrote: > Hi > > On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: > >> On 06/01/2017 01:06 PM, Laszlo Ersek wrote: >> > On 06/01/17 15:03, Marc-André Lureau wrote: >> >> One way or another, the guest could communicate various dump info (via >> >> guest agent or vmcoreinfo device) and populate that structure. It can >> >> then be used to augment the dump with various details, as done in the >> >> following patch. >> >> >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >> >> --- >> >> include/sysemu/dump-info.h | 18 ++++++++++++++++++ >> >> dump.c | 3 +++ >> >> 2 files changed, 21 insertions(+) >> >> create mode 100644 include/sysemu/dump-info.h >> >> >> >> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h >> >> new file mode 100644 >> >> index 0000000000..d2378e15e2 >> >> --- /dev/null >> >> +++ b/include/sysemu/dump-info.h >> >> @@ -0,0 +1,18 @@ >> >> +#ifndef DUMP_INFO_H >> >> +#define DUMP_INFO_H >> >> >> >> > >> > Can you please spell out, in the commit message, the reason for >> > introducing a new header file? (I suspect your reason, but it should be >> > documented explicitly.) >> >> Also, should you have a copyright header in the new file? And does >> MAINTAINERS cover it? >> > > None of the dump support is covered. Based on commit history, I can > suggest Wen Congyang, as original author. > Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if > he is still contributing?). Laszlo has done significant changes and reviews > too. I can also propose myself to help with reviews. > > Wen or Laszla, do you want to be the main maintainer? > (sorry for the typo) or rather "Supported" ("Someone is actually paid to look after this" according to MAINTAINERS) -- Marc-André Lureau ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-02 9:55 ` Marc-André Lureau @ 2017-06-02 22:49 ` Laszlo Ersek 2017-06-04 15:56 ` Zhang Chen 0 siblings, 1 reply; 21+ messages in thread From: Laszlo Ersek @ 2017-06-02 22:49 UTC (permalink / raw) To: Marc-André Lureau, Eric Blake, qemu-devel, wencongyang2@huawei.com Cc: anderson On 06/02/17 11:55, Marc-André Lureau wrote: > Hi > > On Fri, Jun 2, 2017 at 1:46 PM Marc-André Lureau <marcandre.lureau@gmail.com> > wrote: > >> Hi >> >> On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: >> >>> On 06/01/2017 01:06 PM, Laszlo Ersek wrote: >>>> On 06/01/17 15:03, Marc-André Lureau wrote: >>>>> One way or another, the guest could communicate various dump info (via >>>>> guest agent or vmcoreinfo device) and populate that structure. It can >>>>> then be used to augment the dump with various details, as done in the >>>>> following patch. >>>>> >>>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >>>>> --- >>>>> include/sysemu/dump-info.h | 18 ++++++++++++++++++ >>>>> dump.c | 3 +++ >>>>> 2 files changed, 21 insertions(+) >>>>> create mode 100644 include/sysemu/dump-info.h >>>>> >>>>> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h >>>>> new file mode 100644 >>>>> index 0000000000..d2378e15e2 >>>>> --- /dev/null >>>>> +++ b/include/sysemu/dump-info.h >>>>> @@ -0,0 +1,18 @@ >>>>> +#ifndef DUMP_INFO_H >>>>> +#define DUMP_INFO_H >>> >>>>> >>>> >>>> Can you please spell out, in the commit message, the reason for >>>> introducing a new header file? (I suspect your reason, but it should be >>>> documented explicitly.) >>> >>> Also, should you have a copyright header in the new file? And does >>> MAINTAINERS cover it? >>> >> >> None of the dump support is covered. Based on commit history, I can >> suggest Wen Congyang, as original author. >> Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if >> he is still contributing?). Laszlo has done significant changes and reviews >> too. I can also propose myself to help with reviews. >> >> Wen or Laszla, do you want to be the main maintainer? >> > > (sorry for the typo) > > or rather "Supported" ("Someone is actually paid to look after this" > according to MAINTAINERS) > Thanks, but I don't wish to have an official responsibility for this feature. My current responsibilities are more than enough to keep me busy. If you'd like to volunteer for maintaining the dump stuff, you have my blessing of course (whatever weight that might carry). Thanks Laszlo ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-02 22:49 ` Laszlo Ersek @ 2017-06-04 15:56 ` Zhang Chen 2017-06-06 18:19 ` Laszlo Ersek 0 siblings, 1 reply; 21+ messages in thread From: Zhang Chen @ 2017-06-04 15:56 UTC (permalink / raw) To: Laszlo Ersek, Marc-André Lureau, Eric Blake, qemu-devel, wencongyang2@huawei.com Cc: zhangchen.fnst, anderson, qiaonuohan On 06/03/2017 06:49 AM, Laszlo Ersek wrote: > On 06/02/17 11:55, Marc-André Lureau wrote: >> Hi >> >> On Fri, Jun 2, 2017 at 1:46 PM Marc-André Lureau <marcandre.lureau@gmail.com> >> wrote: >> >>> Hi >>> >>> On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: >>> >>>> On 06/01/2017 01:06 PM, Laszlo Ersek wrote: >>>>> On 06/01/17 15:03, Marc-André Lureau wrote: >>>>>> One way or another, the guest could communicate various dump info (via >>>>>> guest agent or vmcoreinfo device) and populate that structure. It can >>>>>> then be used to augment the dump with various details, as done in the >>>>>> following patch. >>>>>> >>>>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >>>>>> --- >>>>>> include/sysemu/dump-info.h | 18 ++++++++++++++++++ >>>>>> dump.c | 3 +++ >>>>>> 2 files changed, 21 insertions(+) >>>>>> create mode 100644 include/sysemu/dump-info.h >>>>>> >>>>>> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h >>>>>> new file mode 100644 >>>>>> index 0000000000..d2378e15e2 >>>>>> --- /dev/null >>>>>> +++ b/include/sysemu/dump-info.h >>>>>> @@ -0,0 +1,18 @@ >>>>>> +#ifndef DUMP_INFO_H >>>>>> +#define DUMP_INFO_H >>>>> Can you please spell out, in the commit message, the reason for >>>>> introducing a new header file? (I suspect your reason, but it should be >>>>> documented explicitly.) >>>> Also, should you have a copyright header in the new file? And does >>>> MAINTAINERS cover it? >>>> >>> None of the dump support is covered. Based on commit history, I can >>> suggest Wen Congyang, as original author. >>> Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if >>> he is still contributing?). Laszlo has done significant changes and reviews >>> too. I can also propose myself to help with reviews. >>> >>> Wen or Laszla, do you want to be the main maintainer? I can cc Qiao Nuohan<qiaonuohan@huawei.com>... Thanks Zhang Chen >>> >> (sorry for the typo) >> >> or rather "Supported" ("Someone is actually paid to look after this" >> according to MAINTAINERS) >> > Thanks, but I don't wish to have an official responsibility for this > feature. My current responsibilities are more than enough to keep me busy. > > If you'd like to volunteer for maintaining the dump stuff, you have my > blessing of course (whatever weight that might carry). > > Thanks > Laszlo > > > > -- Thanks Zhang Chen ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-04 15:56 ` Zhang Chen @ 2017-06-06 18:19 ` Laszlo Ersek 0 siblings, 0 replies; 21+ messages in thread From: Laszlo Ersek @ 2017-06-06 18:19 UTC (permalink / raw) To: Zhang Chen, Marc-André Lureau, Eric Blake, qemu-devel, wencongyang2@huawei.com Cc: anderson, qiaonuohan On 06/04/17 17:56, Zhang Chen wrote: > > > On 06/03/2017 06:49 AM, Laszlo Ersek wrote: >> On 06/02/17 11:55, Marc-André Lureau wrote: >>> Hi >>> >>> On Fri, Jun 2, 2017 at 1:46 PM Marc-André Lureau >>> <marcandre.lureau@gmail.com> >>> wrote: >>> >>>> Hi >>>> >>>> On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: >>>> >>>>> On 06/01/2017 01:06 PM, Laszlo Ersek wrote: >>>>>> On 06/01/17 15:03, Marc-André Lureau wrote: >>>>>>> One way or another, the guest could communicate various dump info >>>>>>> (via >>>>>>> guest agent or vmcoreinfo device) and populate that structure. It >>>>>>> can >>>>>>> then be used to augment the dump with various details, as done in >>>>>>> the >>>>>>> following patch. >>>>>>> >>>>>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >>>>>>> --- >>>>>>> include/sysemu/dump-info.h | 18 ++++++++++++++++++ >>>>>>> dump.c | 3 +++ >>>>>>> 2 files changed, 21 insertions(+) >>>>>>> create mode 100644 include/sysemu/dump-info.h >>>>>>> >>>>>>> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h >>>>>>> new file mode 100644 >>>>>>> index 0000000000..d2378e15e2 >>>>>>> --- /dev/null >>>>>>> +++ b/include/sysemu/dump-info.h >>>>>>> @@ -0,0 +1,18 @@ >>>>>>> +#ifndef DUMP_INFO_H >>>>>>> +#define DUMP_INFO_H >>>>>> Can you please spell out, in the commit message, the reason for >>>>>> introducing a new header file? (I suspect your reason, but it >>>>>> should be >>>>>> documented explicitly.) >>>>> Also, should you have a copyright header in the new file? And does >>>>> MAINTAINERS cover it? >>>>> >>>> None of the dump support is covered. Based on commit history, I can >>>> suggest Wen Congyang, as original author. >>>> Sadly, Qiao Nuohan cannot be reached with his mail today (anyone >>>> knows if >>>> he is still contributing?). Laszlo has done significant changes and >>>> reviews >>>> too. I can also propose myself to help with reviews. >>>> >>>> Wen or Laszla, do you want to be the main maintainer? > > I can cc Qiao Nuohan<qiaonuohan@huawei.com>... That would be great, thanks! Laszlo > > Thanks > Zhang Chen > >>>> >>> (sorry for the typo) >>> >>> or rather "Supported" ("Someone is actually paid to look after this" >>> according to MAINTAINERS) >>> >> Thanks, but I don't wish to have an official responsibility for this >> feature. My current responsibilities are more than enough to keep me >> busy. >> >> If you'd like to volunteer for maintaining the dump stuff, you have my >> blessing of course (whatever weight that might carry). >> >> Thanks >> Laszlo >> >> >> >> > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-02 9:46 ` Marc-André Lureau 2017-06-02 9:55 ` Marc-André Lureau @ 2017-06-05 7:24 ` Andrew Jones 2017-06-06 2:11 ` Peter Xu 1 sibling, 1 reply; 21+ messages in thread From: Andrew Jones @ 2017-06-05 7:24 UTC (permalink / raw) To: Marc-André Lureau Cc: Eric Blake, Laszlo Ersek, qemu-devel, Wen Congyang, anderson, peterx On Fri, Jun 02, 2017 at 09:46:35AM +0000, Marc-André Lureau wrote: > Hi > > On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: > > > On 06/01/2017 01:06 PM, Laszlo Ersek wrote: > > > On 06/01/17 15:03, Marc-André Lureau wrote: > > >> One way or another, the guest could communicate various dump info (via > > >> guest agent or vmcoreinfo device) and populate that structure. It can > > >> then be used to augment the dump with various details, as done in the > > >> following patch. > > >> > > >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > >> --- > > >> include/sysemu/dump-info.h | 18 ++++++++++++++++++ > > >> dump.c | 3 +++ > > >> 2 files changed, 21 insertions(+) > > >> create mode 100644 include/sysemu/dump-info.h > > >> > > >> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h > > >> new file mode 100644 > > >> index 0000000000..d2378e15e2 > > >> --- /dev/null > > >> +++ b/include/sysemu/dump-info.h > > >> @@ -0,0 +1,18 @@ > > >> +#ifndef DUMP_INFO_H > > >> +#define DUMP_INFO_H > > > > >> > > > > > > Can you please spell out, in the commit message, the reason for > > > introducing a new header file? (I suspect your reason, but it should be > > > documented explicitly.) > > > > Also, should you have a copyright header in the new file? And does > > MAINTAINERS cover it? > > > > None of the dump support is covered. Based on commit history, I can suggest > Wen Congyang, as original author. > Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if > he is still contributing?). Laszlo has done significant changes and reviews > too. I can also propose myself to help with reviews. > > Wen or Laszla, do you want to be the main maintainer? What about Peter Xu (CC'ed)? He'll have to state whether he has time and interest, but I see he's contributed quite a bit to dump.c. Thanks, drew ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure 2017-06-05 7:24 ` Andrew Jones @ 2017-06-06 2:11 ` Peter Xu 0 siblings, 0 replies; 21+ messages in thread From: Peter Xu @ 2017-06-06 2:11 UTC (permalink / raw) To: Andrew Jones Cc: Marc-André Lureau, Eric Blake, Laszlo Ersek, qemu-devel, Wen Congyang, anderson On Mon, Jun 05, 2017 at 09:24:38AM +0200, Andrew Jones wrote: > On Fri, Jun 02, 2017 at 09:46:35AM +0000, Marc-André Lureau wrote: > > Hi > > > > On Thu, Jun 1, 2017 at 10:19 PM Eric Blake <eblake@redhat.com> wrote: > > > > > On 06/01/2017 01:06 PM, Laszlo Ersek wrote: > > > > On 06/01/17 15:03, Marc-André Lureau wrote: > > > >> One way or another, the guest could communicate various dump info (via > > > >> guest agent or vmcoreinfo device) and populate that structure. It can > > > >> then be used to augment the dump with various details, as done in the > > > >> following patch. > > > >> > > > >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > > >> --- > > > >> include/sysemu/dump-info.h | 18 ++++++++++++++++++ > > > >> dump.c | 3 +++ > > > >> 2 files changed, 21 insertions(+) > > > >> create mode 100644 include/sysemu/dump-info.h > > > >> > > > >> diff --git a/include/sysemu/dump-info.h b/include/sysemu/dump-info.h > > > >> new file mode 100644 > > > >> index 0000000000..d2378e15e2 > > > >> --- /dev/null > > > >> +++ b/include/sysemu/dump-info.h > > > >> @@ -0,0 +1,18 @@ > > > >> +#ifndef DUMP_INFO_H > > > >> +#define DUMP_INFO_H > > > > > > >> > > > > > > > > Can you please spell out, in the commit message, the reason for > > > > introducing a new header file? (I suspect your reason, but it should be > > > > documented explicitly.) > > > > > > Also, should you have a copyright header in the new file? And does > > > MAINTAINERS cover it? > > > > > > > None of the dump support is covered. Based on commit history, I can suggest > > Wen Congyang, as original author. > > Sadly, Qiao Nuohan cannot be reached with his mail today (anyone knows if > > he is still contributing?). Laszlo has done significant changes and reviews > > too. I can also propose myself to help with reviews. > > > > Wen or Laszla, do you want to be the main maintainer? > > What about Peter Xu (CC'ed)? He'll have to state whether he has time and > interest, but I see he's contributed quite a bit to dump.c. I believe those were the first commits of mine when working on detached dump, after that I didn't really work on it anymore. So I guess I may not be the best candidate. Also, I admit my bandwidth is limited as well recently. Thanks Drew for mentioning me anyway. :-) -- Peter Xu ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure Marc-André Lureau @ 2017-06-01 13:03 ` Marc-André Lureau 2017-06-01 18:38 ` Laszlo Ersek 2017-06-05 8:04 ` Andrew Jones 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo Marc-André Lureau ` (2 subsequent siblings) 4 siblings, 2 replies; 21+ messages in thread From: Marc-André Lureau @ 2017-06-01 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: lersek, qiaonuohan, anderson, Marc-André Lureau Read vmcoreinfo note from guest memory when dump_info provides the address, and write it as an ELF note in the dump. NUMBER(phys_base) in vmcoreinfo has only been recently introduced in Linux 4.10 ("kexec: export the value of phys_base instead of symbol address"). To accomadate for older kernels, modify the vmcoreinfo to add the new fields and help newer crash that will use it. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- include/sysemu/dump.h | 2 + dump.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h index 2672a15f8b..b8a7a1e41d 100644 --- a/include/sysemu/dump.h +++ b/include/sysemu/dump.h @@ -192,6 +192,8 @@ typedef struct DumpState { * this could be used to calculate * how much work we have * finished. */ + uint8_t *vmcoreinfo; + size_t vmcoreinfo_size; } DumpState; uint16_t cpu_to_dump16(DumpState *s, uint16_t val); diff --git a/dump.c b/dump.c index bdf3270f02..6911ffad8b 100644 --- a/dump.c +++ b/dump.c @@ -27,6 +27,7 @@ #include "qapi/qmp/qerror.h" #include "qmp-commands.h" #include "qapi-event.h" +#include "qemu/error-report.h" #include <zlib.h> #ifdef CONFIG_LZO @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) qemu_mutex_unlock_iothread(); } } + g_free(s->vmcoreinfo); + s->vmcoreinfo = NULL; return 0; } @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) return cpu->cpu_index + 1; } +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState *s, + Error **errp) +{ + int ret; + + if (s->vmcoreinfo) { + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); + if (ret < 0) { + error_setg(errp, "dump: failed to write vmcoreinfo"); + } + } +} + static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, Error **errp) { @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, return; } } + + write_vmcoreinfo_note(f, s, errp); } static void write_elf32_note(DumpState *s, Error **errp) @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, return; } } + + write_vmcoreinfo_note(f, s, errp); } static void write_elf_section(DumpState *s, int type, Error **errp) @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) return 0; } +static void get_note_sizes(DumpState *s, const void *note, + uint64_t *note_head_size, + uint64_t *name_size, + uint64_t *desc_size) +{ + uint64_t note_head_sz; + uint64_t name_sz; + uint64_t desc_sz; + + if (s->dump_info.d_class == ELFCLASS64) { + const Elf64_Nhdr *hdr = note; + note_head_sz = sizeof(Elf64_Nhdr); + name_sz = hdr->n_namesz; + desc_sz = hdr->n_descsz; + } else { + const Elf32_Nhdr *hdr = note; + note_head_sz = sizeof(Elf32_Nhdr); + name_sz = hdr->n_namesz; + desc_sz = hdr->n_descsz; + } + + if (note_head_size) { + *note_head_size = note_head_sz; + } + if (name_size) { + *name_size = name_sz; + } + if (desc_size) { + *desc_size = desc_sz; + } +} + +static void set_note_desc_size(DumpState *s, void *note, + uint64_t desc_size) +{ + if (s->dump_info.d_class == ELFCLASS64) { + Elf64_Nhdr *hdr = note; + hdr->n_descsz = desc_size; + } else { + Elf32_Nhdr *hdr = note; + hdr->n_descsz = desc_size; + } +} + /* write common header, sub header and elf note to vmcore */ static void create_header32(DumpState *s, Error **errp) { @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) return total; } +static void vmcoreinfo_add_phys_base(DumpState *s) +{ + uint64_t size, note_head_size, name_size; + char **lines, *physbase = NULL; + uint8_t *newvmci, *vmci; + size_t i; + + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, &size); + note_head_size = ((note_head_size + 3) / 4) * 4; + name_size = ((name_size + 3) / 4) * 4; + vmci = s->vmcoreinfo + note_head_size + name_size; + *(vmci + size) = '\0'; + lines = g_strsplit((char *)vmci, "\n", -1); + for (i = 0; lines[i]; i++) { + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { + goto end; + } + } + + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", + s->dump_info.phys_base); + s->vmcoreinfo_size = + ((note_head_size + name_size + size + strlen(physbase) + 3) / 4) * 4; + + newvmci = g_malloc(s->vmcoreinfo_size); + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - 1); + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, + strlen(physbase) + 1); + g_free(s->vmcoreinfo); + s->vmcoreinfo = newvmci; + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); + +end: + g_strfreev(lines); +} + static void dump_init(DumpState *s, int fd, bool has_format, DumpGuestMemoryFormat format, bool paging, bool has_filter, int64_t begin, int64_t length, Error **errp) @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool has_format, goto cleanup; } + if (dump_info.has_phys_base) { + s->dump_info.phys_base = dump_info.phys_base; + } + if (dump_info.vmcoreinfo) { + uint64_t addr, size, note_head_size, name_size, desc_size; + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" PRIx64, + &addr, &size); + if (count != 2) { + /* non fatal error */ + error_report("Failed to parse vmcoreinfo"); + } else { + assert(!s->vmcoreinfo); + s->vmcoreinfo = g_malloc(size); + cpu_physical_memory_read(addr, s->vmcoreinfo, size); + + get_note_sizes(s, s->vmcoreinfo, + ¬e_head_size, &name_size, &desc_size); + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + + (name_size + 3) / 4 + + (desc_size + 3) / 4) * 4; + if (s->vmcoreinfo_size > size) { + error_report("Invalid vmcoreinfo header, size mismatch"); + g_free(s->vmcoreinfo); + s->vmcoreinfo = NULL; + } else { + if (dump_info.has_phys_base) { + vmcoreinfo_add_phys_base(s); + } + s->note_size += s->vmcoreinfo_size; + } + } + } + /* get memory mapping */ if (paging) { qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); -- 2.13.0.91.g00982b8dd ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note Marc-André Lureau @ 2017-06-01 18:38 ` Laszlo Ersek 2017-06-02 11:13 ` Marc-André Lureau 2017-06-05 8:04 ` Andrew Jones 1 sibling, 1 reply; 21+ messages in thread From: Laszlo Ersek @ 2017-06-01 18:38 UTC (permalink / raw) To: Marc-André Lureau, qemu-devel; +Cc: anderson, qiaonuohan On 06/01/17 15:03, Marc-André Lureau wrote: > Read vmcoreinfo note from guest memory when dump_info provides the > address, and write it as an ELF note in the dump. > > NUMBER(phys_base) in vmcoreinfo has only been recently introduced in > Linux 4.10 ("kexec: export the value of phys_base instead of symbol > address"). To accomadate for older kernels, modify the vmcoreinfo to add > the new fields and help newer crash that will use it. I think here you mean modify the DumpState structure rather than modify the vmcoreinfo > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/sysemu/dump.h | 2 + > dump.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 135 insertions(+) > > diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > index 2672a15f8b..b8a7a1e41d 100644 > --- a/include/sysemu/dump.h > +++ b/include/sysemu/dump.h > @@ -192,6 +192,8 @@ typedef struct DumpState { > * this could be used to calculate > * how much work we have > * finished. */ > + uint8_t *vmcoreinfo; Can you document that this is an ELF note? > + size_t vmcoreinfo_size; > } DumpState; > > uint16_t cpu_to_dump16(DumpState *s, uint16_t val); > diff --git a/dump.c b/dump.c > index bdf3270f02..6911ffad8b 100644 > --- a/dump.c > +++ b/dump.c > @@ -27,6 +27,7 @@ > #include "qapi/qmp/qerror.h" > #include "qmp-commands.h" > #include "qapi-event.h" > +#include "qemu/error-report.h" > > #include <zlib.h> > #ifdef CONFIG_LZO > @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) > qemu_mutex_unlock_iothread(); > } > } > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = NULL; > > return 0; > } I vaguely feel that this should be moved in front of resuming VM execution. I don't have a strong reason, just consistency with the rest of the cleanup. > @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) > return cpu->cpu_index + 1; > } > > +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState *s, > + Error **errp) > +{ > + int ret; > + > + if (s->vmcoreinfo) { > + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); > + if (ret < 0) { > + error_setg(errp, "dump: failed to write vmcoreinfo"); > + } > + } > +} > + > static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > Error **errp) > { > @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > return; > } > } > + > + write_vmcoreinfo_note(f, s, errp); > } > > static void write_elf32_note(DumpState *s, Error **errp) > @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, > return; > } > } > + > + write_vmcoreinfo_note(f, s, errp); > } > > static void write_elf_section(DumpState *s, int type, Error **errp) > @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) > return 0; > } > > +static void get_note_sizes(DumpState *s, const void *note, > + uint64_t *note_head_size, > + uint64_t *name_size, > + uint64_t *desc_size) > +{ I'm not happy that I have to reverse engineer what this function does. Please document it in the commit message and/or in a function-level comment, especially regarding the actual permitted types of *note. Very similar functionality exists in "target/i386/arch_dump.c" already. Is there a (remote) possibility to extract / refactor / share code? > + uint64_t note_head_sz; > + uint64_t name_sz; > + uint64_t desc_sz; > + > + if (s->dump_info.d_class == ELFCLASS64) { Ugh, this is extremely confusing. This refers to DumpState.dump_info, which has type ArchDumpInfo. But in the previous patch we also introduce a global "dump_info" variable, of type DumpInfo. Worse, ArchDumpInfo already has a field called "phys_base" (comment: "The target's physmem base"), and it's even filled in in "target/arm/arch_dump.c", function cpu_get_dump_info(): /* Take a best guess at the phys_base. If we get it wrong then crash * will need '--machdep phys_offset=<phys-offset>' added to its command * line, which isn't any worse than assuming we can use zero, but being * wrong. This is the same algorithm the crash utility uses when * attempting to guess as it loads non-dumpfile formatted files. */ Looks like we already have some overlapping code / functionality for this, for the ARM target? Sorry, I'm totally lost. It must have been years since I last looked at this code. I guess my comments might not make much sense, even. Please post a version 3, with as detailed as possible commit messages, explaining your entire thought process, the data flow, how this feature fits into the old code, and all the modifications. Personally at least, I need a complete re-introduction to this, to make heads or tails of your changes. I mean I certainly don't *insist* on reviewing this code, it's just that if you'd like me to comment on it, you'll have to document all the investigative work you've done before / while writing it. Thanks Laszlo > + const Elf64_Nhdr *hdr = note; > + note_head_sz = sizeof(Elf64_Nhdr); > + name_sz = hdr->n_namesz; > + desc_sz = hdr->n_descsz; > + } else { > + const Elf32_Nhdr *hdr = note; > + note_head_sz = sizeof(Elf32_Nhdr); > + name_sz = hdr->n_namesz; > + desc_sz = hdr->n_descsz; > + } > + > + if (note_head_size) { > + *note_head_size = note_head_sz; > + } > + if (name_size) { > + *name_size = name_sz; > + } > + if (desc_size) { > + *desc_size = desc_sz; > + } > +} > + > +static void set_note_desc_size(DumpState *s, void *note, > + uint64_t desc_size) > +{ > + if (s->dump_info.d_class == ELFCLASS64) { > + Elf64_Nhdr *hdr = note; > + hdr->n_descsz = desc_size; > + } else { > + Elf32_Nhdr *hdr = note; > + hdr->n_descsz = desc_size; > + } > +} > + > /* write common header, sub header and elf note to vmcore */ > static void create_header32(DumpState *s, Error **errp) > { > @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) > return total; > } > > +static void vmcoreinfo_add_phys_base(DumpState *s) > +{ > + uint64_t size, note_head_size, name_size; > + char **lines, *physbase = NULL; > + uint8_t *newvmci, *vmci; > + size_t i; > + > + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, &size); > + note_head_size = ((note_head_size + 3) / 4) * 4; > + name_size = ((name_size + 3) / 4) * 4; > + vmci = s->vmcoreinfo + note_head_size + name_size; > + *(vmci + size) = '\0'; > + lines = g_strsplit((char *)vmci, "\n", -1); > + for (i = 0; lines[i]; i++) { > + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { > + goto end; > + } > + } > + > + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", > + s->dump_info.phys_base); > + s->vmcoreinfo_size = > + ((note_head_size + name_size + size + strlen(physbase) + 3) / 4) * 4; > + > + newvmci = g_malloc(s->vmcoreinfo_size); > + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - 1); > + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, > + strlen(physbase) + 1); > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = newvmci; > + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); > + > +end: > + g_strfreev(lines); > +} > + > static void dump_init(DumpState *s, int fd, bool has_format, > DumpGuestMemoryFormat format, bool paging, bool has_filter, > int64_t begin, int64_t length, Error **errp) > @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool has_format, > goto cleanup; > } > > + if (dump_info.has_phys_base) { > + s->dump_info.phys_base = dump_info.phys_base; > + } > + if (dump_info.vmcoreinfo) { > + uint64_t addr, size, note_head_size, name_size, desc_size; > + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" PRIx64, > + &addr, &size); > + if (count != 2) { > + /* non fatal error */ > + error_report("Failed to parse vmcoreinfo"); > + } else { > + assert(!s->vmcoreinfo); > + s->vmcoreinfo = g_malloc(size); > + cpu_physical_memory_read(addr, s->vmcoreinfo, size); > + > + get_note_sizes(s, s->vmcoreinfo, > + ¬e_head_size, &name_size, &desc_size); > + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + > + (name_size + 3) / 4 + > + (desc_size + 3) / 4) * 4; > + if (s->vmcoreinfo_size > size) { > + error_report("Invalid vmcoreinfo header, size mismatch"); > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = NULL; > + } else { > + if (dump_info.has_phys_base) { > + vmcoreinfo_add_phys_base(s); > + } > + s->note_size += s->vmcoreinfo_size; > + } > + } > + } > + > /* get memory mapping */ > if (paging) { > qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-01 18:38 ` Laszlo Ersek @ 2017-06-02 11:13 ` Marc-André Lureau 2017-06-06 14:21 ` Laszlo Ersek 0 siblings, 1 reply; 21+ messages in thread From: Marc-André Lureau @ 2017-06-02 11:13 UTC (permalink / raw) To: Laszlo Ersek, qemu-devel; +Cc: qiaonuohan, anderson HI On Thu, Jun 1, 2017 at 10:38 PM Laszlo Ersek <lersek@redhat.com> wrote: > On 06/01/17 15:03, Marc-André Lureau wrote: > > Read vmcoreinfo note from guest memory when dump_info provides the > > address, and write it as an ELF note in the dump. > > > > NUMBER(phys_base) in vmcoreinfo has only been recently introduced in > > Linux 4.10 ("kexec: export the value of phys_base instead of symbol > > address"). To accomadate for older kernels, modify the vmcoreinfo to add > > the new fields and help newer crash that will use it. > > I think here you mean > > modify the DumpState structure > > rather than > > modify the vmcoreinfo > No it's actually the content of the vmcoreinfo that is modified. > > > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > --- > > include/sysemu/dump.h | 2 + > > dump.c | 133 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 135 insertions(+) > > > > diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > > index 2672a15f8b..b8a7a1e41d 100644 > > --- a/include/sysemu/dump.h > > +++ b/include/sysemu/dump.h > > @@ -192,6 +192,8 @@ typedef struct DumpState { > > * this could be used to calculate > > * how much work we have > > * finished. */ > > + uint8_t *vmcoreinfo; > > Can you document that this is an ELF note? > ok > > > + size_t vmcoreinfo_size; > > } DumpState; > > > > uint16_t cpu_to_dump16(DumpState *s, uint16_t val); > > diff --git a/dump.c b/dump.c > > index bdf3270f02..6911ffad8b 100644 > > --- a/dump.c > > +++ b/dump.c > > @@ -27,6 +27,7 @@ > > #include "qapi/qmp/qerror.h" > > #include "qmp-commands.h" > > #include "qapi-event.h" > > +#include "qemu/error-report.h" > > > > #include <zlib.h> > > #ifdef CONFIG_LZO > > @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) > > qemu_mutex_unlock_iothread(); > > } > > } > > + g_free(s->vmcoreinfo); > > + s->vmcoreinfo = NULL; > > > > return 0; > > } > > I vaguely feel that this should be moved in front of resuming VM > execution. I don't have a strong reason, just consistency with the rest > of the cleanup. > You mean before vm_start(), ok that makes sense (although I doubt dump can be reentered as long as the status isn't changed). > @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) > > return cpu->cpu_index + 1; > > } > > > > +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState *s, > > + Error **errp) > > +{ > > + int ret; > > + > > + if (s->vmcoreinfo) { > > + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); > > + if (ret < 0) { > > + error_setg(errp, "dump: failed to write vmcoreinfo"); > > + } > > + } > > +} > > + > > static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > > Error **errp) > > { > > @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction > f, DumpState *s, > > return; > > } > > } > > + > > + write_vmcoreinfo_note(f, s, errp); > > } > > > > static void write_elf32_note(DumpState *s, Error **errp) > > @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction > f, DumpState *s, > > return; > > } > > } > > + > > + write_vmcoreinfo_note(f, s, errp); > > } > > > > static void write_elf_section(DumpState *s, int type, Error **errp) > > @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t > size, void *opaque) > > return 0; > > } > > > > +static void get_note_sizes(DumpState *s, const void *note, > > + uint64_t *note_head_size, > > + uint64_t *name_size, > > + uint64_t *desc_size) > > +{ > > I'm not happy that I have to reverse engineer what this function does. > Please document it in the commit message and/or in a function-level > comment, especially regarding the actual permitted types of *note. > > ok, would that help?: /* * This function retrieves various sizes from an elf header. * * @note has to be a valid ELF note. The return sizes are unmodified * (not padded or rounded up to be multiple of 4). */ > Very similar functionality exists in "target/i386/arch_dump.c" already. > Is there a (remote) possibility to extract / refactor / share code? > > Although the 2 functions share a few similarities, since they compute various sizes based on elf class, they are actually quite different. I don't see an easy way to refactor in a common function that would make sense. > + uint64_t note_head_sz; > > + uint64_t name_sz; > > + uint64_t desc_sz; > > + > > + if (s->dump_info.d_class == ELFCLASS64) { > > Ugh, this is extremely confusing. This refers to DumpState.dump_info, > which has type ArchDumpInfo. But in the previous patch we also introduce > a global "dump_info" variable, of type DumpInfo. > Worse, ArchDumpInfo already has a field called "phys_base" (comment: > "The target's physmem base"), and it's even filled in in > "target/arm/arch_dump.c", function cpu_get_dump_info(): > > /* Take a best guess at the phys_base. If we get it wrong then crash > * will need '--machdep phys_offset=<phys-offset>' added to its command > * line, which isn't any worse than assuming we can use zero, but being > * wrong. This is the same algorithm the crash utility uses when > * attempting to guess as it loads non-dumpfile formatted files. > */ > > Looks like we already have some overlapping code / functionality for > this, for the ARM target? > > Sorry, I'm totally lost. It must have been years since I last looked at > this code. I guess my comments might not make much sense, even. > > I see it can be confusing but the explanation is quite simple. DumpInfo is global, and may be populated (hopefully accurately) by various means. DumpState and ArchDumpInfo is populated when starting a dump. cpu_get_dump_info() make a best guess at phys_base on arm. After this call, dump_init() will override phys_base with the global dump_info.phys_base which should be correct if it exists. Do you have a suggestion on how to make this clearer beside adding some comments? Should we rename DumpState.dump_info to DumpState_arch_dump_info to avoid the confusion? > Please post a version 3, with as detailed as possible commit messages, > explaining your entire thought process, the data flow, how this feature > fits into the old code, and all the modifications. Personally at least, > I need a complete re-introduction to this, to make heads or tails of > your changes. > > I mean I certainly don't *insist* on reviewing this code, it's just that > if you'd like me to comment on it, you'll have to document all the > investigative work you've done before / while writing it. > The flow is as follow: - by some means (guest agent, dedicated device etc), the guest populates the DumpInfo structure with various details, such as phys_base and the content of /sys/kernel/vmcoreinfo - during dump, if dump_info.phys_base has been populated, it takes precedence over previously guessed value - during dump, if dump_info.vmcoreinfo is populated, parse the phys address and size of the vmcoreinfo ELF note - check the ELF note header and size. If invalid, don't dump it. The size is 4-byte aligned. - vmcoreinfo_add_phys_base() will check if NUMBER(phys_base)= is present, if not, modify the note to add it. - modify s->note_size to account for vmcoreinfo note size - write_vmcoreinfo_note() when writing all the populated notes. Please ask any question to help you clarify this patch. thanks > > > + const Elf64_Nhdr *hdr = note; > > + note_head_sz = sizeof(Elf64_Nhdr); > > + name_sz = hdr->n_namesz; > > + desc_sz = hdr->n_descsz; > > + } else { > > + const Elf32_Nhdr *hdr = note; > > + note_head_sz = sizeof(Elf32_Nhdr); > > + name_sz = hdr->n_namesz; > > + desc_sz = hdr->n_descsz; > > + } > > + > > + if (note_head_size) { > > + *note_head_size = note_head_sz; > > + } > > + if (name_size) { > > + *name_size = name_sz; > > + } > > + if (desc_size) { > > + *desc_size = desc_sz; > > + } > > +} > > + > > +static void set_note_desc_size(DumpState *s, void *note, > > + uint64_t desc_size) > > +{ > > + if (s->dump_info.d_class == ELFCLASS64) { > > + Elf64_Nhdr *hdr = note; > > + hdr->n_descsz = desc_size; > > + } else { > > + Elf32_Nhdr *hdr = note; > > + hdr->n_descsz = desc_size; > > + } > > +} > > + > > /* write common header, sub header and elf note to vmcore */ > > static void create_header32(DumpState *s, Error **errp) > > { > > @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) > > return total; > > } > > > > +static void vmcoreinfo_add_phys_base(DumpState *s) > > +{ > > + uint64_t size, note_head_size, name_size; > > + char **lines, *physbase = NULL; > > + uint8_t *newvmci, *vmci; > > + size_t i; > > + > > + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, > &size); > > + note_head_size = ((note_head_size + 3) / 4) * 4; > > + name_size = ((name_size + 3) / 4) * 4; > > + vmci = s->vmcoreinfo + note_head_size + name_size; > > + *(vmci + size) = '\0'; > > + lines = g_strsplit((char *)vmci, "\n", -1); > > + for (i = 0; lines[i]; i++) { > > + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { > > + goto end; > > + } > > + } > > + > > + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", > > + s->dump_info.phys_base); > > + s->vmcoreinfo_size = > > + ((note_head_size + name_size + size + strlen(physbase) + 3) / > 4) * 4; > > + > > + newvmci = g_malloc(s->vmcoreinfo_size); > > + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - > 1); > > + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, > > + strlen(physbase) + 1); > > + g_free(s->vmcoreinfo); > > + s->vmcoreinfo = newvmci; > > + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); > > + > > +end: > > + g_strfreev(lines); > > +} > > + > > static void dump_init(DumpState *s, int fd, bool has_format, > > DumpGuestMemoryFormat format, bool paging, bool > has_filter, > > int64_t begin, int64_t length, Error **errp) > > @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool > has_format, > > goto cleanup; > > } > > > > + if (dump_info.has_phys_base) { > > + s->dump_info.phys_base = dump_info.phys_base; > > + } > > + if (dump_info.vmcoreinfo) { > > + uint64_t addr, size, note_head_size, name_size, desc_size; > > + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" PRIx64, > > + &addr, &size); > > + if (count != 2) { > > + /* non fatal error */ > > + error_report("Failed to parse vmcoreinfo"); > > + } else { > > + assert(!s->vmcoreinfo); > > + s->vmcoreinfo = g_malloc(size); > > + cpu_physical_memory_read(addr, s->vmcoreinfo, size); > > + > > + get_note_sizes(s, s->vmcoreinfo, > > + ¬e_head_size, &name_size, &desc_size); > > + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + > > + (name_size + 3) / 4 + > > + (desc_size + 3) / 4) * 4; > > + if (s->vmcoreinfo_size > size) { > > + error_report("Invalid vmcoreinfo header, size > mismatch"); > > + g_free(s->vmcoreinfo); > > + s->vmcoreinfo = NULL; > > + } else { > > + if (dump_info.has_phys_base) { > > + vmcoreinfo_add_phys_base(s); > > + } > > + s->note_size += s->vmcoreinfo_size; > > + } > > + } > > + } > > + > > /* get memory mapping */ > > if (paging) { > > qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, > &err); > > > > > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-02 11:13 ` Marc-André Lureau @ 2017-06-06 14:21 ` Laszlo Ersek 2017-06-29 12:47 ` Marc-André Lureau 0 siblings, 1 reply; 21+ messages in thread From: Laszlo Ersek @ 2017-06-06 14:21 UTC (permalink / raw) To: Marc-André Lureau, qemu-devel; +Cc: qiaonuohan, anderson, Drew Jones Adding Drew On 06/02/17 13:13, Marc-André Lureau wrote: > HI > > On Thu, Jun 1, 2017 at 10:38 PM Laszlo Ersek <lersek@redhat.com> wrote: > >> On 06/01/17 15:03, Marc-André Lureau wrote: >>> Read vmcoreinfo note from guest memory when dump_info provides the >>> address, and write it as an ELF note in the dump. >>> >>> NUMBER(phys_base) in vmcoreinfo has only been recently introduced in >>> Linux 4.10 ("kexec: export the value of phys_base instead of symbol >>> address"). I think it would be best to name commit 401721ecd1dc by hash too. > To accomadate for older kernels, modify the vmcoreinfo to add s/accomadate/accommodate/ >>> the new fields and help newer crash that will use it. >> >> I think here you mean >> >> modify the DumpState structure >> >> rather than >> >> modify the vmcoreinfo >> > > No it's actually the content of the vmcoreinfo that is modified. OK: *what* is vmcoreinfo? Is that a structure in some program? Is it the file "/sys/kernel/vmcoreinfo"? The only reference to "vmcoreinfo" that I see in current QEMU is the "offset_vmcoreinfo" / "size_vmcoreinfo" fields in "include/sysemu/dump.h", in the KdumpSubHeader32 and KdumpSubHeader64 fields. They are never populated. I guess I would understand your above sentence ("to accommodate older kernels...") if I knew a thing about "vmcoreinfo". I checked the kernel commit, and it looks like a new field is added to some kernel structure (or, maybe, the type of a field is changed). Are you saying that, in QEMU, when we dump older kernels, we're going to synthesize this field (or field type) manually? If so: what from? >>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >>> --- >>> include/sysemu/dump.h | 2 + >>> dump.c | 133 >> ++++++++++++++++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 135 insertions(+) >>> >>> diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h >>> index 2672a15f8b..b8a7a1e41d 100644 >>> --- a/include/sysemu/dump.h >>> +++ b/include/sysemu/dump.h >>> @@ -192,6 +192,8 @@ typedef struct DumpState { >>> * this could be used to calculate >>> * how much work we have >>> * finished. */ >>> + uint8_t *vmcoreinfo; >> >> Can you document that this is an ELF note? >> > > ok > > >> >>> + size_t vmcoreinfo_size; >>> } DumpState; >>> >>> uint16_t cpu_to_dump16(DumpState *s, uint16_t val); >>> diff --git a/dump.c b/dump.c >>> index bdf3270f02..6911ffad8b 100644 >>> --- a/dump.c >>> +++ b/dump.c >>> @@ -27,6 +27,7 @@ >>> #include "qapi/qmp/qerror.h" >>> #include "qmp-commands.h" >>> #include "qapi-event.h" >>> +#include "qemu/error-report.h" >>> >>> #include <zlib.h> >>> #ifdef CONFIG_LZO >>> @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) >>> qemu_mutex_unlock_iothread(); >>> } >>> } >>> + g_free(s->vmcoreinfo); >>> + s->vmcoreinfo = NULL; >>> >>> return 0; >>> } >> >> I vaguely feel that this should be moved in front of resuming VM >> execution. I don't have a strong reason, just consistency with the rest >> of the cleanup. >> > > You mean before vm_start(), ok that makes sense (although I doubt dump can > be reentered as long as the status isn't changed). > >> @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) >>> return cpu->cpu_index + 1; >>> } >>> >>> +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState *s, >>> + Error **errp) >>> +{ >>> + int ret; >>> + >>> + if (s->vmcoreinfo) { >>> + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); >>> + if (ret < 0) { >>> + error_setg(errp, "dump: failed to write vmcoreinfo"); >>> + } >>> + } >>> +} >>> + >>> static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, >>> Error **errp) >>> { >>> @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction >> f, DumpState *s, >>> return; >>> } >>> } >>> + >>> + write_vmcoreinfo_note(f, s, errp); >>> } >>> >>> static void write_elf32_note(DumpState *s, Error **errp) >>> @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction >> f, DumpState *s, >>> return; >>> } >>> } >>> + >>> + write_vmcoreinfo_note(f, s, errp); >>> } >>> >>> static void write_elf_section(DumpState *s, int type, Error **errp) >>> @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t >> size, void *opaque) >>> return 0; >>> } >>> >>> +static void get_note_sizes(DumpState *s, const void *note, >>> + uint64_t *note_head_size, >>> + uint64_t *name_size, >>> + uint64_t *desc_size) >>> +{ >> >> I'm not happy that I have to reverse engineer what this function does. >> Please document it in the commit message and/or in a function-level >> comment, especially regarding the actual permitted types of *note. >> >> > ok, would that help?: > /* > * This function retrieves various sizes from an elf header. > * > * @note has to be a valid ELF note. The return sizes are unmodified > * (not padded or rounded up to be multiple of 4). > */ Sounds good, thanks. > >> Very similar functionality exists in "target/i386/arch_dump.c" already. >> Is there a (remote) possibility to extract / refactor / share code? >> >> > Although the 2 functions share a few similarities, since they compute > various sizes based on elf class, they are actually quite different. I > don't see an easy way to refactor in a common function that would make > sense. OK. > >> + uint64_t note_head_sz; >>> + uint64_t name_sz; >>> + uint64_t desc_sz; >>> + >>> + if (s->dump_info.d_class == ELFCLASS64) { >> >> Ugh, this is extremely confusing. This refers to DumpState.dump_info, >> which has type ArchDumpInfo. But in the previous patch we also introduce >> a global "dump_info" variable, of type DumpInfo. >> > >> Worse, ArchDumpInfo already has a field called "phys_base" (comment: >> "The target's physmem base"), and it's even filled in in >> "target/arm/arch_dump.c", function cpu_get_dump_info(): >> >> /* Take a best guess at the phys_base. If we get it wrong then crash >> * will need '--machdep phys_offset=<phys-offset>' added to its command >> * line, which isn't any worse than assuming we can use zero, but being >> * wrong. This is the same algorithm the crash utility uses when >> * attempting to guess as it loads non-dumpfile formatted files. >> */ >> >> Looks like we already have some overlapping code / functionality for >> this, for the ARM target? >> >> Sorry, I'm totally lost. It must have been years since I last looked at >> this code. I guess my comments might not make much sense, even. >> >> > I see it can be confusing but the explanation is quite simple. > > DumpInfo is global, and may be populated (hopefully accurately) by various > means. More precisely, the *DumpState* (not DumpInfo) structure is supposed to carry information over a single invocation of the dump command. It happens to be the case that we also have a single global variable of that type, so that the monitor commands can find it (I guess?) when dump is launched into the background. (See, the fact that you mistyped "DumpState" as "DumpInfo" is the best evidence that this code is horribly confusing. That's not your fault at all, of course! But it's all the more important to write detailed commit messages and/or fix up some comments too.) Ahhh, wait, here you mean DumpInfo as introduced by *this* patch set (patch #1). In that sense, DumpInfo is global to the full lifetime of the guest. This is incredibly confusing. Please give "DumpInfo" and "dump_info" a much longer and better name. Like "VmcoreDetailsFromGuest", or "GuestReportedVmcoreDetails" or whatever. > > DumpState and ArchDumpInfo is populated when starting a dump. > cpu_get_dump_info() make a best guess at phys_base on arm. OK, I see that now, thanks. When dump_init() runs, "s" refers to "dump_state_global" (of type DumpState). And, we have dump_init() cpu_get_dump_info(&s->dump_info, ...) where "s->dump_info" is of type ArchDumpInfo. Alas, this field name conflicts badly (for human comprehension) with the "dump_info" global variable name introduced in patch #1 (see my gripe above). > After this call, dump_init() will override phys_base with the global > dump_info.phys_base which should be correct if it exists. (So this is not the current code, this is about what this patch does. OK.) > > Do you have a suggestion on how to make this clearer beside adding some > comments? > > Should we rename DumpState.dump_info to DumpState_arch_dump_info to avoid > the confusion? Yes, please do *all* of this. When information is overwritten with more exact info, or from a better source, or with info having higher priority, that should be documented in the code, in the commit message. And, the rename you suggest is also a good idea. Here's another piece I find confusing. In dump_init(), we have a comment saying: /* get dump info: endian, class and architecture. * If the target architecture is not supported, cpu_get_dump_info() will * return -1. */ ret = cpu_get_dump_info(&s->dump_info, &s->guest_phys_blocks); The comment (and the function name) suggest that cpu_get_dump_info() collects only three dump details (endianness, class, architecture), and that those depend on only on CPU state. This text goes back to initial dump commit 783e9b4826b9 ("introduce a new monitor command 'dump-guest-memory' to dump guest's memory", 2012-05-07). Today, this comment is stale. See the cpu_get_dump_info() implementations in: - target/s390x/arch_dump.c: the original comment holds. - target/ppc/arch_dump.c: the original comment holds. - target/i386/arch_dump.c: the function name does not match, because beyond CPU state, the memory map is consulted too - target/arm/arch_dump.c: the function name does not match, because in addition to CPU state, the memory map is consulted too. Also, the information collected goes beyond endianness / class / architecture, we populate "page_size" and "phys_base" too. These changes seem to be related to Drew's work from commit f1cd483004da ("qapi-schema: dump-guest-memory: Improve text", 2016-01-11) through commit ade0d0c0d3a0 ("target-arm: dump-guest-memory: add vfp notes for arm", 2016-01-11), inclusive. I think we should now remove the explicit references to "endian, class and architecture"; we should rather say "try to collect a bunch of crash & ELF related info from guest CPU state and physical memory map". >> Please post a version 3, with as detailed as possible commit messages, >> explaining your entire thought process, the data flow, how this feature >> fits into the old code, and all the modifications. Personally at least, >> I need a complete re-introduction to this, to make heads or tails of >> your changes. >> >> I mean I certainly don't *insist* on reviewing this code, it's just that >> if you'd like me to comment on it, you'll have to document all the >> investigative work you've done before / while writing it. >> > > > The flow is as follow: > > - by some means (guest agent, dedicated device etc), the guest populates > the DumpInfo structure with various details, such as phys_base and the > content of /sys/kernel/vmcoreinfo OK. > > - during dump, if dump_info.phys_base has been populated, it takes > precedence over previously guessed value Well, chronologically, the guessing occurs *after* the guest agent or dedicated device told QEMU the definitive phys_base. So I guess we could improve things a bit (for human comprehension) if cpu_get_dump_info() were told not to guess phys_base if we already have it from a better source. Or else, separate out the phys_base guessing from cpu_get_dump_info() as first step, and then use it as a fallback, if we have no better source of information. > > - during dump, if dump_info.vmcoreinfo is populated, parse the phys address > and size of the vmcoreinfo ELF note So you're saying that "/sys/kernel/vmcoreinfo" is already formatted as an ELF note? Ah, no. Apparently, "/sys/kernel/vmcoreinfo" is a text file which tells you where to read guest memory, to grab that ELF note. The "DumpInfo.vmcoreinfo" field should be documented much better. The comment currently says "the content of /sys/kernel/vmcoreinfo on Linux", which doesn't tell me anything at all, because I don't know what that file contains. > > - check the ELF note header and size. If invalid, don't dump it. The size > is 4-byte aligned. OK. > > - vmcoreinfo_add_phys_base() will check if NUMBER(phys_base)= is present, > if not, modify the note to add it. Wow!!! We're reaching a new height of confusion here. So you are saying that we actually have *three* sources for phys_base, namely (in order of increasing importance): (1) whatever cpu_get_dump_info() guesses, based on QEMU target arch (2) whatever the guest agent or guest ACPI device tells us, via DumpInfo.phys_base (3) whatever the guest kernel's own "vmcoreinfo" ELF note tells us, which we read directly from guest memory, using the address and size found in the guest's "/sys/kernel/vmcoreinfo" file. Furthermore, dependent on the output format that we produce for "crash" (ELF vs. kdump-compressed), we output either *one* piece of phys_base information in the dump, or *two*: * If the output format is ELF, we produce one "phys_base" instance, namely on the following call path: dump_process() create_vmcore() dump_begin() write_elf32_notes() | write_elf64_notes() write_vmcoreinfo_note() * If the output format is kdump-compressed, we produce *two* "phys_base" instances, namely on the following call tree: dump_process() create_kdump_vmcore() write_dump_header() create_header32() | create_header64() kh->phys_base = ... s->dump_info.phys_base ... write_buffer() <-- instance #1 written ... write_elf32_notes() | write_elf64_notes() write_vmcoreinfo_note() write_buffer() <-- instance #2 written This is because in the second case (= kdump-compressed format), the KdumpSubHeader32 / KdumpSubHeader64 structures already contain "phys_base" themselves. Worst of all, the two pieces of "phys_base" info that we provide can even conflict. Imagine the case when the guest kernel offers -- via method (3) -- its own vmcoreinfo ELF note, complete with "phys_base". That means we're going to write it out verbatim as instance #2. Now assume that via methods (1) or (2), we also collect a *different* phys_base value. This value will be written out as instance #1. And then "crash" will encounter conflicting "phys_base" values. ... Looking at patch #3, I'm getting *even more* confused (if that is possible). It seems that there you populate the "offset_vmcoreinfo" / "size_vmcoreinfo" fields that I mentioned near the top, and then write out a *third* instance of the "phys_base" information (as a complete vmcoreinfo note), right before you write out the exact same note anyway, marked as "instance #2" above. I think you may have missed that write_elf32_notes() and write_elf64_notes() are called *both* for ELF-formatted dumps *and* for kdump-compressed dumps. ... So, I don't think this is "quite simple" :( If my opinion matters, I'd like to see the following: (i) a clear definition, in documentation (commit message and code comments), of *priorities* between the phys_base sources. (ii) currently the priorities are not implemented correctly. See my example above: "s->dump_info.phys_base" is not refreshed from the kernel's own vmcoreinfo ELF note, if the latter also contains "phys_base". This is a problem because we pass both of these instances to "crash", if the output format is kdump-compressed. (iii) writing out the vmcoreinfo note in write_elf32_notes() / write_elf64_notes() is inappropriate, because this way the same code will be invoked for the kdump formats too, which is wrong. The right place to call write_vmcoreinfo_note() is near the end of dump_begin(), after the 32/64 bit branches end, where it will run only for the ELF format. (iv) I think it would be worth investigating whether we can produce *exactly one* phys_base hint for crash, regardless of the output format (ELF vs. kdump-compressed). Bullet (iii) above covers the ELF case -- in the ELF case, there really may not be a way around writing a full vmcoreinfo note. However, in the kdump case, we already write "phys_base" as part of KdumpSubHeader32 / KdumpSubHeader64 -- so how about dropping the third patch in the series, and synching the guest kernel's vmcoreinfo note (the phys_base field thereof) to "s->dump_info.phys_base" instead? This would also be helpful because it would make the "s->dump_info.phys_base" field the master location of phys_base: - highest priority: set from the guest kernel vmcoreinfo note, if that note exists, is valid, and provides the value. - mid priority: otherwise, set from the direct value reported by the guest agent or by the ACPI device - low priority: otherwise, let cpu_get_dump_info() guess it. Some more comments below (more superficial in nature): > > - modify s->note_size to account for vmcoreinfo note size > > - write_vmcoreinfo_note() when writing all the populated notes. > > Please ask any question to help you clarify this patch. > > thanks > > >> >>> + const Elf64_Nhdr *hdr = note; >>> + note_head_sz = sizeof(Elf64_Nhdr); >>> + name_sz = hdr->n_namesz; >>> + desc_sz = hdr->n_descsz; >>> + } else { >>> + const Elf32_Nhdr *hdr = note; >>> + note_head_sz = sizeof(Elf32_Nhdr); >>> + name_sz = hdr->n_namesz; >>> + desc_sz = hdr->n_descsz; >>> + } >>> + >>> + if (note_head_size) { >>> + *note_head_size = note_head_sz; >>> + } >>> + if (name_size) { >>> + *name_size = name_sz; >>> + } >>> + if (desc_size) { >>> + *desc_size = desc_sz; >>> + } >>> +} >>> + >>> +static void set_note_desc_size(DumpState *s, void *note, >>> + uint64_t desc_size) >>> +{ >>> + if (s->dump_info.d_class == ELFCLASS64) { >>> + Elf64_Nhdr *hdr = note; >>> + hdr->n_descsz = desc_size; >>> + } else { >>> + Elf32_Nhdr *hdr = note; >>> + hdr->n_descsz = desc_size; >>> + } >>> +} >>> + >>> /* write common header, sub header and elf note to vmcore */ >>> static void create_header32(DumpState *s, Error **errp) >>> { >>> @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) >>> return total; >>> } >>> >>> +static void vmcoreinfo_add_phys_base(DumpState *s) >>> +{ >>> + uint64_t size, note_head_size, name_size; >>> + char **lines, *physbase = NULL; >>> + uint8_t *newvmci, *vmci; >>> + size_t i; >>> + >>> + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, >> &size); >>> + note_head_size = ((note_head_size + 3) / 4) * 4; Can we replace these awkward roundings with ROUND_UP()? ROUND_UP() works only with powers of two (the more general version is QEMU_ALIGN_UP()), but here we're rounding up to a multiple of four, so ROUND_UP() should be fine. In fact I might even be calling for a separate patch that convers the rest of these roundings in the dump code to ROUND_UP. It's up to you. >>> + name_size = ((name_size + 3) / 4) * 4; >>> + vmci = s->vmcoreinfo + note_head_size + name_size; >>> + *(vmci + size) = '\0'; >>> + lines = g_strsplit((char *)vmci, "\n", -1); >>> + for (i = 0; lines[i]; i++) { >>> + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { >>> + goto end; >>> + } >>> + } >>> + >>> + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", >>> + s->dump_info.phys_base); >>> + s->vmcoreinfo_size = >>> + ((note_head_size + name_size + size + strlen(physbase) + 3) / >> 4) * 4; >>> + >>> + newvmci = g_malloc(s->vmcoreinfo_size); >>> + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - >> 1); >>> + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, >>> + strlen(physbase) + 1); >>> + g_free(s->vmcoreinfo); >>> + s->vmcoreinfo = newvmci; >>> + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); >>> + >>> +end: >>> + g_strfreev(lines); >>> +} >>> + >>> static void dump_init(DumpState *s, int fd, bool has_format, >>> DumpGuestMemoryFormat format, bool paging, bool >> has_filter, >>> int64_t begin, int64_t length, Error **errp) >>> @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool >> has_format, >>> goto cleanup; >>> } >>> >>> + if (dump_info.has_phys_base) { >>> + s->dump_info.phys_base = dump_info.phys_base; >>> + } >>> + if (dump_info.vmcoreinfo) { >>> + uint64_t addr, size, note_head_size, name_size, desc_size; >>> + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" PRIx64, >>> + &addr, &size); sscanf() must not be used with untrusted input (which guest kernel data definitely is). Please see: http://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html Unless assignment suppression was indicated by a '*', the result of the conversion shall be placed in the object pointed to by the first argument following the format argument that has not already received a conversion result if the conversion specification is introduced by %, [CX] [Option Start] or in the nth argument if introduced by the character sequence "%n$". [Option End] If this object does not have an appropriate type, or if the result of the conversion cannot be ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ represented in the space provided, the behavior is undefined. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You get undefined behavior if the guest kernel presents, say, the following in /sys/kernel/vmcoreinfo: 99999999999999999999999999999999999999999999999999999999999999999999 1 (As a side point, for the fscanf() family of functions, the conversion specifier macros aren't PRIxN-style but SCNxN style: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html ) So, instead of sscanf(), please call qemu_strtou64() twice in succession. The first invocation will tell you (if it succeeds, that is), where to start the second invocation. Thanks, Laszlo >>> + if (count != 2) { >>> + /* non fatal error */ >>> + error_report("Failed to parse vmcoreinfo"); >>> + } else { >>> + assert(!s->vmcoreinfo); >>> + s->vmcoreinfo = g_malloc(size); >>> + cpu_physical_memory_read(addr, s->vmcoreinfo, size); >>> + >>> + get_note_sizes(s, s->vmcoreinfo, >>> + ¬e_head_size, &name_size, &desc_size); >>> + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + >>> + (name_size + 3) / 4 + >>> + (desc_size + 3) / 4) * 4; >>> + if (s->vmcoreinfo_size > size) { >>> + error_report("Invalid vmcoreinfo header, size >> mismatch"); >>> + g_free(s->vmcoreinfo); >>> + s->vmcoreinfo = NULL; >>> + } else { >>> + if (dump_info.has_phys_base) { >>> + vmcoreinfo_add_phys_base(s); >>> + } >>> + s->note_size += s->vmcoreinfo_size; >>> + } >>> + } >>> + } >>> + >>> /* get memory mapping */ >>> if (paging) { >>> qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, >> &err); >>> >> >> >> -- > Marc-André Lureau > ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-06 14:21 ` Laszlo Ersek @ 2017-06-29 12:47 ` Marc-André Lureau 0 siblings, 0 replies; 21+ messages in thread From: Marc-André Lureau @ 2017-06-29 12:47 UTC (permalink / raw) To: Laszlo Ersek, qemu-devel; +Cc: qiaonuohan, anderson, Drew Jones Hi Laszlo, On Tue, Jun 6, 2017 at 4:21 PM Laszlo Ersek <lersek@redhat.com> wrote: > Adding Drew > > > On 06/02/17 13:13, Marc-André Lureau wrote: > > HI > > > > On Thu, Jun 1, 2017 at 10:38 PM Laszlo Ersek <lersek@redhat.com> wrote: > > > >> On 06/01/17 15:03, Marc-André Lureau wrote: > >>> Read vmcoreinfo note from guest memory when dump_info provides the > >>> address, and write it as an ELF note in the dump. > >>> > >>> NUMBER(phys_base) in vmcoreinfo has only been recently introduced in > >>> Linux 4.10 ("kexec: export the value of phys_base instead of symbol > >>> address"). > > I think it would be best to name commit 401721ecd1dc by hash too. > > ok > > To accomadate for older kernels, modify the vmcoreinfo to add > > s/accomadate/accommodate/ > ok > > >>> the new fields and help newer crash that will use it. > >> > >> I think here you mean > >> > >> modify the DumpState structure > >> > >> rather than > >> > >> modify the vmcoreinfo > >> > > > > No it's actually the content of the vmcoreinfo that is modified. > > OK: *what* is vmcoreinfo? Is that a structure in some program? Is it the > file "/sys/kernel/vmcoreinfo"? > > The only reference to "vmcoreinfo" that I see in current QEMU is the > "offset_vmcoreinfo" / "size_vmcoreinfo" fields in > "include/sysemu/dump.h", in the KdumpSubHeader32 and KdumpSubHeader64 > fields. They are never populated. > > I guess I would understand your above sentence ("to accommodate older > kernels...") if I knew a thing about "vmcoreinfo". I checked the kernel > commit, and it looks like a new field is added to some kernel structure > (or, maybe, the type of a field is changed). > > Are you saying that, in QEMU, when we dump older kernels, we're going to > synthesize this field (or field type) manually? If so: what from? > Initially, I added support in qemu-ga to compute phys_base more accurately than the guessed value in qemu. Then Dave Anderson suggested to use VMCOREINFO value instead, and add it there (in the appended ELF note too) if not present to help the tools. But my latest iteration simply all this, and just relies on VMCOREINFO value has being the most trustable value, that we can spread in other places if necessary. > > >>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > >>> --- > >>> include/sysemu/dump.h | 2 + > >>> dump.c | 133 > >> ++++++++++++++++++++++++++++++++++++++++++++++++++ > >>> 2 files changed, 135 insertions(+) > >>> > >>> diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > >>> index 2672a15f8b..b8a7a1e41d 100644 > >>> --- a/include/sysemu/dump.h > >>> +++ b/include/sysemu/dump.h > >>> @@ -192,6 +192,8 @@ typedef struct DumpState { > >>> * this could be used to calculate > >>> * how much work we have > >>> * finished. */ > >>> + uint8_t *vmcoreinfo; > >> > >> Can you document that this is an ELF note? > >> > > > > ok > > > > > >> > >>> + size_t vmcoreinfo_size; > >>> } DumpState; > >>> > >>> uint16_t cpu_to_dump16(DumpState *s, uint16_t val); > >>> diff --git a/dump.c b/dump.c > >>> index bdf3270f02..6911ffad8b 100644 > >>> --- a/dump.c > >>> +++ b/dump.c > >>> @@ -27,6 +27,7 @@ > >>> #include "qapi/qmp/qerror.h" > >>> #include "qmp-commands.h" > >>> #include "qapi-event.h" > >>> +#include "qemu/error-report.h" > >>> > >>> #include <zlib.h> > >>> #ifdef CONFIG_LZO > >>> @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) > >>> qemu_mutex_unlock_iothread(); > >>> } > >>> } > >>> + g_free(s->vmcoreinfo); > >>> + s->vmcoreinfo = NULL; > >>> > >>> return 0; > >>> } > >> > >> I vaguely feel that this should be moved in front of resuming VM > >> execution. I don't have a strong reason, just consistency with the rest > >> of the cleanup. > >> > > > > You mean before vm_start(), ok that makes sense (although I doubt dump > can > > be reentered as long as the status isn't changed). > > > >> @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) > >>> return cpu->cpu_index + 1; > >>> } > >>> > >>> +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState > *s, > >>> + Error **errp) > >>> +{ > >>> + int ret; > >>> + > >>> + if (s->vmcoreinfo) { > >>> + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); > >>> + if (ret < 0) { > >>> + error_setg(errp, "dump: failed to write vmcoreinfo"); > >>> + } > >>> + } > >>> +} > >>> + > >>> static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > >>> Error **errp) > >>> { > >>> @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction > >> f, DumpState *s, > >>> return; > >>> } > >>> } > >>> + > >>> + write_vmcoreinfo_note(f, s, errp); > >>> } > >>> > >>> static void write_elf32_note(DumpState *s, Error **errp) > >>> @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction > >> f, DumpState *s, > >>> return; > >>> } > >>> } > >>> + > >>> + write_vmcoreinfo_note(f, s, errp); > >>> } > >>> > >>> static void write_elf_section(DumpState *s, int type, Error **errp) > >>> @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t > >> size, void *opaque) > >>> return 0; > >>> } > >>> > >>> +static void get_note_sizes(DumpState *s, const void *note, > >>> + uint64_t *note_head_size, > >>> + uint64_t *name_size, > >>> + uint64_t *desc_size) > >>> +{ > >> > >> I'm not happy that I have to reverse engineer what this function does. > >> Please document it in the commit message and/or in a function-level > >> comment, especially regarding the actual permitted types of *note. > >> > >> > > ok, would that help?: > > /* > > * This function retrieves various sizes from an elf header. > > * > > * @note has to be a valid ELF note. The return sizes are unmodified > > * (not padded or rounded up to be multiple of 4). > > */ > > Sounds good, thanks. > > > > >> Very similar functionality exists in "target/i386/arch_dump.c" already. > >> Is there a (remote) possibility to extract / refactor / share code? > >> > >> > > Although the 2 functions share a few similarities, since they compute > > various sizes based on elf class, they are actually quite different. I > > don't see an easy way to refactor in a common function that would make > > sense. > > OK. > > > > >> + uint64_t note_head_sz; > >>> + uint64_t name_sz; > >>> + uint64_t desc_sz; > >>> + > >>> + if (s->dump_info.d_class == ELFCLASS64) { > >> > >> Ugh, this is extremely confusing. This refers to DumpState.dump_info, > >> which has type ArchDumpInfo. But in the previous patch we also introduce > >> a global "dump_info" variable, of type DumpInfo. > >> > > > >> Worse, ArchDumpInfo already has a field called "phys_base" (comment: > >> "The target's physmem base"), and it's even filled in in > >> "target/arm/arch_dump.c", function cpu_get_dump_info(): > >> > >> /* Take a best guess at the phys_base. If we get it wrong then crash > >> * will need '--machdep phys_offset=<phys-offset>' added to its command > >> * line, which isn't any worse than assuming we can use zero, but being > >> * wrong. This is the same algorithm the crash utility uses when > >> * attempting to guess as it loads non-dumpfile formatted files. > >> */ > >> > >> Looks like we already have some overlapping code / functionality for > >> this, for the ARM target? > >> > >> Sorry, I'm totally lost. It must have been years since I last looked at > >> this code. I guess my comments might not make much sense, even. > >> > >> > > I see it can be confusing but the explanation is quite simple. > > > > DumpInfo is global, and may be populated (hopefully accurately) by > various > > means. > > More precisely, the *DumpState* (not DumpInfo) structure is supposed to > carry information over a single invocation of the dump command. It > happens to be the case that we also have a single global variable of > that type, so that the monitor commands can find it (I guess?) when dump > is launched into the background. > > (See, the fact that you mistyped "DumpState" as "DumpInfo" is the best > evidence that this code is horribly confusing. That's not your fault at > all, of course! But it's all the more important to write detailed commit > messages and/or fix up some comments too.) > > Ahhh, wait, here you mean DumpInfo as introduced by *this* patch set > (patch #1). In that sense, DumpInfo is global to the full lifetime of > the guest. > > This is incredibly confusing. Please give "DumpInfo" and "dump_info" a > much longer and better name. Like "VmcoreDetailsFromGuest", or > "GuestReportedVmcoreDetails" or whatever. > > This is gone in the last iteration, since I dropped qemu-ga approach. I'll send the new version using vmcoreinfo device only. > > > DumpState and ArchDumpInfo is populated when starting a dump. > > cpu_get_dump_info() make a best guess at phys_base on arm. > > OK, I see that now, thanks. When dump_init() runs, "s" refers to > "dump_state_global" (of type DumpState). And, we have > > dump_init() > cpu_get_dump_info(&s->dump_info, ...) > > where "s->dump_info" is of type ArchDumpInfo. > > Alas, this field name conflicts badly (for human comprehension) with the > "dump_info" global variable name introduced in patch #1 (see my gripe > above). > > > After this call, dump_init() will override phys_base with the global > > dump_info.phys_base which should be correct if it exists. > > (So this is not the current code, this is about what this patch does. OK.) > > > > > Do you have a suggestion on how to make this clearer beside adding some > > comments? > > > > Should we rename DumpState.dump_info to DumpState_arch_dump_info to avoid > > the confusion? > > Yes, please do *all* of this. When information is overwritten with more > exact info, or from a better source, or with info having higher > priority, that should be documented in the code, in the commit message. > And, the rename you suggest is also a good idea. > > > Here's another piece I find confusing. In dump_init(), we have a comment > saying: > > /* get dump info: endian, class and architecture. > * If the target architecture is not supported, cpu_get_dump_info() > will > * return -1. > */ > ret = cpu_get_dump_info(&s->dump_info, &s->guest_phys_blocks); > > The comment (and the function name) suggest that cpu_get_dump_info() > collects only three dump details (endianness, class, architecture), and > that those depend on only on CPU state. This text goes back to initial > dump commit 783e9b4826b9 ("introduce a new monitor command > 'dump-guest-memory' to dump guest's memory", 2012-05-07). > > Today, this comment is stale. See the cpu_get_dump_info() > implementations in: > > - target/s390x/arch_dump.c: the original comment holds. > - target/ppc/arch_dump.c: the original comment holds. > - target/i386/arch_dump.c: the function name does not match, because > beyond CPU state, the memory map is consulted too > - target/arm/arch_dump.c: the function name does not match, because in > addition to CPU state, the memory map is consulted too. Also, the > information collected goes beyond endianness / class / architecture, we > populate "page_size" and "phys_base" too. > > These changes seem to be related to Drew's work from commit f1cd483004da > ("qapi-schema: dump-guest-memory: Improve text", 2016-01-11) through > commit ade0d0c0d3a0 ("target-arm: dump-guest-memory: add vfp notes for > arm", 2016-01-11), inclusive. I think we should now remove the explicit > references to "endian, class and architecture"; we should rather say > "try to collect a bunch of crash & ELF related info from guest CPU state > and physical memory map". > > >> Please post a version 3, with as detailed as possible commit messages, > >> explaining your entire thought process, the data flow, how this feature > >> fits into the old code, and all the modifications. Personally at least, > >> I need a complete re-introduction to this, to make heads or tails of > >> your changes. > >> > >> I mean I certainly don't *insist* on reviewing this code, it's just that > >> if you'd like me to comment on it, you'll have to document all the > >> investigative work you've done before / while writing it. > >> > > > > > > The flow is as follow: > > > > - by some means (guest agent, dedicated device etc), the guest populates > > the DumpInfo structure with various details, such as phys_base and the > > content of /sys/kernel/vmcoreinfo > > OK. > > > > > - during dump, if dump_info.phys_base has been populated, it takes > > precedence over previously guessed value > > Well, chronologically, the guessing occurs *after* the guest agent or > dedicated device told QEMU the definitive phys_base. > > So I guess we could improve things a bit (for human comprehension) if > cpu_get_dump_info() were told not to guess phys_base if we already have > it from a better source. Or else, separate out the phys_base guessing > from cpu_get_dump_info() as first step, and then use it as a fallback, > if we have no better source of information. > > > > > - during dump, if dump_info.vmcoreinfo is populated, parse the phys > address > > and size of the vmcoreinfo ELF note > > So you're saying that "/sys/kernel/vmcoreinfo" is already formatted as > an ELF note? > > Ah, no. Apparently, "/sys/kernel/vmcoreinfo" is a text file which tells > you where to read guest memory, to grab that ELF note. > > The "DumpInfo.vmcoreinfo" field should be documented much better. The > comment currently says "the content of /sys/kernel/vmcoreinfo on Linux", > which doesn't tell me anything at all, because I don't know what that > file contains. > > gone > > > > - check the ELF note header and size. If invalid, don't dump it. The size > > is 4-byte aligned. > > OK. > > > > > - vmcoreinfo_add_phys_base() will check if NUMBER(phys_base)= is present, > > if not, modify the note to add it. > > Wow!!! We're reaching a new height of confusion here. So you are saying > that we actually have *three* sources for phys_base, namely (in order of > increasing importance): > > (1) whatever cpu_get_dump_info() guesses, based on QEMU target arch > (2) whatever the guest agent or guest ACPI device tells us, via > DumpInfo.phys_base > (3) whatever the guest kernel's own "vmcoreinfo" ELF note tells us, > which we read directly from guest memory, using the address and size > found in the guest's "/sys/kernel/vmcoreinfo" file. > > Furthermore, dependent on the output format that we produce for "crash" > (ELF vs. kdump-compressed), we output either *one* piece of phys_base > information in the dump, or *two*: > > * If the output format is ELF, we produce one "phys_base" instance, > namely on the following call path: > > dump_process() > create_vmcore() > dump_begin() > write_elf32_notes() | write_elf64_notes() > write_vmcoreinfo_note() > > * If the output format is kdump-compressed, we produce *two* "phys_base" > instances, namely on the following call tree: > > dump_process() > create_kdump_vmcore() > write_dump_header() > create_header32() | create_header64() > kh->phys_base = ... s->dump_info.phys_base ... > write_buffer() <-- instance #1 written > ... > write_elf32_notes() | write_elf64_notes() > write_vmcoreinfo_note() > write_buffer() <-- instance #2 written > > This is because in the second case (= kdump-compressed format), the > KdumpSubHeader32 / KdumpSubHeader64 structures already contain > "phys_base" themselves. > > Worst of all, the two pieces of "phys_base" info that we provide can > even conflict. Imagine the case when the guest kernel offers -- via > method (3) -- its own vmcoreinfo ELF note, complete with "phys_base". > That means we're going to write it out verbatim as instance #2. Now > assume that via methods (1) or (2), we also collect a *different* > phys_base value. This value will be written out as instance #1. And then > "crash" will encounter conflicting "phys_base" values. > > > ... Looking at patch #3, I'm getting *even more* confused (if that is > possible). It seems that there you populate the "offset_vmcoreinfo" / > "size_vmcoreinfo" fields that I mentioned near the top, and then write > out a *third* instance of the "phys_base" information (as a complete > vmcoreinfo note), right before you write out the exact same note anyway, > marked as "instance #2" above. > > I think you may have missed that write_elf32_notes() and > write_elf64_notes() are called *both* for ELF-formatted dumps *and* for > kdump-compressed dumps. > > No, I didn't miss that, there is an explicit field in kdump header for the location of the ELF PT_NOTE, and that's what I populated, along with the rest of the elf notes. > ... So, I don't think this is "quite simple" :( > > If my opinion matters, I'd like to see the following: > > (i) a clear definition, in documentation (commit message and code > comments), of *priorities* between the phys_base sources. > > It's now as simple as: qemu initially guesses the value, then checks if vmcoreinfo has a more accurate value. We could refactor the code to avoid the initial guessing, but the gain is very minimal at this point. > (ii) currently the priorities are not implemented correctly. See my > example above: "s->dump_info.phys_base" is not refreshed from the > kernel's own vmcoreinfo ELF note, if the latter also contains > "phys_base". This is a problem because we pass both of these instances > to "crash", if the output format is kdump-compressed. > Crash has to deal with potentially conflicting values anyway, given there are potentially multiple sources. In qemu, we can make sure it's the same value. Last iteration does that > > (iii) writing out the vmcoreinfo note in write_elf32_notes() / > write_elf64_notes() is inappropriate, because this way the same code > will be invoked for the kdump formats too, which is wrong. The right > place to call write_vmcoreinfo_note() is near the end of dump_begin(), > after the 32/64 bit branches end, where it will run only for the ELF > format. > No, we want vmcoreinfo notes in kdump too. > > (iv) I think it would be worth investigating whether we can produce > *exactly one* phys_base hint for crash, regardless of the output format > (ELF vs. kdump-compressed). Bullet (iii) above covers the ELF case -- in > the ELF case, there really may not be a way around writing a full > vmcoreinfo note. However, in the kdump case, we already write > "phys_base" as part of KdumpSubHeader32 / KdumpSubHeader64 -- so how > about dropping the third patch in the series, and synching the guest > kernel's vmcoreinfo note (the phys_base field thereof) to > "s->dump_info.phys_base" instead? > > The best value is the one from VMCOREINFO, so s->dump_info.phys_base will be updated, as explained earlier. > This would also be helpful because it would make the > "s->dump_info.phys_base" field the master location of phys_base: > - highest priority: set from the guest kernel vmcoreinfo note, if that > note exists, is valid, and provides the value. > - mid priority: otherwise, set from the direct value reported by the > guest agent or by the ACPI device > - low priority: otherwise, let cpu_get_dump_info() guess it. > > Some more comments below (more superficial in nature): > > > > > - modify s->note_size to account for vmcoreinfo note size > > > > - write_vmcoreinfo_note() when writing all the populated notes. > > > > Please ask any question to help you clarify this patch. > > > > thanks > > > > > >> > >>> + const Elf64_Nhdr *hdr = note; > >>> + note_head_sz = sizeof(Elf64_Nhdr); > >>> + name_sz = hdr->n_namesz; > >>> + desc_sz = hdr->n_descsz; > >>> + } else { > >>> + const Elf32_Nhdr *hdr = note; > >>> + note_head_sz = sizeof(Elf32_Nhdr); > >>> + name_sz = hdr->n_namesz; > >>> + desc_sz = hdr->n_descsz; > >>> + } > >>> + > >>> + if (note_head_size) { > >>> + *note_head_size = note_head_sz; > >>> + } > >>> + if (name_size) { > >>> + *name_size = name_sz; > >>> + } > >>> + if (desc_size) { > >>> + *desc_size = desc_sz; > >>> + } > >>> +} > >>> + > >>> +static void set_note_desc_size(DumpState *s, void *note, > >>> + uint64_t desc_size) > >>> +{ > >>> + if (s->dump_info.d_class == ELFCLASS64) { > >>> + Elf64_Nhdr *hdr = note; > >>> + hdr->n_descsz = desc_size; > >>> + } else { > >>> + Elf32_Nhdr *hdr = note; > >>> + hdr->n_descsz = desc_size; > >>> + } > >>> +} > >>> + > >>> /* write common header, sub header and elf note to vmcore */ > >>> static void create_header32(DumpState *s, Error **errp) > >>> { > >>> @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) > >>> return total; > >>> } > >>> > >>> +static void vmcoreinfo_add_phys_base(DumpState *s) > >>> +{ > >>> + uint64_t size, note_head_size, name_size; > >>> + char **lines, *physbase = NULL; > >>> + uint8_t *newvmci, *vmci; > >>> + size_t i; > >>> + > >>> + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, > >> &size); > >>> + note_head_size = ((note_head_size + 3) / 4) * 4; > > Can we replace these awkward roundings with ROUND_UP()? > > ROUND_UP() works only with powers of two (the more general version is > QEMU_ALIGN_UP()), but here we're rounding up to a multiple of four, so > ROUND_UP() should be fine. > > In fact I might even be calling for a separate patch that convers the > rest of these roundings in the dump code to ROUND_UP. > ok (this and other similar remarks triggered my work on clang tools btw, https://lists.gnu.org/archive/html/qemu-devel/2017-06/msg05034.html) > It's up to you. > > >>> + name_size = ((name_size + 3) / 4) * 4; > >>> + vmci = s->vmcoreinfo + note_head_size + name_size; > >>> + *(vmci + size) = '\0'; > >>> + lines = g_strsplit((char *)vmci, "\n", -1); > >>> + for (i = 0; lines[i]; i++) { > >>> + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { > >>> + goto end; > >>> + } > >>> + } > >>> + > >>> + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", > >>> + s->dump_info.phys_base); > >>> + s->vmcoreinfo_size = > >>> + ((note_head_size + name_size + size + strlen(physbase) + 3) / > >> 4) * 4; > >>> + > >>> + newvmci = g_malloc(s->vmcoreinfo_size); > >>> + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - > >> 1); > >>> + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, > >>> + strlen(physbase) + 1); > >>> + g_free(s->vmcoreinfo); > >>> + s->vmcoreinfo = newvmci; > >>> + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); > >>> + > >>> +end: > >>> + g_strfreev(lines); > >>> +} > >>> + > >>> static void dump_init(DumpState *s, int fd, bool has_format, > >>> DumpGuestMemoryFormat format, bool paging, bool > >> has_filter, > >>> int64_t begin, int64_t length, Error **errp) > >>> @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool > >> has_format, > >>> goto cleanup; > >>> } > >>> > >>> + if (dump_info.has_phys_base) { > >>> + s->dump_info.phys_base = dump_info.phys_base; > >>> + } > >>> + if (dump_info.vmcoreinfo) { > >>> + uint64_t addr, size, note_head_size, name_size, desc_size; > >>> + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" > PRIx64, > >>> + &addr, &size); > > sscanf() must not be used with untrusted input (which guest kernel data > definitely is). Please see: > > http://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html > > Unless assignment suppression was indicated by a '*', the result of > the conversion shall be placed in the object pointed to by the first > argument following the format argument that has not already received > a conversion result if the conversion specification is introduced by > %, [CX] [Option Start] or in the nth argument if introduced by the > character sequence "%n$". [Option End] If this object does not have > an appropriate type, or if the result of the conversion cannot be > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > represented in the space provided, the behavior is undefined. > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > You get undefined behavior if the guest kernel presents, say, the > following in /sys/kernel/vmcoreinfo: > > 99999999999999999999999999999999999999999999999999999999999999999999 1 > > (As a side point, for the fscanf() family of functions, the conversion > specifier macros aren't PRIxN-style but SCNxN style: > > http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html > ) > > So, instead of sscanf(), please call qemu_strtou64() twice in > succession. The first invocation will tell you (if it succeeds, that > is), where to start the second invocation. > This is gone, vmcoreinfo device provides direct values. > > Thanks, > Laszlo > > >>> + if (count != 2) { > >>> + /* non fatal error */ > >>> + error_report("Failed to parse vmcoreinfo"); > >>> + } else { > >>> + assert(!s->vmcoreinfo); > >>> + s->vmcoreinfo = g_malloc(size); > >>> + cpu_physical_memory_read(addr, s->vmcoreinfo, size); > >>> + > >>> + get_note_sizes(s, s->vmcoreinfo, > >>> + ¬e_head_size, &name_size, &desc_size); > >>> + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + > >>> + (name_size + 3) / 4 + > >>> + (desc_size + 3) / 4) * 4; > >>> + if (s->vmcoreinfo_size > size) { > >>> + error_report("Invalid vmcoreinfo header, size > >> mismatch"); > >>> + g_free(s->vmcoreinfo); > >>> + s->vmcoreinfo = NULL; > >>> + } else { > >>> + if (dump_info.has_phys_base) { > >>> + vmcoreinfo_add_phys_base(s); > >>> + } > >>> + s->note_size += s->vmcoreinfo_size; > >>> + } > >>> + } > >>> + } > >>> + > >>> /* get memory mapping */ > >>> if (paging) { > >>> qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, > >> &err); > >>> > >> > >> > >> -- > > Marc-André Lureau > > > > -- Marc-André Lureau ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note Marc-André Lureau 2017-06-01 18:38 ` Laszlo Ersek @ 2017-06-05 8:04 ` Andrew Jones 1 sibling, 0 replies; 21+ messages in thread From: Andrew Jones @ 2017-06-05 8:04 UTC (permalink / raw) To: Marc-André Lureau; +Cc: qemu-devel, anderson, qiaonuohan, lersek On Thu, Jun 01, 2017 at 05:03:23PM +0400, Marc-André Lureau wrote: > Read vmcoreinfo note from guest memory when dump_info provides the > address, and write it as an ELF note in the dump. > > NUMBER(phys_base) in vmcoreinfo has only been recently introduced in > Linux 4.10 ("kexec: export the value of phys_base instead of symbol > address"). To accomadate for older kernels, modify the vmcoreinfo to add > the new fields and help newer crash that will use it. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > include/sysemu/dump.h | 2 + > dump.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 135 insertions(+) > > diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > index 2672a15f8b..b8a7a1e41d 100644 > --- a/include/sysemu/dump.h > +++ b/include/sysemu/dump.h > @@ -192,6 +192,8 @@ typedef struct DumpState { > * this could be used to calculate > * how much work we have > * finished. */ > + uint8_t *vmcoreinfo; > + size_t vmcoreinfo_size; > } DumpState; > > uint16_t cpu_to_dump16(DumpState *s, uint16_t val); > diff --git a/dump.c b/dump.c > index bdf3270f02..6911ffad8b 100644 > --- a/dump.c > +++ b/dump.c > @@ -27,6 +27,7 @@ > #include "qapi/qmp/qerror.h" > #include "qmp-commands.h" > #include "qapi-event.h" > +#include "qemu/error-report.h" > > #include <zlib.h> > #ifdef CONFIG_LZO > @@ -88,6 +89,8 @@ static int dump_cleanup(DumpState *s) > qemu_mutex_unlock_iothread(); > } > } > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = NULL; > > return 0; > } > @@ -238,6 +241,19 @@ static inline int cpu_index(CPUState *cpu) > return cpu->cpu_index + 1; > } > > +static void write_vmcoreinfo_note(WriteCoreDumpFunction f, DumpState *s, > + Error **errp) > +{ > + int ret; > + > + if (s->vmcoreinfo) { > + ret = f(s->vmcoreinfo, s->vmcoreinfo_size, s); > + if (ret < 0) { > + error_setg(errp, "dump: failed to write vmcoreinfo"); > + } > + } > +} > + > static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > Error **errp) > { > @@ -261,6 +277,8 @@ static void write_elf64_notes(WriteCoreDumpFunction f, DumpState *s, > return; > } > } > + > + write_vmcoreinfo_note(f, s, errp); > } > > static void write_elf32_note(DumpState *s, Error **errp) > @@ -306,6 +324,8 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s, > return; > } > } > + > + write_vmcoreinfo_note(f, s, errp); > } > > static void write_elf_section(DumpState *s, int type, Error **errp) > @@ -717,6 +737,50 @@ static int buf_write_note(const void *buf, size_t size, void *opaque) > return 0; > } > > +static void get_note_sizes(DumpState *s, const void *note, > + uint64_t *note_head_size, > + uint64_t *name_size, > + uint64_t *desc_size) > +{ > + uint64_t note_head_sz; > + uint64_t name_sz; > + uint64_t desc_sz; > + > + if (s->dump_info.d_class == ELFCLASS64) { > + const Elf64_Nhdr *hdr = note; > + note_head_sz = sizeof(Elf64_Nhdr); > + name_sz = hdr->n_namesz; > + desc_sz = hdr->n_descsz; > + } else { > + const Elf32_Nhdr *hdr = note; > + note_head_sz = sizeof(Elf32_Nhdr); > + name_sz = hdr->n_namesz; > + desc_sz = hdr->n_descsz; > + } > + > + if (note_head_size) { > + *note_head_size = note_head_sz; > + } > + if (name_size) { > + *name_size = name_sz; > + } > + if (desc_size) { > + *desc_size = desc_sz; > + } > +} > + > +static void set_note_desc_size(DumpState *s, void *note, > + uint64_t desc_size) > +{ > + if (s->dump_info.d_class == ELFCLASS64) { > + Elf64_Nhdr *hdr = note; > + hdr->n_descsz = desc_size; > + } else { > + Elf32_Nhdr *hdr = note; > + hdr->n_descsz = desc_size; > + } > +} > + > /* write common header, sub header and elf note to vmcore */ > static void create_header32(DumpState *s, Error **errp) > { > @@ -1491,6 +1555,42 @@ static int64_t dump_calculate_size(DumpState *s) > return total; > } > > +static void vmcoreinfo_add_phys_base(DumpState *s) > +{ > + uint64_t size, note_head_size, name_size; > + char **lines, *physbase = NULL; > + uint8_t *newvmci, *vmci; > + size_t i; > + > + get_note_sizes(s, s->vmcoreinfo, ¬e_head_size, &name_size, &size); > + note_head_size = ((note_head_size + 3) / 4) * 4; > + name_size = ((name_size + 3) / 4) * 4; I'd prefer to replace all the + 3 / 4 * 4 stuff with ROUND_UP() > + vmci = s->vmcoreinfo + note_head_size + name_size; How about using another size variable (e.g. sz) = note_head_size + name_size > + *(vmci + size) = '\0'; > + lines = g_strsplit((char *)vmci, "\n", -1); > + for (i = 0; lines[i]; i++) { > + if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) { > + goto end; > + } > + } I don't think it should be necessary to split the info first. We can just search the entire info for the substring '\nNUMBER(phys_base)='. > + > + physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", > + s->dump_info.phys_base); sz += size > + s->vmcoreinfo_size = > + ((note_head_size + name_size + size + strlen(physbase) + 3) / 4) * 4; > + > + newvmci = g_malloc(s->vmcoreinfo_size); > + memcpy(newvmci, s->vmcoreinfo, note_head_size + name_size + size - 1); > + memcpy(newvmci + note_head_size + name_size + size - 1, physbase, > + strlen(physbase) + 1); > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = newvmci; How about using g_realloc() instead? > + set_note_desc_size(s, s->vmcoreinfo, size + strlen(physbase)); > + > +end: > + g_strfreev(lines); > +} > + > static void dump_init(DumpState *s, int fd, bool has_format, > DumpGuestMemoryFormat format, bool paging, bool has_filter, > int64_t begin, int64_t length, Error **errp) > @@ -1566,6 +1666,39 @@ static void dump_init(DumpState *s, int fd, bool has_format, > goto cleanup; > } > > + if (dump_info.has_phys_base) { > + s->dump_info.phys_base = dump_info.phys_base; > + } > + if (dump_info.vmcoreinfo) { > + uint64_t addr, size, note_head_size, name_size, desc_size; > + int count = sscanf(dump_info.vmcoreinfo, "%" PRIx64 " %" PRIx64, > + &addr, &size); > + if (count != 2) { > + /* non fatal error */ > + error_report("Failed to parse vmcoreinfo"); > + } else { > + assert(!s->vmcoreinfo); > + s->vmcoreinfo = g_malloc(size); > + cpu_physical_memory_read(addr, s->vmcoreinfo, size); > + > + get_note_sizes(s, s->vmcoreinfo, > + ¬e_head_size, &name_size, &desc_size); > + s->vmcoreinfo_size = ((note_head_size + 3) / 4 + > + (name_size + 3) / 4 + > + (desc_size + 3) / 4) * 4; > + if (s->vmcoreinfo_size > size) { > + error_report("Invalid vmcoreinfo header, size mismatch"); > + g_free(s->vmcoreinfo); > + s->vmcoreinfo = NULL; > + } else { > + if (dump_info.has_phys_base) { > + vmcoreinfo_add_phys_base(s); > + } > + s->note_size += s->vmcoreinfo_size; > + } > + } > + } > + > /* get memory mapping */ > if (paging) { > qemu_get_guest_memory_mapping(&s->list, &s->guest_phys_blocks, &err); > -- > 2.13.0.91.g00982b8dd > > Thanks, drew ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure Marc-André Lureau 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note Marc-André Lureau @ 2017-06-01 13:03 ` Marc-André Lureau 2017-06-05 8:07 ` Andrew Jones 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 4/4] scripts/dump-guest-memory.py: " Marc-André Lureau 2017-06-01 13:46 ` [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note no-reply 4 siblings, 1 reply; 21+ messages in thread From: Marc-André Lureau @ 2017-06-01 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: lersek, qiaonuohan, anderson, Marc-André Lureau kdump header provides offset and size of the vmcoreinfo note, append it if available. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- dump.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/dump.c b/dump.c index 6911ffad8b..ba7676a514 100644 --- a/dump.c +++ b/dump.c @@ -791,8 +791,9 @@ static void create_header32(DumpState *s, Error **errp) uint32_t sub_hdr_size; uint32_t bitmap_blocks; uint32_t status = 0; - uint64_t offset_note; + uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0; Error *local_err = NULL; + uint8_t *vmcoreinfo = NULL; /* write common header, the version of kdump-compressed format is 6th */ size = sizeof(DiskDumpHeader32); @@ -841,7 +842,18 @@ static void create_header32(DumpState *s, Error **errp) kh->phys_base = cpu_to_dump32(s, s->dump_info.phys_base); kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); - offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; + offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size; + if (s->vmcoreinfo) { + uint64_t hsize, name_size; + + get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo); + vmcoreinfo = + s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4; + kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); + kh->size_vmcoreinfo = cpu_to_dump32(s, size_vmcoreinfo); + } + + offset_note = offset_vmcoreinfo + size_vmcoreinfo; kh->offset_note = cpu_to_dump64(s, offset_note); kh->note_size = cpu_to_dump32(s, s->note_size); @@ -851,6 +863,14 @@ static void create_header32(DumpState *s, Error **errp) goto out; } + if (vmcoreinfo) { + if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo, + size_vmcoreinfo) < 0) { + error_setg(errp, "dump: failed to vmcoreinfo"); + goto out; + } + } + /* write note */ s->note_buf = g_malloc0(s->note_size); s->note_buf_offset = 0; @@ -891,8 +911,9 @@ static void create_header64(DumpState *s, Error **errp) uint32_t sub_hdr_size; uint32_t bitmap_blocks; uint32_t status = 0; - uint64_t offset_note; + uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0; Error *local_err = NULL; + uint8_t *vmcoreinfo = NULL; /* write common header, the version of kdump-compressed format is 6th */ size = sizeof(DiskDumpHeader64); @@ -941,7 +962,18 @@ static void create_header64(DumpState *s, Error **errp) kh->phys_base = cpu_to_dump64(s, s->dump_info.phys_base); kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); - offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; + offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size; + if (s->vmcoreinfo) { + uint64_t hsize, name_size; + + get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo); + vmcoreinfo = + s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4; + kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); + kh->size_vmcoreinfo = cpu_to_dump64(s, size_vmcoreinfo); + } + + offset_note = offset_vmcoreinfo + size_vmcoreinfo; kh->offset_note = cpu_to_dump64(s, offset_note); kh->note_size = cpu_to_dump64(s, s->note_size); @@ -951,6 +983,14 @@ static void create_header64(DumpState *s, Error **errp) goto out; } + if (vmcoreinfo) { + if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo, + size_vmcoreinfo) < 0) { + error_setg(errp, "dump: failed to vmcoreinfo"); + goto out; + } + } + /* write note */ s->note_buf = g_malloc0(s->note_size); s->note_buf_offset = 0; -- 2.13.0.91.g00982b8dd ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo Marc-André Lureau @ 2017-06-05 8:07 ` Andrew Jones 0 siblings, 0 replies; 21+ messages in thread From: Andrew Jones @ 2017-06-05 8:07 UTC (permalink / raw) To: Marc-André Lureau; +Cc: qemu-devel, anderson, qiaonuohan, lersek On Thu, Jun 01, 2017 at 05:03:24PM +0400, Marc-André Lureau wrote: > kdump header provides offset and size of the vmcoreinfo note, append it > if available. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > dump.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 44 insertions(+), 4 deletions(-) > > diff --git a/dump.c b/dump.c > index 6911ffad8b..ba7676a514 100644 > --- a/dump.c > +++ b/dump.c > @@ -791,8 +791,9 @@ static void create_header32(DumpState *s, Error **errp) > uint32_t sub_hdr_size; > uint32_t bitmap_blocks; > uint32_t status = 0; > - uint64_t offset_note; > + uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0; > Error *local_err = NULL; > + uint8_t *vmcoreinfo = NULL; > > /* write common header, the version of kdump-compressed format is 6th */ > size = sizeof(DiskDumpHeader32); > @@ -841,7 +842,18 @@ static void create_header32(DumpState *s, Error **errp) > kh->phys_base = cpu_to_dump32(s, s->dump_info.phys_base); > kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); > > - offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; > + offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size; > + if (s->vmcoreinfo) { > + uint64_t hsize, name_size; > + > + get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo); > + vmcoreinfo = > + s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4; > + kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); > + kh->size_vmcoreinfo = cpu_to_dump32(s, size_vmcoreinfo); > + } > + > + offset_note = offset_vmcoreinfo + size_vmcoreinfo; > kh->offset_note = cpu_to_dump64(s, offset_note); > kh->note_size = cpu_to_dump32(s, s->note_size); > > @@ -851,6 +863,14 @@ static void create_header32(DumpState *s, Error **errp) > goto out; > } > > + if (vmcoreinfo) { > + if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo, > + size_vmcoreinfo) < 0) { > + error_setg(errp, "dump: failed to vmcoreinfo"); > + goto out; > + } > + } > + > /* write note */ > s->note_buf = g_malloc0(s->note_size); > s->note_buf_offset = 0; > @@ -891,8 +911,9 @@ static void create_header64(DumpState *s, Error **errp) > uint32_t sub_hdr_size; > uint32_t bitmap_blocks; > uint32_t status = 0; > - uint64_t offset_note; > + uint64_t offset_note, offset_vmcoreinfo, size_vmcoreinfo = 0; > Error *local_err = NULL; > + uint8_t *vmcoreinfo = NULL; > > /* write common header, the version of kdump-compressed format is 6th */ > size = sizeof(DiskDumpHeader64); > @@ -941,7 +962,18 @@ static void create_header64(DumpState *s, Error **errp) > kh->phys_base = cpu_to_dump64(s, s->dump_info.phys_base); > kh->dump_level = cpu_to_dump32(s, DUMP_LEVEL); > > - offset_note = DISKDUMP_HEADER_BLOCKS * block_size + size; > + offset_vmcoreinfo = DISKDUMP_HEADER_BLOCKS * block_size + size; > + if (s->vmcoreinfo) { > + uint64_t hsize, name_size; > + > + get_note_sizes(s, s->vmcoreinfo, &hsize, &name_size, &size_vmcoreinfo); > + vmcoreinfo = > + s->vmcoreinfo + ((hsize + 3) / 4 + (name_size + 3) / 4) * 4; > + kh->offset_vmcoreinfo = cpu_to_dump64(s, offset_vmcoreinfo); > + kh->size_vmcoreinfo = cpu_to_dump64(s, size_vmcoreinfo); > + } > + > + offset_note = offset_vmcoreinfo + size_vmcoreinfo; > kh->offset_note = cpu_to_dump64(s, offset_note); > kh->note_size = cpu_to_dump64(s, s->note_size); > > @@ -951,6 +983,14 @@ static void create_header64(DumpState *s, Error **errp) > goto out; > } > > + if (vmcoreinfo) { > + if (write_buffer(s->fd, offset_vmcoreinfo, vmcoreinfo, > + size_vmcoreinfo) < 0) { > + error_setg(errp, "dump: failed to vmcoreinfo"); > + goto out; > + } > + } > + > /* write note */ > s->note_buf = g_malloc0(s->note_size); > s->note_buf_offset = 0; > -- > 2.13.0.91.g00982b8dd > > Besides the + 3 / 4 * 4, which might be nicer as ROUND_UP() Reviewed-by: Andrew Jones <drjones@redhat.com> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] [PATCH v2 4/4] scripts/dump-guest-memory.py: add vmcoreinfo 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau ` (2 preceding siblings ...) 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo Marc-André Lureau @ 2017-06-01 13:03 ` Marc-André Lureau 2017-06-01 13:46 ` [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note no-reply 4 siblings, 0 replies; 21+ messages in thread From: Marc-André Lureau @ 2017-06-01 13:03 UTC (permalink / raw) To: qemu-devel; +Cc: lersek, qiaonuohan, anderson, Marc-André Lureau Add vmcoreinfo ELF note if qemu dump_info has been populated. Also modify it with NUMBER(phys_base)=.. if the guest doesn't provide it (on older kernel). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- scripts/dump-guest-memory.py | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py index f7c6635f15..a13f5d8b24 100644 --- a/scripts/dump-guest-memory.py +++ b/scripts/dump-guest-memory.py @@ -120,6 +120,33 @@ class ELF(object): self.segments[0].p_filesz += ctypes.sizeof(note) self.segments[0].p_memsz += ctypes.sizeof(note) + + def add_vmcoreinfo_note(self, vmcoreinfo, phys_base=None): + """Adds a vmcoreinfo note to the ELF.""" + chead = type(get_arch_note(self.endianness, 0, 0)) + header = chead.from_buffer_copy(vmcoreinfo[0:ctypes.sizeof(chead)]) + note = get_arch_note(self.endianness, + header.n_namesz - 1, header.n_descsz) + ctypes.memmove(ctypes.pointer(note), vmcoreinfo, ctypes.sizeof(note)) + header_size = ctypes.sizeof(note) - header.n_descsz + + if phys_base: + desc = bytearray(note.n_desc).decode().split() + if not next((v for v in desc if v.startswith('NUMBER(phys_base)=')), + False): + desc.append('NUMBER(phys_base)=%ld' % phys_base) + desc = "\n".join(desc) + '\n' + descsz = (len(desc) + 3) // 4 * 4 + desc += '\0' * (descsz - len(desc)) + note = get_arch_note(self.endianness, header.n_namesz - 1, descsz) + ctypes.memmove(ctypes.pointer(note), vmcoreinfo, header_size) + note.n_descsz = descsz + ctypes.memmove(note.n_desc, desc.encode(), descsz) + + self.notes.append(note) + self.segments[0].p_filesz += ctypes.sizeof(note) + self.segments[0].p_memsz += ctypes.sizeof(note) + def add_segment(self, p_type, p_paddr, p_size): """Adds a segment to the elf.""" @@ -505,6 +532,30 @@ shape and this command should mostly work.""" cur += chunk_size left -= chunk_size + def add_vmcoreinfo(self): + qemu_core = gdb.inferiors()[0] + + try: + coreinfo = gdb.parse_and_eval("dump_info.vmcoreinfo") + except gdb.error: + return + + if coreinfo == 0: + return + + phys_base = None + has_phys_base = gdb.parse_and_eval("dump_info.has_phys_base") + if has_phys_base: + phys_base = int(gdb.parse_and_eval("dump_info.phys_base")) + + addr, size = [int(val, 16) for val in coreinfo.string().split()] + for block in self.guest_phys_blocks: + if block["target_start"] <= addr < block["target_end"]: + haddr = block["host_addr"] + (addr - block["target_start"]) + vmcoreinfo = qemu_core.read_memory(haddr, size) + self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes(), phys_base) + return + def invoke(self, args, from_tty): """Handles command invocation from gdb.""" @@ -518,6 +569,7 @@ shape and this command should mostly work.""" self.elf = ELF(argv[1]) self.guest_phys_blocks = get_guest_phys_blocks() + self.add_vmcoreinfo() with open(argv[0], "wb") as vmcore: self.dump_init(vmcore) -- 2.13.0.91.g00982b8dd ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau ` (3 preceding siblings ...) 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 4/4] scripts/dump-guest-memory.py: " Marc-André Lureau @ 2017-06-01 13:46 ` no-reply 4 siblings, 0 replies; 21+ messages in thread From: no-reply @ 2017-06-01 13:46 UTC (permalink / raw) To: marcandre.lureau; +Cc: famz, qemu-devel, anderson, qiaonuohan, lersek Hi, This series failed automatic build test. Please find the testing commands and their output below. If you have docker installed, you can probably reproduce it locally. Type: series Message-id: 20170601130325.6433-1-marcandre.lureau@redhat.com Subject: [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note === TEST SCRIPT BEGIN === #!/bin/bash set -e git submodule update --init dtc # Let docker tests dump environment info export SHOW_ENV=1 export J=8 time make docker-test-quick@centos6 time make docker-test-mingw@fedora time make docker-test-build@min-glib === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu - [tag update] patchew/1492838021-10538-1-git-send-email-ashijeetacharya@gmail.com -> patchew/1492838021-10538-1-git-send-email-ashijeetacharya@gmail.com * [new tag] patchew/1496320911-51305-1-git-send-email-pbonzini@redhat.com -> patchew/1496320911-51305-1-git-send-email-pbonzini@redhat.com * [new tag] patchew/20170601130325.6433-1-marcandre.lureau@redhat.com -> patchew/20170601130325.6433-1-marcandre.lureau@redhat.com Switched to a new branch 'test' 33a8558 scripts/dump-guest-memory.py: add vmcoreinfo e8a0695 kdump: add vmcoreinfo 04a28db dump: add vmcoreinfo ELF note 877c717 dump: add DumpInfo structure === OUTPUT BEGIN === Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc' Cloning into '/var/tmp/patchew-tester-tmp-b62q2j32/src/dtc'... Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d' BUILD centos6 make[1]: Entering directory '/var/tmp/patchew-tester-tmp-b62q2j32/src' ARCHIVE qemu.tgz ARCHIVE dtc.tgz COPY RUNNER RUN test-quick in qemu:centos6 Packages installed: SDL-devel-1.2.14-7.el6_7.1.x86_64 ccache-3.1.6-2.el6.x86_64 epel-release-6-8.noarch gcc-4.4.7-17.el6.x86_64 git-1.7.1-4.el6_7.1.x86_64 glib2-devel-2.28.8-5.el6.x86_64 libfdt-devel-1.4.0-1.el6.x86_64 make-3.81-23.el6.x86_64 package g++ is not installed pixman-devel-0.32.8-1.el6.x86_64 tar-1.23-15.el6_8.x86_64 zlib-devel-1.2.3-29.el6.x86_64 Environment variables: PACKAGES=libfdt-devel ccache tar git make gcc g++ zlib-devel glib2-devel SDL-devel pixman-devel epel-release HOSTNAME=2967a664e3c8 TERM=xterm MAKEFLAGS= -j8 HISTSIZE=1000 J=8 USER=root CCACHE_DIR=/var/tmp/ccache EXTRA_CONFIGURE_OPTS= V= SHOW_ENV=1 MAIL=/var/spool/mail/root PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ LANG=en_US.UTF-8 TARGET_LIST= HISTCONTROL=ignoredups SHLVL=1 HOME=/root TEST_DIR=/tmp/qemu-test LOGNAME=root LESSOPEN=||/usr/bin/lesspipe.sh %s FEATURES= dtc DEBUG= G_BROKEN_FILENAMES=1 CCACHE_HASHDIR= _=/usr/bin/env Configure options: --enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install No C++ compiler available; disabling C++ specific optional code Install prefix /var/tmp/qemu-build/install BIOS directory /var/tmp/qemu-build/install/share/qemu binary directory /var/tmp/qemu-build/install/bin library directory /var/tmp/qemu-build/install/lib module directory /var/tmp/qemu-build/install/lib/qemu libexec directory /var/tmp/qemu-build/install/libexec include directory /var/tmp/qemu-build/install/include config directory /var/tmp/qemu-build/install/etc local state directory /var/tmp/qemu-build/install/var Manual directory /var/tmp/qemu-build/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /tmp/qemu-test/src C compiler cc Host C compiler cc C++ compiler Objective-C compiler cc ARFLAGS rv CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -I/usr/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g make make install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu aarch64-softmmu tcg debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support yes (1.2.14) GTK support no GTK GL support no VTE support no TLS priority NORMAL GNUTLS support no GNUTLS rnd no libgcrypt no libgcrypt kdf no nettle no nettle kdf no libtasn1 no curses support no virgl support no curl support no mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support no VNC PNG support no xen support no brlapi support no bluez support no Documentation no PIE yes vde support no netmap support no Linux AIO support no ATTR/XATTR support yes Install blobs yes KVM support yes HAX support no RDMA support no TCG interpreter no fdt support yes preadv support yes fdatasync yes madvise yes posix_madvise yes libcap-ng support no vhost-net support yes vhost-scsi support yes vhost-vsock support yes Trace backends log spice support no rbd support no xfsctl support no smartcard support no libusb no usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no build guest agent yes QGA VSS support no QGA w32 disk info no QGA MSI support no seccomp support no coroutine backend ucontext coroutine pool yes debug stack usage no GlusterFS support no gcov gcov gcov enabled no TPM support yes libssh2 support no TPM passthrough yes QOM debugging yes Live block migration yes lzo support no snappy support no bzip2 support no NUMA host support no tcmalloc support no jemalloc support no avx2 optimization no replication support yes VxHS block device no mkdir -p dtc/libfdt GEN x86_64-softmmu/config-devices.mak.tmp mkdir -p dtc/tests GEN config-host.h GEN aarch64-softmmu/config-devices.mak.tmp GEN qemu-options.def GEN qapi-visit.h GEN qmp-commands.h GEN qapi-types.h GEN qapi-event.h GEN x86_64-softmmu/config-devices.mak GEN qmp-marshal.c GEN aarch64-softmmu/config-devices.mak GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN backends/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/timer/trace.h GEN hw/input/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN backends/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN config-all-devices.mak DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c DEP /tmp/qemu-test/src/dtc/tests/trees.S DEP /tmp/qemu-test/src/dtc/tests/testutils.c DEP /tmp/qemu-test/src/dtc/tests/value-labels.c DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c DEP /tmp/qemu-test/src/dtc/tests/check_path.c DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c DEP /tmp/qemu-test/src/dtc/tests/overlay.c DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c DEP /tmp/qemu-test/src/dtc/tests/incbin.c DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c DEP /tmp/qemu-test/src/dtc/tests/path-references.c DEP /tmp/qemu-test/src/dtc/tests/references.c DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c DEP /tmp/qemu-test/src/dtc/tests/del_node.c DEP /tmp/qemu-test/src/dtc/tests/del_property.c DEP /tmp/qemu-test/src/dtc/tests/set_name.c DEP /tmp/qemu-test/src/dtc/tests/setprop.c DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/open_pack.c DEP /tmp/qemu-test/src/dtc/tests/nopulate.c DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/nop_node.c DEP /tmp/qemu-test/src/dtc/tests/nop_property.c DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c DEP /tmp/qemu-test/src/dtc/tests/stringlist.c DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c DEP /tmp/qemu-test/src/dtc/tests/notfound.c DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c DEP /tmp/qemu-test/src/dtc/tests/char_literal.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c DEP /tmp/qemu-test/src/dtc/tests/get_alias.c DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c DEP /tmp/qemu-test/src/dtc/tests/get_path.c DEP /tmp/qemu-test/src/dtc/tests/getprop.c DEP /tmp/qemu-test/src/dtc/tests/get_name.c DEP /tmp/qemu-test/src/dtc/tests/path_offset.c DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c DEP /tmp/qemu-test/src/dtc/tests/find_property.c DEP /tmp/qemu-test/src/dtc/tests/root_node.c DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c DEP /tmp/qemu-test/src/dtc/util.c DEP /tmp/qemu-test/src/dtc/fdtput.c DEP /tmp/qemu-test/src/dtc/fdtget.c LEX convert-dtsv0-lexer.lex.c DEP /tmp/qemu-test/src/dtc/srcpos.c make[1]: flex: Command not found DEP /tmp/qemu-test/src/dtc/fdtdump.c BISON dtc-parser.tab.c make[1]: bison: Command not found DEP /tmp/qemu-test/src/dtc/treesource.c LEX dtc-lexer.lex.c make[1]: flex: Command not found DEP /tmp/qemu-test/src/dtc/livetree.c DEP /tmp/qemu-test/src/dtc/fstree.c DEP /tmp/qemu-test/src/dtc/flattree.c DEP /tmp/qemu-test/src/dtc/dtc.c DEP /tmp/qemu-test/src/dtc/data.c DEP /tmp/qemu-test/src/dtc/checks.c CHK version_gen.h BISON dtc-parser.tab.c LEX convert-dtsv0-lexer.lex.c make[1]: flex: Command not found make[1]: bison: Command not found UPD version_gen.h LEX dtc-lexer.lex.c make[1]: flex: Command not found DEP /tmp/qemu-test/src/dtc/util.c LEX convert-dtsv0-lexer.lex.c BISON dtc-parser.tab.c make[1]: flex: Command not found make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found CC libfdt/fdt.o CC libfdt/fdt_ro.o CC libfdt/fdt_rw.o CC libfdt/fdt_sw.o CC libfdt/fdt_wip.o CC libfdt/fdt_strerror.o CC libfdt/fdt_empty_tree.o CC libfdt/fdt_addresses.o CC libfdt/fdt_overlay.o AR libfdt/libfdt.a ar: creating libfdt/libfdt.a a - libfdt/fdt.o a - libfdt/fdt_ro.o a - libfdt/fdt_wip.o a - libfdt/fdt_sw.o a - libfdt/fdt_rw.o a - libfdt/fdt_strerror.o a - libfdt/fdt_empty_tree.o a - libfdt/fdt_addresses.o a - libfdt/fdt_overlay.o LEX convert-dtsv0-lexer.lex.c BISON dtc-parser.tab.c make[1]: flex: Command not found LEX dtc-lexer.lex.c make[1]: bison: Command not found make[1]: flex: Command not found CC tests/qemu-iotests/socket_scm_helper.o GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qapi-visit.c GEN qga/qapi-generated/qga-qmp-marshal.c CC qmp-introspect.o CC qapi-types.o CC qapi-visit.o CC qapi-event.o CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qapi-util.o CC qapi/opts-visitor.o CC qapi/qmp-event.o CC qobject/qnull.o CC qobject/qint.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qfloat.o CC qobject/qbool.o CC qobject/qjson.o CC qobject/qobject.o CC qobject/json-streamer.o CC qobject/json-lexer.o CC qobject/json-parser.o CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/lockcnt.o CC util/aiocb.o CC util/thread-pool.o CC util/async.o CC util/qemu-timer.o CC util/main-loop.o CC util/iohandler.o CC util/aio-posix.o CC util/compatfd.o CC util/event_notifier-posix.o CC util/mmap-alloc.o CC util/oslib-posix.o CC util/qemu-openpty.o CC util/qemu-thread-posix.o CC util/memfd.o CC util/envlist.o CC util/path.o CC util/module.o CC util/host-utils.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/keyval.o CC util/hexdump.o CC util/crc32c.o CC util/uuid.o CC util/getauxval.o CC util/throttle.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-ucontext.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC util/systemd.o CC trace-root.o CC util/trace.o CC crypto/trace.o CC io/trace.o CC migration/trace.o CC block/trace.o CC backends/trace.o CC hw/block/trace.o CC hw/block/dataplane/trace.o CC hw/char/trace.o CC hw/net/trace.o CC hw/intc/trace.o CC hw/virtio/trace.o CC hw/audio/trace.o CC hw/misc/trace.o CC hw/usb/trace.o CC hw/scsi/trace.o CC hw/nvram/trace.o CC hw/display/trace.o CC hw/input/trace.o CC hw/timer/trace.o CC hw/dma/trace.o CC hw/sparc/trace.o CC hw/sd/trace.o CC hw/isa/trace.o CC hw/mem/trace.o CC hw/i386/trace.o CC hw/i386/xen/trace.o CC hw/9pfs/trace.o CC hw/pci/trace.o CC hw/ppc/trace.o CC hw/s390x/trace.o CC hw/vfio/trace.o CC hw/acpi/trace.o CC hw/arm/trace.o CC hw/alpha/trace.o CC hw/xen/trace.o CC audio/trace.o CC ui/trace.o CC net/trace.o CC target/arm/trace.o CC target/i386/trace.o CC target/mips/trace.o CC target/sparc/trace.o CC target/s390x/trace.o CC target/ppc/trace.o CC qom/trace.o CC linux-user/trace.o CC qapi/trace.o CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset.o CC stubs/gdbstub.o CC stubs/get-vm-name.o CC stubs/iothread.o CC stubs/is-daemonized.o CC stubs/iothread-lock.o CC stubs/machine-init-done.o CC stubs/migr-blocker.o CC stubs/monitor.o CC stubs/notify-event.o CC stubs/qtest.o CC stubs/replay.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/uuid.o CC stubs/vm-stop.o CC stubs/vmstate.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-monitor-defs.o CC stubs/target-get-monitor-def.o CC stubs/pc_madt_cpu_entry.o CC stubs/vmgenid.o CC stubs/xen-common.o CC stubs/xen-hvm.o CC contrib/ivshmem-client/ivshmem-client.o CC contrib/ivshmem-client/main.o CC contrib/ivshmem-server/ivshmem-server.o CC contrib/ivshmem-server/main.o CC qemu-nbd.o CC blockjob.o CC block.o CC qemu-io-cmds.o CC replication.o CC block/raw-format.o CC block/qcow.o CC block/vmdk.o CC block/vdi.o CC block/cloop.o CC block/bochs.o CC block/vpc.o CC block/vvfat.o CC block/dmg.o CC block/qcow2.o CC block/qcow2-refcount.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-cache.o CC block/qed.o CC block/qed-gencb.o CC block/qed-l2-cache.o CC block/qed-table.o CC block/qed-cluster.o CC block/qed-check.o CC block/vhdx.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/block-backend.o CC block/snapshot.o CC block/qapi.o CC block/file-posix.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/throttle-groups.o CC block/nbd.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/write-threshold.o CC block/backup.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-glib.o CC crypto/hmac.o CC crypto/hmac-glib.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/tlssession.o CC crypto/secret.o CC crypto/random-platform.o CC crypto/pbkdf.o CC crypto/ivgen.o CC crypto/ivgen-essiv.o CC crypto/ivgen-plain.o CC crypto/ivgen-plain64.o CC crypto/afsplit.o CC crypto/xts.o CC crypto/block.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel.o CC io/channel-buffer.o CC io/channel-command.o CC io/channel-file.o CC io/channel-socket.o CC io/channel-tls.o CC io/channel-util.o CC io/channel-watch.o CC io/channel-websock.o CC io/dns-resolver.o CC io/task.o CC qom/object.o CC qom/container.o CC qom/qom-qobject.o CC qom/object_interfaces.o GEN qemu-img-cmds.h CC qemu-io.o CC qemu-bridge-helper.o CC blockdev.o CC blockdev-nbd.o CC iothread.o CC qdev-monitor.o CC device-hotplug.o CC os-posix.o CC accel.o CC bt-host.o CC bt-vhci.o CC dma-helpers.o CC vl.o CC tpm.o CC device_tree.o CC qmp-marshal.o CC qmp.o CC hmp.o CC cpus-common.o CC audio/audio.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/mixeng.o CC audio/wavcapture.o CC audio/sdlaudio.o CC audio/ossaudio.o CC backends/rng.o CC backends/rng-egd.o CC backends/rng-random.o CC backends/msmouse.o CC backends/wctablet.o CC backends/testdev.o CC backends/tpm.o CC backends/hostmem.o CC backends/hostmem-ram.o CC backends/hostmem-file.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC disas/arm.o CC disas/i386.o CC fsdev/qemu-fsdev-dummy.o CC fsdev/qemu-fsdev-opts.o CC fsdev/qemu-fsdev-throttle.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/pcihp.o CC hw/acpi/ich9.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/tco.o CC hw/acpi/memory_hotplug.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/vmgenid.o CC hw/acpi/acpi_interface.o CC hw/acpi/aml-build.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/ipmi.o CC hw/acpi/acpi-stub.o CC hw/acpi/ipmi-stub.o CC hw/audio/sb16.o CC hw/audio/es1370.o CC hw/audio/ac97.o CC hw/audio/adlib.o CC hw/audio/fmopl.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/hda-codec.o CC hw/audio/pcspk.o CC hw/audio/pl041.o CC hw/audio/wm8750.o CC hw/audio/lm4549.o CC hw/audio/marvell_88w8618.o CC hw/audio/soundhw.o CC hw/block/block.o CC hw/block/hd-geometry.o CC hw/block/cdrom.o CC hw/block/fdc.o CC hw/block/m25p80.o CC hw/block/nand.o CC hw/block/pflash_cfi01.o CC hw/block/pflash_cfi02.o CC hw/block/ecc.o CC hw/block/nvme.o CC hw/block/onenand.o CC hw/bt/l2cap.o CC hw/bt/core.o CC hw/bt/sdp.o CC hw/bt/hci.o CC hw/bt/hid.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/pl011.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/cadence_uart.o CC hw/char/debugcon.o CC hw/char/imx_serial.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/reset.o CC hw/core/fw-path-provider.o CC hw/core/bus.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/ptimer.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/core/platform-bus.o CC hw/display/cirrus_vga.o CC hw/display/ads7846.o CC hw/display/pl110.o CC hw/display/ssd0303.o CC hw/display/ssd0323.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/display/blizzard.o CC hw/display/exynos4210_fimd.o CC hw/display/framebuffer.o CC hw/display/tc6393xb.o CC hw/dma/pl080.o CC hw/dma/pl330.o CC hw/dma/i8257.o CC hw/dma/xlnx-zynq-devcfg.o CC hw/gpio/max7310.o CC hw/gpio/pl061.o CC hw/gpio/zaurus.o CC hw/gpio/gpio_key.o CC hw/i2c/core.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/smbus.o CC hw/i2c/i2c-ddc.o CC hw/i2c/smbus_ich9.o CC hw/i2c/versatile_i2c.o CC hw/i2c/pm_smbus.o CC hw/i2c/bitbang_i2c.o CC hw/i2c/exynos4210_i2c.o CC hw/i2c/imx_i2c.o CC hw/ide/core.o CC hw/i2c/aspeed_i2c.o CC hw/ide/atapi.o CC hw/ide/qdev.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/microdrive.o CC hw/ide/ahci.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/lm832x.o CC hw/input/pckbd.o CC hw/input/pl050.o CC hw/input/ps2.o CC hw/input/stellaris_input.o CC hw/input/tsc2005.o CC hw/input/vmmouse.o CC hw/input/virtio-input-hid.o CC hw/input/virtio-input.o CC hw/intc/i8259_common.o CC hw/input/virtio-input-host.o CC hw/intc/i8259.o CC hw/intc/pl190.o CC hw/intc/imx_avic.o CC hw/intc/realview_gic.o CC hw/intc/ioapic_common.o CC hw/intc/arm_gic_common.o CC hw/intc/arm_gic.o CC hw/intc/arm_gicv3_common.o CC hw/intc/arm_gicv2m.o CC hw/intc/arm_gicv3.o CC hw/intc/arm_gicv3_its_common.o CC hw/intc/arm_gicv3_dist.o CC hw/intc/arm_gicv3_redist.o CC hw/intc/intc.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/isa/apm.o CC hw/isa/isa-bus.o CC hw/ipmi/isa_ipmi_bt.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/mem/pc-dimm.o CC hw/misc/max111x.o CC hw/misc/applesmc.o CC hw/misc/debugexit.o CC hw/mem/nvdimm.o CC hw/misc/sga.o CC hw/misc/tmp105.o CC hw/misc/pci-testdev.o CC hw/misc/pc-testdev.o CC hw/misc/unimp.o CC hw/misc/arm_l2x0.o CC hw/misc/arm_integrator_debug.o CC hw/misc/a9scu.o CC hw/misc/arm11scu.o CC hw/net/eepro100.o CC hw/net/ne2000.o CC hw/net/pcnet-pci.o CC hw/net/pcnet.o CC hw/net/e1000x_common.o CC hw/net/e1000.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/vmxnet3.o CC hw/net/smc91c111.o CC hw/net/lan9118.o CC hw/net/ne2000-isa.o CC hw/net/allwinner_emac.o CC hw/net/xgmac.o CC hw/net/imx_fec.o CC hw/net/stellaris_enet.o CC hw/net/cadence_gem.o CC hw/net/ftgmac100.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pcie_root_port.o CC hw/pci-bridge/gen_pcie_root_port.o CC hw/pci-bridge/pci_expander_bridge.o CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/pam.o CC hw/pci-host/versatile.o CC hw/pci-host/piix.o CC hw/pci-host/q35.o CC hw/pci-host/gpex.o CC hw/pci/pci.o CC hw/pci/msix.o CC hw/pci/pci_bridge.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie_aer.o CC hw/pci/pcie.o CC hw/pci/pcie_port.o CC hw/pcmcia/pcmcia.o CC hw/pci/pci-stub.o CC hw/scsi/scsi-disk.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/vmw_pvscsi.o CC hw/scsi/megasas.o CC hw/scsi/esp.o CC hw/scsi/esp-pci.o CC hw/sd/pl181.o CC hw/sd/ssi-sd.o CC hw/sd/sd.o CC hw/sd/core.o CC hw/sd/sdhci.o CC hw/smbios/smbios.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios-stub.o CC hw/smbios/smbios_type_38-stub.o CC hw/ssi/pl022.o CC hw/ssi/ssi.o CC hw/ssi/xilinx_spips.o CC hw/ssi/aspeed_smc.o CC hw/timer/arm_timer.o CC hw/ssi/stm32f2xx_spi.o CC hw/timer/arm_mptimer.o CC hw/timer/armv7m_systick.o CC hw/timer/a9gtimer.o CC hw/timer/cadence_ttc.o CC hw/timer/ds1338.o CC hw/timer/hpet.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/timer/twl92230.o CC hw/timer/pl031.o CC hw/timer/imx_epit.o CC hw/timer/imx_gpt.o CC hw/timer/stm32f2xx_timer.o CC hw/timer/aspeed_timer.o CC hw/tpm/tpm_tis.o CC hw/tpm/tpm_passthrough.o CC hw/tpm/tpm_util.o CC hw/usb/core.o CC hw/usb/combined-packet.o CC hw/usb/bus.o CC hw/usb/libhw.o CC hw/usb/desc.o CC hw/usb/desc-msos.o CC hw/usb/hcd-uhci.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci-sysbus.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-musb.o CC hw/usb/hcd-xhci-nec.o CC hw/usb/dev-hub.o CC hw/usb/dev-hid.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-serial.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/dev-mtp.o CC hw/usb/host-stub.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-pci.o CC hw/virtio/virtio-bus.o CC hw/virtio/virtio-mmio.o CC hw/virtio/vhost-stub.o CC hw/watchdog/watchdog.o CC hw/watchdog/wdt_i6300esb.o CC hw/watchdog/wdt_ib700.o CC hw/watchdog/wdt_aspeed.o CC migration/migration.o CC migration/socket.o CC migration/exec.o CC migration/fd.o CC migration/tls.o CC migration/channel.o CC migration/savevm.o CC migration/colo-comm.o CC migration/colo.o CC migration/colo-failover.o CC migration/vmstate.o CC migration/vmstate-types.o CC migration/page_cache.o CC migration/qemu-file.o CC migration/qemu-file-channel.o CC migration/xbzrle.o CC migration/postcopy-ram.o CC migration/qjson.o CC migration/block.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/eth.o CC net/l2tpv3.o CC net/vhost-user.o CC net/slirp.o CC net/filter.o CC net/filter-buffer.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-replay.o CC net/filter-rewriter.o CC net/tap.o CC net/tap-linux.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-time.o CC replay/replay-input.o CC replay/replay-char.o /tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’: /tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result CC replay/replay-snapshot.o CC replay/replay-net.o CC replay/replay-audio.o CC slirp/cksum.o CC slirp/if.o CC slirp/ip_icmp.o CC slirp/ip6_icmp.o CC slirp/ip6_output.o CC slirp/ip6_input.o CC slirp/ip_input.o CC slirp/ip_output.o CC slirp/dnssearch.o CC slirp/dhcpv6.o CC slirp/slirp.o CC slirp/mbuf.o CC slirp/misc.o CC slirp/sbuf.o CC slirp/socket.o CC slirp/tcp_input.o CC slirp/tcp_output.o CC slirp/tcp_subr.o CC slirp/tcp_timer.o CC slirp/udp.o CC slirp/udp6.o /tmp/qemu-test/src/slirp/tcp_input.c: In function ‘tcp_input’: /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_p’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_len’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_tos’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_id’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_off’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_ttl’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_sum’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_src.s_addr’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_dst.s_addr’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:220: warning: ‘save_ip6.ip_nh’ may be used uninitialized in this function CC slirp/bootp.o CC slirp/tftp.o CC slirp/arp_table.o CC slirp/ndp_table.o CC slirp/ncsi.o CC ui/keymaps.o CC ui/cursor.o CC ui/console.o CC ui/qemu-pixman.o CC ui/input.o CC ui/input-keymap.o CC ui/input-legacy.o CC ui/input-linux.o CC ui/sdl.o CC ui/sdl_zoom.o CC ui/x_keymap.o CC ui/vnc.o CC ui/vnc-enc-zlib.o CC ui/vnc-enc-hextile.o CC ui/vnc-enc-tight.o CC ui/vnc-palette.o CC ui/vnc-enc-zrle.o CC ui/vnc-ws.o CC ui/vnc-auth-vencrypt.o CC ui/vnc-jobs.o CC chardev/char.o CC chardev/char-fd.o CC chardev/char-file.o CC chardev/char-io.o CC chardev/char-mux.o CC chardev/char-null.o CC chardev/char-parallel.o CC chardev/char-pipe.o CC chardev/char-pty.o CC chardev/char-ringbuf.o CC chardev/char-socket.o CC chardev/char-serial.o CC chardev/char-stdio.o CC chardev/char-udp.o LINK tests/qemu-iotests/socket_scm_helper CC qga/commands.o CC qga/main.o CC qga/guest-agent-command-state.o CC qga/commands-posix.o CC qga/channel-posix.o CC qga/qapi-generated/qga-qapi-types.o CC qga/qapi-generated/qga-qapi-visit.o AS optionrom/multiboot.o AS optionrom/linuxboot.o CC optionrom/linuxboot_dma.o cc: unrecognized option '-no-integrated-as' cc: unrecognized option '-no-integrated-as' AS optionrom/kvmvapic.o BUILD optionrom/multiboot.img BUILD optionrom/linuxboot.img BUILD optionrom/linuxboot_dma.img BUILD optionrom/kvmvapic.img BUILD optionrom/multiboot.raw BUILD optionrom/linuxboot.raw BUILD optionrom/linuxboot_dma.raw CC qga/qapi-generated/qga-qmp-marshal.o BUILD optionrom/kvmvapic.raw AR libqemuutil.a AR libqemustub.a CC qemu-img.o SIGN optionrom/kvmvapic.bin SIGN optionrom/linuxboot.bin SIGN optionrom/linuxboot_dma.bin SIGN optionrom/multiboot.bin LINK qemu-io LINK qemu-bridge-helper LINK ivshmem-client LINK ivshmem-server GEN x86_64-softmmu/hmp-commands.h GEN aarch64-softmmu/hmp-commands.h LINK qemu-nbd GEN aarch64-softmmu/hmp-commands-info.h GEN aarch64-softmmu/config-target.h CC aarch64-softmmu/exec.o GEN x86_64-softmmu/hmp-commands-info.h GEN x86_64-softmmu/config-target.h CC x86_64-softmmu/exec.o LINK qemu-img CC aarch64-softmmu/translate-all.o CC aarch64-softmmu/cpu-exec.o CC x86_64-softmmu/translate-all.o CC aarch64-softmmu/translate-common.o LINK qemu-ga CC aarch64-softmmu/cpu-exec-common.o CC x86_64-softmmu/cpu-exec.o CC x86_64-softmmu/translate-common.o CC aarch64-softmmu/tcg/tcg.o CC x86_64-softmmu/cpu-exec-common.o CC aarch64-softmmu/tcg/tcg-op.o CC x86_64-softmmu/tcg/tcg.o CC aarch64-softmmu/tcg/optimize.o CC aarch64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/tcg/tcg-op.o CC x86_64-softmmu/tcg/optimize.o CC x86_64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/fpu/softfloat.o CC x86_64-softmmu/disas.o CC x86_64-softmmu/tcg-runtime.o GEN x86_64-softmmu/gdbstub-xml.c CC aarch64-softmmu/fpu/softfloat.o CC aarch64-softmmu/disas.o CC x86_64-softmmu/hax-stub.o CC aarch64-softmmu/tcg-runtime.o GEN aarch64-softmmu/gdbstub-xml.c CC aarch64-softmmu/hax-stub.o CC x86_64-softmmu/arch_init.o CC aarch64-softmmu/kvm-stub.o CC x86_64-softmmu/cpus.o CC x86_64-softmmu/monitor.o CC aarch64-softmmu/arch_init.o CC x86_64-softmmu/gdbstub.o CC x86_64-softmmu/balloon.o CC aarch64-softmmu/cpus.o CC x86_64-softmmu/ioport.o CC aarch64-softmmu/monitor.o CC aarch64-softmmu/gdbstub.o CC x86_64-softmmu/numa.o CC x86_64-softmmu/qtest.o CC x86_64-softmmu/bootdevice.o CC x86_64-softmmu/kvm-all.o CC x86_64-softmmu/memory.o CC x86_64-softmmu/cputlb.o CC x86_64-softmmu/memory_mapping.o CC aarch64-softmmu/balloon.o CC x86_64-softmmu/dump.o CC x86_64-softmmu/migration/ram.o CC aarch64-softmmu/ioport.o CC x86_64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o CC x86_64-softmmu/hw/char/virtio-serial-bus.o CC aarch64-softmmu/numa.o CC aarch64-softmmu/qtest.o CC x86_64-softmmu/hw/core/nmi.o CC x86_64-softmmu/hw/core/generic-loader.o CC x86_64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/hw/cpu/core.o CC x86_64-softmmu/hw/display/vga.o CC x86_64-softmmu/hw/display/virtio-gpu.o CC aarch64-softmmu/bootdevice.o CC x86_64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/display/virtio-gpu-pci.o CC x86_64-softmmu/hw/display/virtio-vga.o CC x86_64-softmmu/hw/intc/apic.o CC x86_64-softmmu/hw/intc/apic_common.o CC aarch64-softmmu/memory.o CC x86_64-softmmu/hw/intc/ioapic.o CC x86_64-softmmu/hw/isa/lpc_ich9.o CC x86_64-softmmu/hw/misc/vmport.o CC x86_64-softmmu/hw/misc/ivshmem.o CC aarch64-softmmu/cputlb.o CC x86_64-softmmu/hw/misc/pvpanic.o CC x86_64-softmmu/hw/misc/edu.o CC x86_64-softmmu/hw/misc/hyperv_testdev.o CC x86_64-softmmu/hw/net/virtio-net.o CC aarch64-softmmu/memory_mapping.o CC x86_64-softmmu/hw/net/vhost_net.o CC x86_64-softmmu/hw/scsi/virtio-scsi.o CC aarch64-softmmu/dump.o CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC x86_64-softmmu/hw/scsi/vhost-scsi-common.o CC x86_64-softmmu/hw/scsi/vhost-scsi.o CC aarch64-softmmu/migration/ram.o CC x86_64-softmmu/hw/timer/mc146818rtc.o CC x86_64-softmmu/hw/vfio/common.o CC x86_64-softmmu/hw/vfio/pci.o CC x86_64-softmmu/hw/vfio/pci-quirks.o CC x86_64-softmmu/hw/vfio/platform.o CC x86_64-softmmu/hw/vfio/spapr.o CC x86_64-softmmu/hw/virtio/virtio.o CC x86_64-softmmu/hw/virtio/virtio-balloon.o CC x86_64-softmmu/hw/virtio/vhost.o CC x86_64-softmmu/hw/virtio/vhost-backend.o CC x86_64-softmmu/hw/virtio/vhost-user.o CC x86_64-softmmu/hw/virtio/vhost-vsock.o CC x86_64-softmmu/hw/virtio/virtio-crypto.o CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o CC x86_64-softmmu/hw/i386/multiboot.o CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o CC aarch64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/hw/i386/pc.o CC x86_64-softmmu/hw/i386/pc_piix.o CC x86_64-softmmu/hw/i386/pc_sysfw.o CC x86_64-softmmu/hw/i386/pc_q35.o CC x86_64-softmmu/hw/i386/x86-iommu.o CC x86_64-softmmu/hw/i386/intel_iommu.o /tmp/qemu-test/src/hw/i386/pc_piix.c: In function ‘igd_passthrough_isa_bridge_create’: /tmp/qemu-test/src/hw/i386/pc_piix.c:1067: warning: ‘pch_rev_id’ may be used uninitialized in this function CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o CC aarch64-softmmu/hw/char/exynos4210_uart.o CC aarch64-softmmu/hw/char/omap_uart.o CC aarch64-softmmu/hw/char/digic-uart.o CC aarch64-softmmu/hw/char/stm32f2xx_usart.o CC aarch64-softmmu/hw/char/bcm2835_aux.o CC aarch64-softmmu/hw/char/virtio-serial-bus.o CC aarch64-softmmu/hw/core/nmi.o CC x86_64-softmmu/hw/i386/amd_iommu.o CC aarch64-softmmu/hw/core/generic-loader.o CC aarch64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/hw/i386/kvmvapic.o CC aarch64-softmmu/hw/cpu/arm11mpcore.o CC aarch64-softmmu/hw/cpu/realview_mpcore.o CC aarch64-softmmu/hw/cpu/a9mpcore.o CC aarch64-softmmu/hw/cpu/a15mpcore.o CC x86_64-softmmu/hw/i386/acpi-build.o CC aarch64-softmmu/hw/display/omap_dss.o CC aarch64-softmmu/hw/cpu/core.o CC aarch64-softmmu/hw/display/omap_lcdc.o CC aarch64-softmmu/hw/display/pxa2xx_lcd.o CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o /tmp/qemu-test/src/hw/i386/acpi-build.c: In function ‘build_append_pci_bus_devices’: /tmp/qemu-test/src/hw/i386/acpi-build.c:525: warning: ‘notify_method’ may be used uninitialized in this function CC aarch64-softmmu/hw/display/bcm2835_fb.o CC aarch64-softmmu/hw/display/vga.o CC aarch64-softmmu/hw/display/virtio-gpu.o CC aarch64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/i386/kvm/clock.o CC x86_64-softmmu/hw/i386/kvm/apic.o CC x86_64-softmmu/hw/i386/kvm/i8259.o CC x86_64-softmmu/hw/i386/kvm/ioapic.o CC x86_64-softmmu/hw/i386/kvm/i8254.o CC x86_64-softmmu/hw/i386/kvm/pci-assign.o CC aarch64-softmmu/hw/display/virtio-gpu-pci.o CC aarch64-softmmu/hw/display/dpcd.o CC aarch64-softmmu/hw/display/xlnx_dp.o CC x86_64-softmmu/target/i386/translate.o CC x86_64-softmmu/target/i386/helper.o CC aarch64-softmmu/hw/dma/xlnx_dpdma.o CC aarch64-softmmu/hw/dma/omap_dma.o CC aarch64-softmmu/hw/dma/soc_dma.o CC x86_64-softmmu/target/i386/cpu.o CC aarch64-softmmu/hw/dma/pxa2xx_dma.o CC x86_64-softmmu/target/i386/bpt_helper.o CC aarch64-softmmu/hw/dma/bcm2835_dma.o CC aarch64-softmmu/hw/gpio/omap_gpio.o CC x86_64-softmmu/target/i386/excp_helper.o CC aarch64-softmmu/hw/gpio/imx_gpio.o CC x86_64-softmmu/target/i386/fpu_helper.o CC x86_64-softmmu/target/i386/cc_helper.o CC x86_64-softmmu/target/i386/int_helper.o CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o CC x86_64-softmmu/target/i386/svm_helper.o CC aarch64-softmmu/hw/i2c/omap_i2c.o CC x86_64-softmmu/target/i386/smm_helper.o CC aarch64-softmmu/hw/input/pxa2xx_keypad.o CC aarch64-softmmu/hw/input/tsc210x.o CC x86_64-softmmu/target/i386/misc_helper.o CC aarch64-softmmu/hw/intc/armv7m_nvic.o CC x86_64-softmmu/target/i386/mem_helper.o CC aarch64-softmmu/hw/intc/exynos4210_gic.o CC x86_64-softmmu/target/i386/seg_helper.o CC x86_64-softmmu/target/i386/mpx_helper.o CC aarch64-softmmu/hw/intc/exynos4210_combiner.o CC x86_64-softmmu/target/i386/gdbstub.o CC x86_64-softmmu/target/i386/machine.o CC aarch64-softmmu/hw/intc/omap_intc.o CC x86_64-softmmu/target/i386/arch_memory_mapping.o CC aarch64-softmmu/hw/intc/bcm2835_ic.o CC x86_64-softmmu/target/i386/arch_dump.o CC x86_64-softmmu/target/i386/monitor.o CC x86_64-softmmu/target/i386/kvm.o CC x86_64-softmmu/target/i386/hyperv.o GEN trace/generated-helpers.c CC aarch64-softmmu/hw/intc/bcm2836_control.o CC x86_64-softmmu/trace/control-target.o CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o CC x86_64-softmmu/gdbstub-xml.o CC aarch64-softmmu/hw/intc/aspeed_vic.o CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o CC x86_64-softmmu/trace/generated-helpers.o CC aarch64-softmmu/hw/misc/ivshmem.o CC aarch64-softmmu/hw/misc/arm_sysctl.o CC aarch64-softmmu/hw/misc/cbus.o CC aarch64-softmmu/hw/misc/exynos4210_pmu.o CC aarch64-softmmu/hw/misc/exynos4210_clk.o CC aarch64-softmmu/hw/misc/imx_ccm.o CC aarch64-softmmu/hw/misc/imx31_ccm.o CC aarch64-softmmu/hw/misc/imx25_ccm.o CC aarch64-softmmu/hw/misc/imx6_ccm.o CC aarch64-softmmu/hw/misc/imx6_src.o CC aarch64-softmmu/hw/misc/omap_clk.o CC aarch64-softmmu/hw/misc/mst_fpga.o CC aarch64-softmmu/hw/misc/omap_gpmc.o CC aarch64-softmmu/hw/misc/omap_l4.o CC aarch64-softmmu/hw/misc/omap_sdrc.o CC aarch64-softmmu/hw/misc/omap_tap.o CC aarch64-softmmu/hw/misc/bcm2835_mbox.o CC aarch64-softmmu/hw/misc/bcm2835_property.o CC aarch64-softmmu/hw/misc/bcm2835_rng.o CC aarch64-softmmu/hw/misc/zynq_slcr.o CC aarch64-softmmu/hw/misc/zynq-xadc.o CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o CC aarch64-softmmu/hw/misc/auxbus.o CC aarch64-softmmu/hw/misc/edu.o CC aarch64-softmmu/hw/misc/aspeed_scu.o CC aarch64-softmmu/hw/misc/aspeed_sdmc.o CC aarch64-softmmu/hw/net/virtio-net.o CC aarch64-softmmu/hw/net/vhost_net.o CC aarch64-softmmu/hw/pcmcia/pxa2xx.o CC aarch64-softmmu/hw/scsi/virtio-scsi.o CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC aarch64-softmmu/hw/scsi/vhost-scsi-common.o CC aarch64-softmmu/hw/scsi/vhost-scsi.o CC aarch64-softmmu/hw/sd/omap_mmc.o CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o CC aarch64-softmmu/hw/ssi/omap_spi.o CC aarch64-softmmu/hw/ssi/imx_spi.o CC aarch64-softmmu/hw/timer/exynos4210_mct.o CC aarch64-softmmu/hw/timer/exynos4210_pwm.o CC aarch64-softmmu/hw/timer/exynos4210_rtc.o CC aarch64-softmmu/hw/timer/omap_synctimer.o CC aarch64-softmmu/hw/timer/omap_gptimer.o CC aarch64-softmmu/hw/timer/pxa2xx_timer.o CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o CC aarch64-softmmu/hw/timer/digic-timer.o LINK x86_64-softmmu/qemu-system-x86_64 CC aarch64-softmmu/hw/usb/tusb6010.o CC aarch64-softmmu/hw/vfio/pci.o CC aarch64-softmmu/hw/vfio/common.o CC aarch64-softmmu/hw/vfio/pci-quirks.o CC aarch64-softmmu/hw/vfio/platform.o CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o CC aarch64-softmmu/hw/vfio/amd-xgbe.o CC aarch64-softmmu/hw/vfio/spapr.o CC aarch64-softmmu/hw/virtio/virtio.o CC aarch64-softmmu/hw/virtio/virtio-balloon.o CC aarch64-softmmu/hw/virtio/vhost.o CC aarch64-softmmu/hw/virtio/vhost-backend.o CC aarch64-softmmu/hw/virtio/vhost-vsock.o CC aarch64-softmmu/hw/virtio/vhost-user.o CC aarch64-softmmu/hw/virtio/virtio-crypto.o CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o CC aarch64-softmmu/hw/arm/boot.o CC aarch64-softmmu/hw/arm/collie.o CC aarch64-softmmu/hw/arm/exynos4_boards.o CC aarch64-softmmu/hw/arm/gumstix.o CC aarch64-softmmu/hw/arm/highbank.o CC aarch64-softmmu/hw/arm/digic_boards.o CC aarch64-softmmu/hw/arm/mainstone.o CC aarch64-softmmu/hw/arm/integratorcp.o CC aarch64-softmmu/hw/arm/musicpal.o CC aarch64-softmmu/hw/arm/nseries.o CC aarch64-softmmu/hw/arm/omap_sx1.o CC aarch64-softmmu/hw/arm/palm.o CC aarch64-softmmu/hw/arm/stellaris.o CC aarch64-softmmu/hw/arm/spitz.o CC aarch64-softmmu/hw/arm/realview.o CC aarch64-softmmu/hw/arm/versatilepb.o CC aarch64-softmmu/hw/arm/tosa.o CC aarch64-softmmu/hw/arm/vexpress.o CC aarch64-softmmu/hw/arm/virt.o CC aarch64-softmmu/hw/arm/xilinx_zynq.o CC aarch64-softmmu/hw/arm/z2.o CC aarch64-softmmu/hw/arm/virt-acpi-build.o CC aarch64-softmmu/hw/arm/netduino2.o CC aarch64-softmmu/hw/arm/sysbus-fdt.o CC aarch64-softmmu/hw/arm/armv7m.o CC aarch64-softmmu/hw/arm/exynos4210.o CC aarch64-softmmu/hw/arm/pxa2xx.o CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o CC aarch64-softmmu/hw/arm/digic.o CC aarch64-softmmu/hw/arm/pxa2xx_pic.o CC aarch64-softmmu/hw/arm/omap1.o CC aarch64-softmmu/hw/arm/omap2.o CC aarch64-softmmu/hw/arm/strongarm.o CC aarch64-softmmu/hw/arm/allwinner-a10.o CC aarch64-softmmu/hw/arm/cubieboard.o CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o CC aarch64-softmmu/hw/arm/bcm2836.o CC aarch64-softmmu/hw/arm/raspi.o CC aarch64-softmmu/hw/arm/stm32f205_soc.o CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o CC aarch64-softmmu/hw/arm/xlnx-ep108.o CC aarch64-softmmu/hw/arm/fsl-imx25.o CC aarch64-softmmu/hw/arm/imx25_pdk.o CC aarch64-softmmu/hw/arm/kzm.o CC aarch64-softmmu/hw/arm/sabrelite.o CC aarch64-softmmu/hw/arm/fsl-imx6.o CC aarch64-softmmu/hw/arm/aspeed_soc.o CC aarch64-softmmu/hw/arm/fsl-imx31.o CC aarch64-softmmu/hw/arm/aspeed.o CC aarch64-softmmu/target/arm/arm-semi.o CC aarch64-softmmu/target/arm/arch_dump.o CC aarch64-softmmu/target/arm/machine.o CC aarch64-softmmu/target/arm/psci.o CC aarch64-softmmu/target/arm/kvm-stub.o CC aarch64-softmmu/target/arm/translate.o CC aarch64-softmmu/target/arm/monitor.o CC aarch64-softmmu/target/arm/op_helper.o CC aarch64-softmmu/target/arm/helper.o CC aarch64-softmmu/target/arm/cpu.o CC aarch64-softmmu/target/arm/gdbstub.o CC aarch64-softmmu/target/arm/iwmmxt_helper.o CC aarch64-softmmu/target/arm/neon_helper.o CC aarch64-softmmu/target/arm/cpu64.o CC aarch64-softmmu/target/arm/arm-powerctl.o CC aarch64-softmmu/target/arm/helper-a64.o CC aarch64-softmmu/target/arm/gdbstub64.o CC aarch64-softmmu/target/arm/translate-a64.o CC aarch64-softmmu/target/arm/crypto_helper.o CC aarch64-softmmu/trace/control-target.o GEN trace/generated-helpers.c CC aarch64-softmmu/gdbstub-xml.o CC aarch64-softmmu/trace/generated-helpers.o /tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘handle_shri_with_rndacc’: /tmp/qemu-test/src/target/arm/translate-a64.c:6359: warning: ‘tcg_src_hi’ may be used uninitialized in this function /tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘disas_simd_scalar_two_reg_misc’: /tmp/qemu-test/src/target/arm/translate-a64.c:8086: warning: ‘rmode’ may be used uninitialized in this function LINK aarch64-softmmu/qemu-system-aarch64 LEX convert-dtsv0-lexer.lex.c BISON dtc-parser.tab.c make[1]: flex: Command not found make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found TEST tests/qapi-schema/alternate-base.out TEST tests/qapi-schema/alternate-any.out TEST tests/qapi-schema/alternate-array.out TEST tests/qapi-schema/alternate-conflict-string.out TEST tests/qapi-schema/alternate-conflict-dict.out TEST tests/qapi-schema/alternate-empty.out TEST tests/qapi-schema/alternate-clash.out TEST tests/qapi-schema/alternate-nested.out TEST tests/qapi-schema/alternate-unknown.out TEST tests/qapi-schema/args-alternate.out TEST tests/qapi-schema/args-any.out TEST tests/qapi-schema/args-array-empty.out TEST tests/qapi-schema/args-array-unknown.out TEST tests/qapi-schema/args-bad-boxed.out TEST tests/qapi-schema/args-boxed-anon.out TEST tests/qapi-schema/args-boxed-empty.out TEST tests/qapi-schema/args-boxed-string.out TEST tests/qapi-schema/args-int.out TEST tests/qapi-schema/args-invalid.out TEST tests/qapi-schema/args-member-array-bad.out TEST tests/qapi-schema/args-member-case.out TEST tests/qapi-schema/args-name-clash.out TEST tests/qapi-schema/args-member-unknown.out TEST tests/qapi-schema/args-union.out TEST tests/qapi-schema/args-unknown.out TEST tests/qapi-schema/bad-base.out TEST tests/qapi-schema/bad-data.out TEST tests/qapi-schema/bad-ident.out TEST tests/qapi-schema/bad-type-bool.out TEST tests/qapi-schema/bad-type-dict.out TEST tests/qapi-schema/bad-type-int.out TEST tests/qapi-schema/base-cycle-direct.out TEST tests/qapi-schema/base-cycle-indirect.out TEST tests/qapi-schema/command-int.out TEST tests/qapi-schema/comments.out TEST tests/qapi-schema/doc-bad-alternate-member.out TEST tests/qapi-schema/doc-bad-command-arg.out TEST tests/qapi-schema/doc-bad-union-member.out TEST tests/qapi-schema/doc-bad-symbol.out TEST tests/qapi-schema/doc-before-include.out TEST tests/qapi-schema/doc-before-pragma.out TEST tests/qapi-schema/doc-duplicated-arg.out TEST tests/qapi-schema/doc-duplicated-return.out TEST tests/qapi-schema/doc-duplicated-since.out TEST tests/qapi-schema/doc-empty-arg.out TEST tests/qapi-schema/doc-empty-section.out TEST tests/qapi-schema/doc-empty-symbol.out TEST tests/qapi-schema/doc-good.out TEST tests/qapi-schema/doc-interleaved-section.out TEST tests/qapi-schema/doc-invalid-end.out TEST tests/qapi-schema/doc-invalid-end2.out TEST tests/qapi-schema/doc-invalid-return.out TEST tests/qapi-schema/doc-invalid-section.out TEST tests/qapi-schema/doc-invalid-start.out TEST tests/qapi-schema/doc-missing.out TEST tests/qapi-schema/doc-missing-colon.out TEST tests/qapi-schema/doc-missing-expr.out TEST tests/qapi-schema/doc-missing-space.out TEST tests/qapi-schema/doc-no-symbol.out TEST tests/qapi-schema/double-data.out TEST tests/qapi-schema/double-type.out TEST tests/qapi-schema/duplicate-key.out TEST tests/qapi-schema/empty.out TEST tests/qapi-schema/enum-bad-name.out TEST tests/qapi-schema/enum-bad-prefix.out TEST tests/qapi-schema/enum-clash-member.out TEST tests/qapi-schema/enum-dict-member.out TEST tests/qapi-schema/enum-int-member.out TEST tests/qapi-schema/enum-member-case.out TEST tests/qapi-schema/enum-missing-data.out TEST tests/qapi-schema/enum-wrong-data.out TEST tests/qapi-schema/escape-outside-string.out TEST tests/qapi-schema/escape-too-big.out TEST tests/qapi-schema/escape-too-short.out TEST tests/qapi-schema/event-boxed-empty.out TEST tests/qapi-schema/event-case.out TEST tests/qapi-schema/event-nest-struct.out TEST tests/qapi-schema/flat-union-array-branch.out TEST tests/qapi-schema/flat-union-bad-base.out TEST tests/qapi-schema/flat-union-bad-discriminator.out TEST tests/qapi-schema/flat-union-base-any.out TEST tests/qapi-schema/flat-union-base-union.out TEST tests/qapi-schema/flat-union-clash-member.out TEST tests/qapi-schema/flat-union-empty.out TEST tests/qapi-schema/flat-union-incomplete-branch.out TEST tests/qapi-schema/flat-union-inline.out TEST tests/qapi-schema/flat-union-int-branch.out TEST tests/qapi-schema/flat-union-invalid-branch-key.out TEST tests/qapi-schema/flat-union-invalid-discriminator.out TEST tests/qapi-schema/flat-union-no-base.out TEST tests/qapi-schema/flat-union-optional-discriminator.out TEST tests/qapi-schema/funny-char.out TEST tests/qapi-schema/flat-union-string-discriminator.out TEST tests/qapi-schema/ident-with-escape.out TEST tests/qapi-schema/include-before-err.out TEST tests/qapi-schema/include-cycle.out TEST tests/qapi-schema/include-extra-junk.out TEST tests/qapi-schema/include-format-err.out TEST tests/qapi-schema/include-nested-err.out TEST tests/qapi-schema/include-no-file.out TEST tests/qapi-schema/include-relpath.out TEST tests/qapi-schema/include-non-file.out TEST tests/qapi-schema/include-repetition.out TEST tests/qapi-schema/include-self-cycle.out TEST tests/qapi-schema/include-simple.out TEST tests/qapi-schema/indented-expr.out TEST tests/qapi-schema/leading-comma-list.out TEST tests/qapi-schema/leading-comma-object.out TEST tests/qapi-schema/missing-colon.out TEST tests/qapi-schema/missing-comma-list.out TEST tests/qapi-schema/missing-comma-object.out TEST tests/qapi-schema/missing-type.out TEST tests/qapi-schema/nested-struct-data.out TEST tests/qapi-schema/non-objects.out TEST tests/qapi-schema/pragma-doc-required-crap.out TEST tests/qapi-schema/pragma-extra-junk.out TEST tests/qapi-schema/pragma-name-case-whitelist-crap.out TEST tests/qapi-schema/pragma-non-dict.out TEST tests/qapi-schema/pragma-returns-whitelist-crap.out TEST tests/qapi-schema/qapi-schema-test.out TEST tests/qapi-schema/quoted-structural-chars.out TEST tests/qapi-schema/redefined-builtin.out TEST tests/qapi-schema/redefined-command.out TEST tests/qapi-schema/redefined-event.out TEST tests/qapi-schema/redefined-type.out TEST tests/qapi-schema/reserved-command-q.out TEST tests/qapi-schema/reserved-enum-q.out TEST tests/qapi-schema/reserved-member-has.out TEST tests/qapi-schema/reserved-member-q.out TEST tests/qapi-schema/reserved-member-u.out TEST tests/qapi-schema/reserved-member-underscore.out TEST tests/qapi-schema/reserved-type-kind.out TEST tests/qapi-schema/reserved-type-list.out TEST tests/qapi-schema/returns-alternate.out TEST tests/qapi-schema/returns-array-bad.out TEST tests/qapi-schema/returns-dict.out TEST tests/qapi-schema/returns-unknown.out TEST tests/qapi-schema/returns-whitelist.out TEST tests/qapi-schema/struct-base-clash-deep.out TEST tests/qapi-schema/struct-base-clash.out TEST tests/qapi-schema/struct-data-invalid.out TEST tests/qapi-schema/struct-member-invalid.out TEST tests/qapi-schema/trailing-comma-list.out TEST tests/qapi-schema/trailing-comma-object.out TEST tests/qapi-schema/type-bypass-bad-gen.out TEST tests/qapi-schema/unclosed-list.out TEST tests/qapi-schema/unclosed-object.out TEST tests/qapi-schema/unclosed-string.out TEST tests/qapi-schema/unicode-str.out TEST tests/qapi-schema/union-base-empty.out TEST tests/qapi-schema/union-base-no-discriminator.out TEST tests/qapi-schema/union-branch-case.out TEST tests/qapi-schema/union-clash-branches.out TEST tests/qapi-schema/union-empty.out TEST tests/qapi-schema/union-invalid-base.out TEST tests/qapi-schema/union-optional-branch.out TEST tests/qapi-schema/unknown-escape.out TEST tests/qapi-schema/union-unknown.out TEST tests/qapi-schema/unknown-expr-key.out GEN tests/qapi-schema/doc-good.test.texi CC tests/check-qdict.o CC tests/test-char.o CC tests/check-qfloat.o CC tests/check-qint.o CC tests/check-qstring.o CC tests/check-qlist.o CC tests/check-qnull.o CC tests/check-qjson.o CC tests/test-qobject-output-visitor.o GEN tests/test-qapi-visit.c GEN tests/test-qapi-types.c GEN tests/test-qmp-introspect.c CC tests/test-clone-visitor.o GEN tests/test-qapi-event.c CC tests/test-qobject-input-visitor.o CC tests/test-qmp-commands.o GEN tests/test-qmp-marshal.c CC tests/test-string-input-visitor.o CC tests/test-string-output-visitor.o CC tests/test-qmp-event.o CC tests/test-opts-visitor.o CC tests/test-coroutine.o CC tests/iothread.o CC tests/test-visitor-serialization.o CC tests/test-iov.o CC tests/test-aio.o CC tests/test-aio-multithread.o CC tests/test-throttle.o CC tests/test-thread-pool.o CC tests/test-hbitmap.o CC tests/test-blockjob.o CC tests/test-blockjob-txn.o CC tests/test-x86-cpuid.o CC tests/test-xbzrle.o CC tests/test-vmstate.o CC tests/test-cutils.o CC tests/test-shift128.o CC tests/test-mul64.o CC tests/test-int128.o CC tests/rcutorture.o CC tests/test-rcu-list.o CC tests/test-qdist.o CC tests/test-qht.o CC tests/test-qht-par.o CC tests/qht-bench.o /tmp/qemu-test/src/tests/test-int128.c:180: warning: ‘__noclone__’ attribute directive ignored CC tests/test-bitops.o CC tests/test-bitcnt.o CC tests/check-qom-interface.o CC tests/check-qom-proplist.o CC tests/test-qemu-opts.o CC tests/test-keyval.o CC tests/test-write-threshold.o CC tests/test-crypto-hash.o CC tests/test-crypto-hmac.o CC tests/test-crypto-secret.o CC tests/test-crypto-cipher.o CC tests/libqtest.o CC tests/test-timed-average.o CC tests/test-qga.o CC tests/test-io-task.o CC tests/io-channel-helpers.o CC tests/test-io-channel-socket.o CC tests/test-io-channel-file.o CC tests/test-io-channel-command.o CC tests/test-io-channel-buffer.o CC tests/test-base64.o CC tests/test-crypto-ivgen.o CC tests/test-crypto-afsplit.o CC tests/test-crypto-xts.o CC tests/test-crypto-block.o CC tests/test-logging.o CC tests/test-replication.o CC tests/test-bufferiszero.o CC tests/test-uuid.o CC tests/ptimer-test.o CC tests/test-qapi-util.o CC tests/ptimer-test-stubs.o CC tests/libqos/pci.o CC tests/vhost-user-test.o CC tests/libqos/fw_cfg.o CC tests/libqos/malloc.o CC tests/libqos/i2c.o CC tests/libqos/libqos.o CC tests/libqos/malloc-spapr.o CC tests/libqos/libqos-spapr.o CC tests/libqos/rtas.o CC tests/libqos/pci-spapr.o CC tests/libqos/malloc-pc.o CC tests/libqos/pci-pc.o CC tests/libqos/libqos-pc.o CC tests/libqos/ahci.o CC tests/libqos/virtio-pci.o CC tests/libqos/virtio.o CC tests/libqos/virtio-mmio.o CC tests/libqos/malloc-generic.o CC tests/fdc-test.o CC tests/endianness-test.o CC tests/ide-test.o /tmp/qemu-test/src/tests/ide-test.c: In function ‘cdrom_pio_impl’: /tmp/qemu-test/src/tests/ide-test.c:803: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result /tmp/qemu-test/src/tests/ide-test.c: In function ‘test_cdrom_dma’: /tmp/qemu-test/src/tests/ide-test.c:899: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result CC tests/ahci-test.o CC tests/hd-geo-test.o CC tests/boot-order-test.o CC tests/bios-tables-test.o CC tests/boot-sector.o CC tests/acpi-utils.o CC tests/boot-serial-test.o CC tests/pxe-test.o CC tests/rtc-test.o CC tests/ipmi-kcs-test.o CC tests/ipmi-bt-test.o CC tests/i440fx-test.o CC tests/fw_cfg-test.o CC tests/drive_del-test.o CC tests/wdt_ib700-test.o CC tests/tco-test.o CC tests/e1000-test.o CC tests/e1000e-test.o CC tests/rtl8139-test.o CC tests/pcnet-test.o CC tests/eepro100-test.o CC tests/ne2000-test.o CC tests/nvme-test.o CC tests/ac97-test.o CC tests/es1370-test.o CC tests/virtio-net-test.o CC tests/virtio-balloon-test.o CC tests/virtio-blk-test.o CC tests/virtio-rng-test.o CC tests/virtio-scsi-test.o CC tests/virtio-serial-test.o CC tests/virtio-console-test.o CC tests/tpci200-test.o CC tests/ipoctal232-test.o CC tests/display-vga-test.o CC tests/intel-hda-test.o CC tests/ivshmem-test.o CC tests/pvpanic-test.o CC tests/vmxnet3-test.o CC tests/i82801b11-test.o CC tests/ioh3420-test.o CC tests/usb-hcd-ohci-test.o CC tests/libqos/usb.o CC tests/usb-hcd-uhci-test.o CC tests/usb-hcd-ehci-test.o CC tests/pc-cpu-test.o CC tests/usb-hcd-xhci-test.o CC tests/q35-test.o CC tests/test-netfilter.o CC tests/test-filter-mirror.o CC tests/test-filter-redirector.o CC tests/postcopy-test.o CC tests/test-x86-cpuid-compat.o CC tests/numa-test.o CC tests/qmp-test.o CC tests/device-introspect-test.o CC tests/qom-test.o CC tests/test-hmp.o LINK tests/check-qdict LINK tests/test-char LINK tests/check-qfloat LINK tests/check-qint LINK tests/check-qstring LINK tests/check-qlist LINK tests/check-qnull LINK tests/check-qjson CC tests/test-qmp-introspect.o CC tests/test-qapi-event.o CC tests/test-qapi-types.o CC tests/test-qapi-visit.o CC tests/test-qmp-marshal.o LINK tests/test-coroutine LINK tests/test-visitor-serialization LINK tests/test-iov LINK tests/test-aio LINK tests/test-aio-multithread LINK tests/test-throttle LINK tests/test-thread-pool LINK tests/test-hbitmap LINK tests/test-blockjob LINK tests/test-x86-cpuid LINK tests/test-blockjob-txn LINK tests/test-xbzrle LINK tests/test-cutils LINK tests/test-vmstate LINK tests/test-shift128 LINK tests/test-mul64 LINK tests/test-int128 LINK tests/rcutorture LINK tests/test-rcu-list LINK tests/test-qdist LINK tests/test-qht LINK tests/qht-bench LINK tests/test-bitops LINK tests/test-bitcnt LINK tests/check-qom-interface LINK tests/check-qom-proplist LINK tests/test-qemu-opts LINK tests/test-keyval LINK tests/test-write-threshold LINK tests/test-crypto-hash LINK tests/test-crypto-hmac LINK tests/test-crypto-cipher LINK tests/test-crypto-secret LINK tests/test-qga LINK tests/test-timed-average LINK tests/test-io-task LINK tests/test-io-channel-socket LINK tests/test-io-channel-file LINK tests/test-io-channel-command LINK tests/test-io-channel-buffer LINK tests/test-base64 LINK tests/test-crypto-ivgen LINK tests/test-crypto-afsplit LINK tests/test-crypto-xts LINK tests/test-crypto-block LINK tests/test-logging LINK tests/test-replication LINK tests/test-bufferiszero LINK tests/test-uuid LINK tests/ptimer-test LINK tests/test-qapi-util LINK tests/vhost-user-test LINK tests/endianness-test LINK tests/fdc-test LINK tests/ide-test LINK tests/ahci-test LINK tests/hd-geo-test LINK tests/boot-order-test LINK tests/bios-tables-test LINK tests/boot-serial-test LINK tests/pxe-test LINK tests/rtc-test LINK tests/ipmi-kcs-test LINK tests/ipmi-bt-test LINK tests/i440fx-test LINK tests/fw_cfg-test LINK tests/drive_del-test LINK tests/wdt_ib700-test LINK tests/tco-test LINK tests/e1000-test LINK tests/e1000e-test LINK tests/rtl8139-test LINK tests/pcnet-test LINK tests/eepro100-test LINK tests/ne2000-test LINK tests/nvme-test LINK tests/ac97-test LINK tests/es1370-test LINK tests/virtio-net-test LINK tests/virtio-balloon-test LINK tests/virtio-blk-test LINK tests/virtio-rng-test LINK tests/virtio-scsi-test LINK tests/virtio-serial-test LINK tests/virtio-console-test LINK tests/tpci200-test LINK tests/ipoctal232-test LINK tests/display-vga-test LINK tests/intel-hda-test LINK tests/ivshmem-test LINK tests/vmxnet3-test LINK tests/pvpanic-test LINK tests/i82801b11-test LINK tests/ioh3420-test LINK tests/usb-hcd-ohci-test LINK tests/usb-hcd-uhci-test LINK tests/usb-hcd-ehci-test LINK tests/usb-hcd-xhci-test LINK tests/pc-cpu-test LINK tests/q35-test LINK tests/test-netfilter LINK tests/test-filter-mirror LINK tests/test-filter-redirector LINK tests/postcopy-test LINK tests/test-x86-cpuid-compat LINK tests/numa-test LINK tests/qmp-test LINK tests/device-introspect-test LINK tests/qom-test LINK tests/test-hmp GTESTER tests/check-qdict GTESTER tests/test-char GTESTER tests/check-qint GTESTER tests/check-qlist GTESTER tests/check-qfloat GTESTER tests/check-qstring GTESTER tests/check-qnull GTESTER tests/check-qjson LINK tests/test-qobject-output-visitor LINK tests/test-clone-visitor LINK tests/test-qobject-input-visitor LINK tests/test-qmp-commands LINK tests/test-string-input-visitor LINK tests/test-string-output-visitor LINK tests/test-qmp-event GTESTER tests/test-coroutine LINK tests/test-opts-visitor GTESTER tests/test-visitor-serialization GTESTER tests/test-iov GTESTER tests/test-aio GTESTER tests/test-aio-multithread GTESTER tests/test-throttle GTESTER tests/test-thread-pool GTESTER tests/test-hbitmap GTESTER tests/test-blockjob GTESTER tests/test-blockjob-txn GTESTER tests/test-x86-cpuid GTESTER tests/test-xbzrle GTESTER tests/test-vmstate Failed to load simple/primitive:b_1 Failed to load simple/primitive:i64_2 Failed to load simple/primitive:i32_1 Failed to load simple/primitive:i32_1 Failed to load test/with_tmp:a Failed to load test/tmp_child_parent:f Failed to load test/tmp_child:parent Failed to load test/with_tmp:tmp Failed to load test/tmp_child:diff Failed to load test/with_tmp:tmp Failed to load test/tmp_child:diff Failed to load test/with_tmp:tmp GTESTER tests/test-cutils GTESTER tests/test-shift128 GTESTER tests/test-mul64 GTESTER tests/test-int128 GTESTER tests/rcutorture GTESTER tests/test-rcu-list GTESTER tests/test-qdist GTESTER tests/test-qht LINK tests/test-qht-par GTESTER tests/test-bitops GTESTER tests/test-bitcnt GTESTER tests/check-qom-interface GTESTER tests/check-qom-proplist GTESTER tests/test-qemu-opts GTESTER tests/test-keyval GTESTER tests/test-write-threshold GTESTER tests/test-crypto-hash GTESTER tests/test-crypto-hmac GTESTER tests/test-crypto-cipher GTESTER tests/test-crypto-secret GTESTER tests/test-qga GTESTER tests/test-timed-average GTESTER tests/test-io-task GTESTER tests/test-io-channel-socket GTESTER tests/test-io-channel-file GTESTER tests/test-io-channel-command GTESTER tests/test-io-channel-buffer GTESTER tests/test-base64 GTESTER tests/test-crypto-ivgen GTESTER tests/test-crypto-afsplit GTESTER tests/test-crypto-xts GTESTER tests/test-crypto-block GTESTER tests/test-logging GTESTER tests/test-replication GTESTER tests/test-bufferiszero GTESTER tests/test-uuid GTESTER tests/ptimer-test GTESTER tests/test-qapi-util GTESTER check-qtest-x86_64 GTESTER check-qtest-aarch64 GTESTER tests/test-qobject-output-visitor GTESTER tests/test-clone-visitor GTESTER tests/test-qobject-input-visitor GTESTER tests/test-qmp-commands GTESTER tests/test-string-input-visitor GTESTER tests/test-string-output-visitor GTESTER tests/test-qmp-event GTESTER tests/test-opts-visitor GTESTER tests/test-qht-par Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-b62q2j32/src' real 14m51.688s user 0m4.002s sys 0m1.329s BUILD fedora make[1]: Entering directory '/var/tmp/patchew-tester-tmp-b62q2j32/src' ARCHIVE qemu.tgz ARCHIVE dtc.tgz COPY RUNNER RUN test-mingw in qemu:fedora Packages installed: PyYAML-3.11-13.fc25.x86_64 SDL-devel-1.2.15-21.fc24.x86_64 bc-1.06.95-16.fc24.x86_64 bison-3.0.4-4.fc24.x86_64 ccache-3.3.4-1.fc25.x86_64 clang-3.9.1-2.fc25.x86_64 findutils-4.6.0-8.fc25.x86_64 flex-2.6.0-3.fc25.x86_64 gcc-6.3.1-1.fc25.x86_64 gcc-c++-6.3.1-1.fc25.x86_64 git-2.9.3-2.fc25.x86_64 glib2-devel-2.50.3-1.fc25.x86_64 libfdt-devel-1.4.2-1.fc25.x86_64 make-4.1-5.fc24.x86_64 mingw32-SDL-1.2.15-7.fc24.noarch mingw32-bzip2-1.0.6-7.fc24.noarch mingw32-curl-7.47.0-1.fc24.noarch mingw32-glib2-2.50.1-1.fc25.noarch mingw32-gmp-6.1.1-1.fc25.noarch mingw32-gnutls-3.5.5-2.fc25.noarch mingw32-gtk2-2.24.31-2.fc25.noarch mingw32-gtk3-3.22.2-1.fc25.noarch mingw32-libjpeg-turbo-1.5.1-1.fc25.noarch mingw32-libpng-1.6.27-1.fc25.noarch mingw32-libssh2-1.4.3-5.fc24.noarch mingw32-libtasn1-4.9-1.fc25.noarch mingw32-nettle-3.3-1.fc25.noarch mingw32-pixman-0.34.0-1.fc25.noarch mingw32-pkg-config-0.28-6.fc24.x86_64 mingw64-SDL-1.2.15-7.fc24.noarch mingw64-bzip2-1.0.6-7.fc24.noarch mingw64-curl-7.47.0-1.fc24.noarch mingw64-glib2-2.50.1-1.fc25.noarch mingw64-gmp-6.1.1-1.fc25.noarch mingw64-gnutls-3.5.5-2.fc25.noarch mingw64-gtk2-2.24.31-2.fc25.noarch mingw64-gtk3-3.22.2-1.fc25.noarch mingw64-libjpeg-turbo-1.5.1-1.fc25.noarch mingw64-libpng-1.6.27-1.fc25.noarch mingw64-libssh2-1.4.3-5.fc24.noarch mingw64-libtasn1-4.9-1.fc25.noarch mingw64-nettle-3.3-1.fc25.noarch mingw64-pixman-0.34.0-1.fc25.noarch mingw64-pkg-config-0.28-6.fc24.x86_64 package python2 is not installed perl-5.24.1-385.fc25.x86_64 pixman-devel-0.34.0-2.fc24.x86_64 sparse-0.5.0-10.fc25.x86_64 tar-1.29-3.fc25.x86_64 which-2.21-1.fc25.x86_64 zlib-devel-1.2.8-10.fc24.x86_64 Environment variables: FBR=f25 PACKAGES=ccache git tar PyYAML sparse flex bison python2 glib2-devel pixman-devel zlib-devel SDL-devel libfdt-devel gcc gcc-c++ clang make perl which bc findutils mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL mingw32-pkg-config mingw32-gtk2 mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1 mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2 mingw32-bzip2 mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL mingw64-pkg-config mingw64-gtk2 mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1 mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2 mingw64-bzip2 HOSTNAME= TERM=xterm MAKEFLAGS= -j8 HISTSIZE=1000 J=8 USER=root LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36: CCACHE_DIR=/var/tmp/ccache EXTRA_CONFIGURE_OPTS= V= SHOW_ENV=1 MAIL=/var/spool/mail/root PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ TARGET_LIST= HISTCONTROL=ignoredups FGC=f25 SHLVL=1 HOME=/root TEST_DIR=/tmp/qemu-test DISTTAG=f25docker LOGNAME=root LESSOPEN=||/usr/bin/lesspipe.sh %s FEATURES=mingw clang pyyaml dtc DEBUG= _=/usr/bin/env Configure options: --enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-debug --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=1.2 --with-gtkabi=2.0 Install prefix /var/tmp/qemu-build/install BIOS directory /var/tmp/qemu-build/install binary directory /var/tmp/qemu-build/install library directory /var/tmp/qemu-build/install/lib module directory /var/tmp/qemu-build/install/lib libexec directory /var/tmp/qemu-build/install/libexec include directory /var/tmp/qemu-build/install/include config directory /var/tmp/qemu-build/install local state directory queried at runtime Windows SDK no Source path /tmp/qemu-test/src C compiler x86_64-w64-mingw32-gcc Host C compiler cc C++ compiler x86_64-w64-mingw32-g++ Objective-C compiler clang ARFLAGS rv CFLAGS -g QEMU_CFLAGS -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -Werror -mms-bitfields -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -m64 -mcx16 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/libpng16 LDFLAGS -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m64 -g make make install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu aarch64-softmmu tcg debug enabled yes gprof enabled no sparse enabled no strip binaries no profiler no static build no pixman system SDL support yes (1.2.15) GTK support yes (2.24.31) GTK GL support no VTE support no TLS priority NORMAL GNUTLS support yes GNUTLS rnd yes libgcrypt no libgcrypt kdf no nettle yes (3.3) nettle kdf yes libtasn1 yes curses support no virgl support no curl support yes mingw32 support yes Audio drivers dsound Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support yes VNC PNG support yes xen support no brlapi support no bluez support no Documentation no PIE no vde support no netmap support no Linux AIO support no ATTR/XATTR support no Install blobs yes KVM support no HAX support yes RDMA support no TCG interpreter no fdt support yes preadv support no fdatasync no madvise no posix_madvise no libcap-ng support no vhost-net support no vhost-scsi support no vhost-vsock support no Trace backends simple Trace output file trace-<pid> spice support no rbd support no xfsctl support no smartcard support no libusb no usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no build guest agent yes QGA VSS support no QGA w32 disk info yes QGA MSI support no seccomp support no coroutine backend win32 coroutine pool yes debug stack usage no GlusterFS support no gcov gcov gcov enabled no TPM support yes libssh2 support yes TPM passthrough no QOM debugging yes Live block migration yes lzo support no snappy support no bzip2 support yes NUMA host support no tcmalloc support no jemalloc support no avx2 optimization yes replication support yes VxHS block device no mkdir -p dtc/libfdt mkdir -p dtc/tests GEN x86_64-softmmu/config-devices.mak.tmp GEN aarch64-softmmu/config-devices.mak.tmp GEN config-host.h GEN qemu-options.def GEN qmp-commands.h GEN qapi-visit.h GEN qapi-types.h GEN qapi-event.h GEN qmp-marshal.c GEN x86_64-softmmu/config-devices.mak GEN aarch64-softmmu/config-devices.mak GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN backends/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/input/trace.h GEN hw/timer/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN backends/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN config-all-devices.mak DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c DEP /tmp/qemu-test/src/dtc/tests/trees.S DEP /tmp/qemu-test/src/dtc/tests/testutils.c DEP /tmp/qemu-test/src/dtc/tests/value-labels.c DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c DEP /tmp/qemu-test/src/dtc/tests/check_path.c DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c DEP /tmp/qemu-test/src/dtc/tests/overlay.c DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c DEP /tmp/qemu-test/src/dtc/tests/incbin.c DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c DEP /tmp/qemu-test/src/dtc/tests/path-references.c DEP /tmp/qemu-test/src/dtc/tests/references.c DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c DEP /tmp/qemu-test/src/dtc/tests/del_node.c DEP /tmp/qemu-test/src/dtc/tests/del_property.c DEP /tmp/qemu-test/src/dtc/tests/setprop.c DEP /tmp/qemu-test/src/dtc/tests/set_name.c DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/open_pack.c DEP /tmp/qemu-test/src/dtc/tests/nopulate.c DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/nop_node.c DEP /tmp/qemu-test/src/dtc/tests/nop_property.c DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c DEP /tmp/qemu-test/src/dtc/tests/stringlist.c DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c DEP /tmp/qemu-test/src/dtc/tests/notfound.c DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c DEP /tmp/qemu-test/src/dtc/tests/char_literal.c DEP /tmp/qemu-test/src/dtc/tests/get_alias.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c DEP /tmp/qemu-test/src/dtc/tests/get_path.c DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c DEP /tmp/qemu-test/src/dtc/tests/getprop.c DEP /tmp/qemu-test/src/dtc/tests/get_name.c DEP /tmp/qemu-test/src/dtc/tests/path_offset.c DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c DEP /tmp/qemu-test/src/dtc/tests/find_property.c DEP /tmp/qemu-test/src/dtc/tests/root_node.c DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c DEP /tmp/qemu-test/src/dtc/util.c DEP /tmp/qemu-test/src/dtc/fdtput.c DEP /tmp/qemu-test/src/dtc/fdtget.c DEP /tmp/qemu-test/src/dtc/fdtdump.c LEX convert-dtsv0-lexer.lex.c DEP /tmp/qemu-test/src/dtc/srcpos.c BISON dtc-parser.tab.c LEX dtc-lexer.lex.c DEP /tmp/qemu-test/src/dtc/treesource.c DEP /tmp/qemu-test/src/dtc/livetree.c DEP /tmp/qemu-test/src/dtc/fstree.c DEP /tmp/qemu-test/src/dtc/flattree.c DEP /tmp/qemu-test/src/dtc/dtc.c DEP /tmp/qemu-test/src/dtc/data.c DEP /tmp/qemu-test/src/dtc/checks.c DEP convert-dtsv0-lexer.lex.c DEP dtc-parser.tab.c DEP dtc-lexer.lex.c CHK version_gen.h UPD version_gen.h DEP /tmp/qemu-test/src/dtc/util.c CC libfdt/fdt.o CC libfdt/fdt_sw.o CC libfdt/fdt_rw.o CC libfdt/fdt_ro.o CC libfdt/fdt_wip.o CC libfdt/fdt_addresses.o CC libfdt/fdt_empty_tree.o CC libfdt/fdt_strerror.o CC libfdt/fdt_overlay.o AR libfdt/libfdt.a x86_64-w64-mingw32-ar: creating libfdt/libfdt.a a - libfdt/fdt.o a - libfdt/fdt_ro.o a - libfdt/fdt_wip.o a - libfdt/fdt_sw.o a - libfdt/fdt_rw.o a - libfdt/fdt_strerror.o a - libfdt/fdt_empty_tree.o a - libfdt/fdt_addresses.o a - libfdt/fdt_overlay.o RC version.o GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-visit.c CC qmp-introspect.o CC qapi-types.o GEN qga/qapi-generated/qga-qmp-marshal.c CC qapi-visit.o CC qapi-event.o CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/opts-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qmp-event.o CC qapi/qapi-util.o CC qobject/qnull.o CC qobject/qint.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qfloat.o CC qobject/qbool.o CC qobject/qjson.o CC qobject/qobject.o CC qobject/json-lexer.o CC qobject/json-streamer.o CC qobject/json-parser.o CC trace/simple.o CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/lockcnt.o CC util/aiocb.o CC util/async.o CC util/thread-pool.o CC util/qemu-timer.o CC util/main-loop.o CC util/iohandler.o CC util/aio-win32.o CC util/event_notifier-win32.o CC util/oslib-win32.o CC util/qemu-thread-win32.o CC util/envlist.o CC util/path.o CC util/module.o CC util/host-utils.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/keyval.o CC util/hexdump.o CC util/crc32c.o CC util/uuid.o CC util/throttle.o CC util/getauxval.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-win32.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC util/systemd.o CC trace-root.o CC util/trace.o CC crypto/trace.o CC io/trace.o CC migration/trace.o CC block/trace.o CC backends/trace.o CC hw/block/trace.o CC hw/block/dataplane/trace.o CC hw/char/trace.o CC hw/intc/trace.o CC hw/net/trace.o CC hw/virtio/trace.o CC hw/audio/trace.o CC hw/scsi/trace.o CC hw/usb/trace.o CC hw/misc/trace.o CC hw/nvram/trace.o CC hw/input/trace.o CC hw/display/trace.o CC hw/timer/trace.o CC hw/dma/trace.o CC hw/sparc/trace.o CC hw/sd/trace.o CC hw/isa/trace.o CC hw/mem/trace.o CC hw/i386/trace.o CC hw/i386/xen/trace.o CC hw/9pfs/trace.o CC hw/pci/trace.o CC hw/ppc/trace.o CC hw/s390x/trace.o CC hw/vfio/trace.o CC hw/acpi/trace.o CC hw/arm/trace.o CC hw/alpha/trace.o CC hw/xen/trace.o CC ui/trace.o CC audio/trace.o CC net/trace.o CC target/arm/trace.o CC target/i386/trace.o CC target/mips/trace.o CC target/sparc/trace.o CC target/s390x/trace.o CC target/ppc/trace.o CC qom/trace.o CC linux-user/trace.o CC qapi/trace.o CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset.o CC stubs/gdbstub.o CC stubs/get-vm-name.o CC stubs/iothread.o CC stubs/iothread-lock.o CC stubs/is-daemonized.o CC stubs/machine-init-done.o CC stubs/migr-blocker.o CC stubs/monitor.o CC stubs/notify-event.o CC stubs/qtest.o CC stubs/replay.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/uuid.o CC stubs/vm-stop.o CC stubs/vmstate.o CC stubs/fd-register.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-get-monitor-def.o CC stubs/target-monitor-defs.o CC stubs/pc_madt_cpu_entry.o CC stubs/vmgenid.o CC stubs/xen-common.o CC stubs/xen-hvm.o GEN qemu-img-cmds.h CC block.o CC blockjob.o CC qemu-io-cmds.o CC replication.o CC block/raw-format.o CC block/vdi.o CC block/qcow.o CC block/vmdk.o CC block/cloop.o CC block/bochs.o CC block/vpc.o CC block/dmg.o CC block/vvfat.o CC block/qcow2.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-refcount.o CC block/qcow2-cache.o CC block/qed-l2-cache.o CC block/qed-gencb.o CC block/qed-table.o CC block/qed-cluster.o CC block/qed.o CC block/qed-check.o CC block/vhdx.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/block-backend.o CC block/snapshot.o CC block/qapi.o CC block/file-win32.o CC block/win32-aio.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/nbd.o CC block/throttle-groups.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/write-threshold.o CC block/backup.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC block/curl.o CC block/ssh.o CC block/dmg-bz2.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-nettle.o CC crypto/hmac.o CC crypto/hmac-nettle.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/tlssession.o CC crypto/secret.o CC crypto/random-gnutls.o CC crypto/pbkdf.o CC crypto/pbkdf-nettle.o CC crypto/ivgen.o CC crypto/ivgen-essiv.o CC crypto/ivgen-plain.o CC crypto/ivgen-plain64.o CC crypto/afsplit.o CC crypto/xts.o CC crypto/block.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel.o CC io/channel-buffer.o CC io/channel-command.o CC io/channel-file.o CC io/channel-socket.o CC io/channel-tls.o CC io/channel-watch.o CC io/channel-websock.o CC io/dns-resolver.o CC io/channel-util.o CC io/task.o CC qom/object.o CC qom/container.o CC qom/qom-qobject.o CC qom/object_interfaces.o CC qemu-io.o CC blockdev.o CC iothread.o CC qdev-monitor.o CC blockdev-nbd.o CC device-hotplug.o CC os-win32.o CC accel.o CC bt-host.o CC dma-helpers.o CC bt-vhci.o CC vl.o CC tpm.o CC device_tree.o CC qmp-marshal.o CC qmp.o CC hmp.o CC cpus-common.o CC audio/audio.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/sdlaudio.o CC audio/mixeng.o CC audio/audio_win_int.o CC audio/dsoundaudio.o CC audio/wavcapture.o CC backends/rng.o CC backends/rng-egd.o CC backends/msmouse.o CC backends/wctablet.o CC backends/tpm.o CC backends/hostmem.o CC backends/testdev.o CC backends/hostmem-ram.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC disas/arm.o CXX disas/arm-a64.o CC disas/i386.o CXX disas/libvixl/vixl/utils.o CXX disas/libvixl/vixl/compiler-intrinsics.o CXX disas/libvixl/vixl/a64/decoder-a64.o CXX disas/libvixl/vixl/a64/instructions-a64.o CXX disas/libvixl/vixl/a64/disasm-a64.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/pcihp.o CC hw/acpi/ich9.o CC hw/acpi/tco.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/memory_hotplug.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/vmgenid.o CC hw/acpi/acpi_interface.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/aml-build.o CC hw/acpi/ipmi.o CC hw/acpi/acpi-stub.o CC hw/acpi/ipmi-stub.o CC hw/audio/es1370.o CC hw/audio/sb16.o CC hw/audio/ac97.o CC hw/audio/fmopl.o CC hw/audio/adlib.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/hda-codec.o CC hw/audio/pcspk.o CC hw/audio/wm8750.o CC hw/audio/lm4549.o CC hw/audio/marvell_88w8618.o CC hw/audio/pl041.o CC hw/block/block.o CC hw/block/cdrom.o CC hw/audio/soundhw.o CC hw/block/hd-geometry.o CC hw/block/fdc.o CC hw/block/m25p80.o CC hw/block/nand.o CC hw/block/pflash_cfi01.o CC hw/block/pflash_cfi02.o CC hw/block/ecc.o CC hw/block/onenand.o CC hw/bt/core.o CC hw/block/nvme.o CC hw/bt/l2cap.o CC hw/bt/sdp.o CC hw/bt/hid.o CC hw/bt/hci.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/pl011.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/cadence_uart.o CC hw/char/debugcon.o CC hw/char/imx_serial.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/bus.o CC hw/core/reset.o CC hw/core/fw-path-provider.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/ptimer.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/core/platform-bus.o CC hw/display/ads7846.o CC hw/display/cirrus_vga.o CC hw/display/pl110.o CC hw/display/ssd0303.o CC hw/display/ssd0323.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/display/blizzard.o CC hw/display/exynos4210_fimd.o CC hw/display/framebuffer.o CC hw/display/tc6393xb.o CC hw/dma/pl080.o CC hw/dma/pl330.o CC hw/dma/i8257.o CC hw/dma/xlnx-zynq-devcfg.o CC hw/gpio/max7310.o CC hw/gpio/pl061.o CC hw/gpio/zaurus.o CC hw/gpio/gpio_key.o CC hw/i2c/core.o CC hw/i2c/smbus.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/i2c-ddc.o CC hw/i2c/versatile_i2c.o CC hw/i2c/smbus_ich9.o CC hw/i2c/pm_smbus.o CC hw/i2c/bitbang_i2c.o CC hw/i2c/exynos4210_i2c.o CC hw/i2c/imx_i2c.o CC hw/i2c/aspeed_i2c.o CC hw/ide/core.o CC hw/ide/atapi.o CC hw/ide/qdev.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/ahci.o CC hw/ide/microdrive.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/lm832x.o CC hw/input/pckbd.o CC hw/input/pl050.o CC hw/input/ps2.o CC hw/input/stellaris_input.o CC hw/input/tsc2005.o CC hw/input/vmmouse.o CC hw/input/virtio-input.o CC hw/input/virtio-input-hid.o CC hw/intc/i8259_common.o CC hw/intc/i8259.o CC hw/intc/pl190.o CC hw/intc/imx_avic.o CC hw/intc/realview_gic.o CC hw/intc/ioapic_common.o CC hw/intc/arm_gic_common.o CC hw/intc/arm_gic.o CC hw/intc/arm_gicv2m.o CC hw/intc/arm_gicv3_common.o CC hw/intc/arm_gicv3.o CC hw/intc/arm_gicv3_dist.o CC hw/intc/arm_gicv3_redist.o CC hw/intc/arm_gicv3_its_common.o CC hw/intc/intc.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/ipmi/isa_ipmi_bt.o CC hw/isa/apm.o CC hw/isa/isa-bus.o CC hw/mem/pc-dimm.o CC hw/mem/nvdimm.o CC hw/misc/applesmc.o CC hw/misc/max111x.o CC hw/misc/tmp105.o CC hw/misc/debugexit.o CC hw/misc/sga.o CC hw/misc/pc-testdev.o CC hw/misc/pci-testdev.o CC hw/misc/unimp.o CC hw/misc/arm_l2x0.o CC hw/misc/arm_integrator_debug.o CC hw/misc/a9scu.o CC hw/misc/arm11scu.o CC hw/net/ne2000.o CC hw/net/eepro100.o CC hw/net/pcnet-pci.o CC hw/net/pcnet.o CC hw/net/e1000.o CC hw/net/e1000x_common.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/smc91c111.o CC hw/net/lan9118.o CC hw/net/vmxnet3.o CC hw/net/ne2000-isa.o CC hw/net/xgmac.o CC hw/net/imx_fec.o CC hw/net/cadence_gem.o CC hw/net/allwinner_emac.o CC hw/net/stellaris_enet.o CC hw/net/ftgmac100.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/pci-bridge/pcie_root_port.o CC hw/pci-bridge/gen_pcie_root_port.o CC hw/pci-bridge/pci_expander_bridge.o CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/pam.o CC hw/pci-host/versatile.o CC hw/pci-host/q35.o CC hw/pci-host/piix.o CC hw/pci-host/gpex.o CC hw/pci/pci_bridge.o CC hw/pci/pci.o CC hw/pci/msix.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie.o CC hw/pci/pcie_aer.o CC hw/pci/pcie_port.o CC hw/pci/pci-stub.o CC hw/scsi/scsi-disk.o CC hw/pcmcia/pcmcia.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/megasas.o CC hw/scsi/esp.o CC hw/scsi/vmw_pvscsi.o CC hw/sd/ssi-sd.o CC hw/sd/pl181.o CC hw/scsi/esp-pci.o CC hw/sd/sd.o CC hw/sd/core.o CC hw/sd/sdhci.o CC hw/smbios/smbios.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios_type_38-stub.o CC hw/smbios/smbios-stub.o CC hw/ssi/pl022.o CC hw/ssi/xilinx_spips.o CC hw/ssi/ssi.o CC hw/ssi/aspeed_smc.o CC hw/ssi/stm32f2xx_spi.o CC hw/timer/arm_timer.o CC hw/timer/arm_mptimer.o CC hw/timer/armv7m_systick.o CC hw/timer/a9gtimer.o CC hw/timer/cadence_ttc.o CC hw/timer/ds1338.o CC hw/timer/hpet.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/timer/pl031.o CC hw/timer/twl92230.o CC hw/timer/imx_epit.o CC hw/timer/stm32f2xx_timer.o CC hw/timer/imx_gpt.o CC hw/timer/aspeed_timer.o CC hw/tpm/tpm_tis.o CC hw/usb/combined-packet.o CC hw/usb/core.o CC hw/usb/bus.o CC hw/usb/libhw.o CC hw/usb/desc.o CC hw/usb/hcd-uhci.o CC hw/usb/desc-msos.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci-sysbus.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-xhci-nec.o CC hw/usb/hcd-musb.o CC hw/usb/dev-hub.o CC hw/usb/dev-hid.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/host-stub.o CC hw/usb/dev-serial.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-bus.o CC hw/virtio/virtio-mmio.o CC hw/virtio/virtio-pci.o CC hw/virtio/vhost-stub.o CC hw/watchdog/watchdog.o CC hw/watchdog/wdt_i6300esb.o CC hw/watchdog/wdt_ib700.o CC migration/migration.o CC hw/watchdog/wdt_aspeed.o CC migration/fd.o CC migration/socket.o CC migration/exec.o CC migration/channel.o CC migration/tls.o CC migration/savevm.o CC migration/colo-comm.o CC migration/colo.o CC migration/vmstate.o CC migration/colo-failover.o CC migration/vmstate-types.o CC migration/page_cache.o CC migration/qemu-file.o CC migration/qemu-file-channel.o CC migration/xbzrle.o CC migration/postcopy-ram.o CC migration/qjson.o CC migration/block.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/eth.o CC net/slirp.o CC net/filter-buffer.o CC net/filter.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-rewriter.o CC net/filter-replay.o CC net/tap-win32.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-time.o CC replay/replay-input.o CC replay/replay-char.o CC replay/replay-snapshot.o CC replay/replay-net.o CC replay/replay-audio.o CC slirp/cksum.o CC slirp/if.o CC slirp/ip6_icmp.o CC slirp/ip_icmp.o CC slirp/ip6_input.o CC slirp/ip6_output.o CC slirp/dnssearch.o CC slirp/ip_output.o CC slirp/ip_input.o CC slirp/dhcpv6.o CC slirp/slirp.o CC slirp/mbuf.o CC slirp/misc.o CC slirp/sbuf.o CC slirp/socket.o CC slirp/tcp_input.o CC slirp/tcp_output.o CC slirp/tcp_subr.o CC slirp/tcp_timer.o CC slirp/udp.o CC slirp/udp6.o CC slirp/bootp.o CC slirp/tftp.o CC slirp/arp_table.o CC slirp/ndp_table.o CC slirp/ncsi.o CC ui/keymaps.o CC ui/console.o CC ui/cursor.o CC ui/input.o CC ui/qemu-pixman.o CC ui/input-keymap.o CC ui/input-legacy.o CC ui/sdl.o CC ui/sdl_zoom.o CC ui/x_keymap.o CC ui/vnc.o CC ui/vnc-enc-zlib.o CC ui/vnc-enc-hextile.o CC ui/vnc-enc-tight.o CC ui/vnc-palette.o CC ui/vnc-enc-zrle.o CC ui/vnc-auth-vencrypt.o CC ui/vnc-jobs.o CC ui/vnc-ws.o CC ui/gtk.o CC chardev/char.o CC chardev/char-console.o CC chardev/char-io.o CC chardev/char-file.o CC chardev/char-mux.o CC chardev/char-null.o CC chardev/char-pipe.o CC chardev/char-ringbuf.o CC chardev/char-serial.o CC chardev/char-socket.o CC chardev/char-stdio.o CC chardev/char-udp.o CC chardev/char-win.o CC chardev/char-win-stdio.o CC qga/commands.o CC qga/guest-agent-command-state.o CC qga/main.o CC qga/commands-win32.o AS optionrom/multiboot.o AS optionrom/linuxboot.o CC optionrom/linuxboot_dma.o AS optionrom/kvmvapic.o BUILD optionrom/multiboot.img BUILD optionrom/linuxboot.img BUILD optionrom/linuxboot_dma.img BUILD optionrom/kvmvapic.img BUILD optionrom/multiboot.raw CC qga/channel-win32.o CC qga/service-win32.o BUILD optionrom/linuxboot.raw CC qga/vss-win32.o BUILD optionrom/linuxboot_dma.raw BUILD optionrom/kvmvapic.raw CC qga/qapi-generated/qga-qapi-types.o CC qga/qapi-generated/qga-qapi-visit.o CC qga/qapi-generated/qga-qmp-marshal.o AR libqemuutil.a AR libqemustub.a CC qemu-img.o SIGN optionrom/multiboot.bin SIGN optionrom/kvmvapic.bin SIGN optionrom/linuxboot_dma.bin SIGN optionrom/linuxboot.bin LINK qemu-io.exe LINK qemu-img.exe LINK qemu-ga.exe GEN aarch64-softmmu/hmp-commands-info.h GEN aarch64-softmmu/hmp-commands.h GEN aarch64-softmmu/config-target.h CC aarch64-softmmu/exec.o CC aarch64-softmmu/cpu-exec-common.o CC aarch64-softmmu/cpu-exec.o CC aarch64-softmmu/translate-all.o CC aarch64-softmmu/translate-common.o CC aarch64-softmmu/tcg/tcg-op.o CC aarch64-softmmu/tcg/tcg.o CC aarch64-softmmu/tcg/optimize.o CC aarch64-softmmu/tcg/tcg-common.o CC aarch64-softmmu/fpu/softfloat.o CC aarch64-softmmu/disas.o CC aarch64-softmmu/tcg-runtime.o GEN aarch64-softmmu/gdbstub-xml.c CC aarch64-softmmu/hax-stub.o CC aarch64-softmmu/arch_init.o CC aarch64-softmmu/kvm-stub.o CC aarch64-softmmu/cpus.o CC aarch64-softmmu/monitor.o CC aarch64-softmmu/gdbstub.o CC aarch64-softmmu/balloon.o GEN x86_64-softmmu/hmp-commands.h GEN x86_64-softmmu/hmp-commands-info.h GEN x86_64-softmmu/config-target.h CC aarch64-softmmu/ioport.o CC aarch64-softmmu/numa.o CC aarch64-softmmu/qtest.o CC aarch64-softmmu/bootdevice.o CC aarch64-softmmu/memory.o CC aarch64-softmmu/cputlb.o CC aarch64-softmmu/memory_mapping.o CC aarch64-softmmu/dump.o CC aarch64-softmmu/migration/ram.o CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o CC x86_64-softmmu/exec.o CC aarch64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/translate-all.o CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o CC x86_64-softmmu/translate-common.o CC x86_64-softmmu/cpu-exec.o CC x86_64-softmmu/cpu-exec-common.o CC x86_64-softmmu/tcg/tcg.o CC x86_64-softmmu/tcg/tcg-op.o CC x86_64-softmmu/tcg/optimize.o CC aarch64-softmmu/hw/char/omap_uart.o CC aarch64-softmmu/hw/char/exynos4210_uart.o CC aarch64-softmmu/hw/char/digic-uart.o CC x86_64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/fpu/softfloat.o CC aarch64-softmmu/hw/char/stm32f2xx_usart.o CC aarch64-softmmu/hw/char/bcm2835_aux.o CC x86_64-softmmu/disas.o CC x86_64-softmmu/tcg-runtime.o CC aarch64-softmmu/hw/char/virtio-serial-bus.o CC aarch64-softmmu/hw/core/nmi.o GEN x86_64-softmmu/gdbstub-xml.c CC x86_64-softmmu/kvm-stub.o CC aarch64-softmmu/hw/core/generic-loader.o CC aarch64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/arch_init.o CC x86_64-softmmu/cpus.o CC x86_64-softmmu/monitor.o CC x86_64-softmmu/gdbstub.o CC aarch64-softmmu/hw/cpu/arm11mpcore.o CC aarch64-softmmu/hw/cpu/realview_mpcore.o CC x86_64-softmmu/balloon.o CC aarch64-softmmu/hw/cpu/a9mpcore.o CC x86_64-softmmu/ioport.o CC aarch64-softmmu/hw/cpu/a15mpcore.o CC x86_64-softmmu/numa.o CC x86_64-softmmu/qtest.o CC x86_64-softmmu/bootdevice.o CC x86_64-softmmu/memory.o CC aarch64-softmmu/hw/cpu/core.o CC x86_64-softmmu/cputlb.o CC aarch64-softmmu/hw/display/omap_dss.o CC aarch64-softmmu/hw/display/omap_lcdc.o CC aarch64-softmmu/hw/display/pxa2xx_lcd.o CC x86_64-softmmu/memory_mapping.o CC aarch64-softmmu/hw/display/bcm2835_fb.o CC x86_64-softmmu/dump.o CC aarch64-softmmu/hw/display/vga.o CC aarch64-softmmu/hw/display/virtio-gpu.o CC x86_64-softmmu/migration/ram.o CC aarch64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/block/virtio-blk.o CC aarch64-softmmu/hw/display/virtio-gpu-pci.o CC aarch64-softmmu/hw/display/xlnx_dp.o CC aarch64-softmmu/hw/display/dpcd.o CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o CC x86_64-softmmu/hw/char/virtio-serial-bus.o CC x86_64-softmmu/hw/core/nmi.o CC x86_64-softmmu/hw/core/generic-loader.o CC x86_64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/hw/cpu/core.o CC aarch64-softmmu/hw/dma/xlnx_dpdma.o CC aarch64-softmmu/hw/dma/omap_dma.o CC x86_64-softmmu/hw/display/vga.o CC aarch64-softmmu/hw/dma/soc_dma.o CC x86_64-softmmu/hw/display/virtio-gpu.o CC aarch64-softmmu/hw/dma/pxa2xx_dma.o CC x86_64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/display/virtio-gpu-pci.o CC aarch64-softmmu/hw/dma/bcm2835_dma.o CC x86_64-softmmu/hw/display/virtio-vga.o CC aarch64-softmmu/hw/gpio/omap_gpio.o CC aarch64-softmmu/hw/gpio/imx_gpio.o CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o CC x86_64-softmmu/hw/intc/apic.o CC x86_64-softmmu/hw/intc/apic_common.o CC x86_64-softmmu/hw/intc/ioapic.o CC x86_64-softmmu/hw/isa/lpc_ich9.o CC aarch64-softmmu/hw/i2c/omap_i2c.o CC aarch64-softmmu/hw/input/pxa2xx_keypad.o CC aarch64-softmmu/hw/input/tsc210x.o CC aarch64-softmmu/hw/intc/armv7m_nvic.o CC aarch64-softmmu/hw/intc/exynos4210_gic.o CC x86_64-softmmu/hw/misc/vmport.o CC aarch64-softmmu/hw/intc/exynos4210_combiner.o CC x86_64-softmmu/hw/misc/pvpanic.o CC x86_64-softmmu/hw/misc/edu.o CC x86_64-softmmu/hw/net/virtio-net.o CC x86_64-softmmu/hw/net/vhost_net.o CC aarch64-softmmu/hw/intc/omap_intc.o CC x86_64-softmmu/hw/scsi/virtio-scsi.o CC aarch64-softmmu/hw/intc/bcm2835_ic.o CC aarch64-softmmu/hw/intc/bcm2836_control.o CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o CC x86_64-softmmu/hw/timer/mc146818rtc.o CC aarch64-softmmu/hw/intc/aspeed_vic.o CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o CC aarch64-softmmu/hw/misc/arm_sysctl.o CC x86_64-softmmu/hw/virtio/virtio.o CC x86_64-softmmu/hw/virtio/virtio-balloon.o CC aarch64-softmmu/hw/misc/cbus.o CC x86_64-softmmu/hw/virtio/virtio-crypto.o CC aarch64-softmmu/hw/misc/exynos4210_pmu.o CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o CC aarch64-softmmu/hw/misc/exynos4210_clk.o CC aarch64-softmmu/hw/misc/imx_ccm.o CC aarch64-softmmu/hw/misc/imx31_ccm.o CC aarch64-softmmu/hw/misc/imx25_ccm.o CC x86_64-softmmu/hw/i386/multiboot.o CC x86_64-softmmu/hw/i386/pc.o CC x86_64-softmmu/hw/i386/pc_piix.o CC aarch64-softmmu/hw/misc/imx6_ccm.o CC x86_64-softmmu/hw/i386/pc_q35.o CC x86_64-softmmu/hw/i386/pc_sysfw.o CC aarch64-softmmu/hw/misc/imx6_src.o CC aarch64-softmmu/hw/misc/mst_fpga.o CC x86_64-softmmu/hw/i386/x86-iommu.o CC aarch64-softmmu/hw/misc/omap_clk.o CC aarch64-softmmu/hw/misc/omap_gpmc.o CC x86_64-softmmu/hw/i386/intel_iommu.o CC x86_64-softmmu/hw/i386/amd_iommu.o CC aarch64-softmmu/hw/misc/omap_l4.o CC x86_64-softmmu/hw/i386/kvmvapic.o CC x86_64-softmmu/hw/i386/acpi-build.o CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o CC x86_64-softmmu/target/i386/translate.o CC aarch64-softmmu/hw/misc/omap_sdrc.o CC x86_64-softmmu/target/i386/helper.o CC aarch64-softmmu/hw/misc/omap_tap.o CC x86_64-softmmu/target/i386/cpu.o CC aarch64-softmmu/hw/misc/bcm2835_mbox.o CC aarch64-softmmu/hw/misc/bcm2835_property.o CC x86_64-softmmu/target/i386/bpt_helper.o CC x86_64-softmmu/target/i386/excp_helper.o CC aarch64-softmmu/hw/misc/bcm2835_rng.o CC x86_64-softmmu/target/i386/fpu_helper.o CC aarch64-softmmu/hw/misc/zynq_slcr.o CC aarch64-softmmu/hw/misc/zynq-xadc.o CC x86_64-softmmu/target/i386/cc_helper.o CC x86_64-softmmu/target/i386/int_helper.o CC x86_64-softmmu/target/i386/svm_helper.o CC x86_64-softmmu/target/i386/smm_helper.o CC aarch64-softmmu/hw/misc/edu.o CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o CC x86_64-softmmu/target/i386/misc_helper.o CC aarch64-softmmu/hw/misc/auxbus.o CC x86_64-softmmu/target/i386/mem_helper.o CC aarch64-softmmu/hw/misc/aspeed_scu.o CC x86_64-softmmu/target/i386/seg_helper.o CC x86_64-softmmu/target/i386/mpx_helper.o CC aarch64-softmmu/hw/misc/aspeed_sdmc.o CC aarch64-softmmu/hw/net/virtio-net.o CC aarch64-softmmu/hw/net/vhost_net.o CC aarch64-softmmu/hw/scsi/virtio-scsi.o CC aarch64-softmmu/hw/pcmcia/pxa2xx.o CC x86_64-softmmu/target/i386/gdbstub.o CC x86_64-softmmu/target/i386/arch_memory_mapping.o CC x86_64-softmmu/target/i386/arch_dump.o CC x86_64-softmmu/target/i386/machine.o CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC x86_64-softmmu/target/i386/monitor.o CC aarch64-softmmu/hw/sd/omap_mmc.o CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o CC x86_64-softmmu/target/i386/kvm-stub.o CC aarch64-softmmu/hw/ssi/omap_spi.o CC x86_64-softmmu/target/i386/hax-all.o CC x86_64-softmmu/target/i386/hax-mem.o CC aarch64-softmmu/hw/ssi/imx_spi.o CC x86_64-softmmu/target/i386/hax-windows.o CC aarch64-softmmu/hw/timer/exynos4210_mct.o CC aarch64-softmmu/hw/timer/exynos4210_pwm.o CC aarch64-softmmu/hw/timer/exynos4210_rtc.o GEN trace/generated-helpers.c CC aarch64-softmmu/hw/timer/omap_gptimer.o CC aarch64-softmmu/hw/timer/omap_synctimer.o CC aarch64-softmmu/hw/timer/pxa2xx_timer.o CC x86_64-softmmu/trace/control-target.o CC aarch64-softmmu/hw/timer/digic-timer.o CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o CC x86_64-softmmu/gdbstub-xml.o CC x86_64-softmmu/trace/generated-helpers.o CC aarch64-softmmu/hw/usb/tusb6010.o CC aarch64-softmmu/hw/virtio/virtio.o CC aarch64-softmmu/hw/virtio/virtio-balloon.o CC aarch64-softmmu/hw/virtio/virtio-crypto.o CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o CC aarch64-softmmu/hw/arm/collie.o CC aarch64-softmmu/hw/arm/boot.o CC aarch64-softmmu/hw/arm/exynos4_boards.o CC aarch64-softmmu/hw/arm/gumstix.o CC aarch64-softmmu/hw/arm/highbank.o CC aarch64-softmmu/hw/arm/digic_boards.o CC aarch64-softmmu/hw/arm/integratorcp.o CC aarch64-softmmu/hw/arm/mainstone.o CC aarch64-softmmu/hw/arm/musicpal.o /tmp/qemu-test/src/dump.c: In function 'vmcoreinfo_add_phys_base': /tmp/qemu-test/src/dump.c:1617:55: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'uint64_t {aka long long unsigned int}' [-Werror=format=] physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", ^ cc1: all warnings being treated as errors /tmp/qemu-test/src/dump.c: In function 'vmcoreinfo_add_phys_base': /tmp/qemu-test/src/dump.c:1617:55: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'uint64_t {aka long long unsigned int}' [-Werror=format=] physbase = g_strdup_printf("\nNUMBER(phys_base)=%ld", ^ cc1: all warnings being treated as errors /tmp/qemu-test/src/rules.mak:69: recipe for target 'dump.o' failed make[1]: *** [dump.o] Error 1 make[1]: *** Waiting for unfinished jobs.... /tmp/qemu-test/src/rules.mak:69: recipe for target 'dump.o' failed make[1]: *** [dump.o] Error 1 make[1]: *** Waiting for unfinished jobs.... Makefile:327: recipe for target 'subdir-x86_64-softmmu' failed make: *** [subdir-x86_64-softmmu] Error 2 make: *** Waiting for unfinished jobs.... Makefile:327: recipe for target 'subdir-aarch64-softmmu' failed make: *** [subdir-aarch64-softmmu] Error 2 tests/docker/Makefile.include:118: recipe for target 'docker-run' failed make[1]: *** [docker-run] Error 2 make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-b62q2j32/src' tests/docker/Makefile.include:149: recipe for target 'docker-run-test-mingw@fedora' failed make: *** [docker-run-test-mingw@fedora] Error 2 === OUTPUT END === Test command exited with code: 2 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2017-06-29 12:47 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-06-01 13:03 [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note Marc-André Lureau 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 1/4] dump: add DumpInfo structure Marc-André Lureau 2017-06-01 18:06 ` Laszlo Ersek 2017-06-01 18:18 ` Eric Blake 2017-06-02 9:46 ` Marc-André Lureau 2017-06-02 9:55 ` Marc-André Lureau 2017-06-02 22:49 ` Laszlo Ersek 2017-06-04 15:56 ` Zhang Chen 2017-06-06 18:19 ` Laszlo Ersek 2017-06-05 7:24 ` Andrew Jones 2017-06-06 2:11 ` Peter Xu 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 2/4] dump: add vmcoreinfo ELF note Marc-André Lureau 2017-06-01 18:38 ` Laszlo Ersek 2017-06-02 11:13 ` Marc-André Lureau 2017-06-06 14:21 ` Laszlo Ersek 2017-06-29 12:47 ` Marc-André Lureau 2017-06-05 8:04 ` Andrew Jones 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 3/4] kdump: add vmcoreinfo Marc-André Lureau 2017-06-05 8:07 ` Andrew Jones 2017-06-01 13:03 ` [Qemu-devel] [PATCH v2 4/4] scripts/dump-guest-memory.py: " Marc-André Lureau 2017-06-01 13:46 ` [Qemu-devel] [PATCH v2 0/4] dump: add vmcoreinfo note no-reply
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).