Hi Dietmar, Your patches are queued for crash-7.2.6: https://github.com/crash-utility/crash/commit/c6f0db666191df2342f536945f89cfcad88d265a Thanks, Dave ----- Original Message ----- > Hi Dave, > > when trying to debug the xen hypervisor on a vmcore file it doesn't work for me. > xen_version: 4.11.0_08-1 > > ... > This GDB was configured as "x86_64-unknown-linux-gnu"... > > crash: invalid kernel virtual address: bf45ffa0001ef8 type: "fill_pcpu_struct" > WARNING: cannot fill pcpu_struct. > > crash: cannot read cpu_info. > > I had a look at this and found a change in the struct tss_struct when trying > to read the rsp0. The change in the xen-git-tree was done with commit 98dffb05ce4. > Old: > struct tss_struct { > unsigned short back_link,__blh; > union { u64 rsp0, esp0; }; > ... > New: > struct __packed __cacheline_aligned tss_struct { > uint32_t :32; > uint64_t rsp0, rsp1, rsp2; > > After fixing this in the crash command I got: > ... > This GDB was configured as "x86_64-unknown-linux-gnu"... > > KERNEL: xen-syms > DUMPFILE: vmcore > CPUS: 4 > DOMAINS: 3 > UPTIME: --:--:-- > MACHINE: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (2266 Mhz) > MEMORY: 12 GB > Segmentation fault (core dumped) > > It seems that the commit 4e1dca21 in xen_hyper.c isn't sufficient > anymore. > Because reading the symbol "dom0" is successful but the address is zero. > My suggestion now is simply to switch the if statement. > First ask for the symbol "hardware_domain" (introduced in xen version 4.5.0) > and if it isn't found use the symbol "dom0". > > This works for me with vmcore's with xen-4.4.4. > > Dietmar. > > --- > > x86_64.c | 6 +++++- > xen_hyper.c | 8 ++++---- > 2 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/x86_64.c b/x86_64.c > index 0f6c584..26eb286 100644 > --- a/x86_64.c > +++ b/x86_64.c > @@ -7903,7 +7903,11 @@ x86_64_init_hyper(int when) > case POST_GDB: > XEN_HYPER_STRUCT_SIZE_INIT(cpuinfo_x86, "cpuinfo_x86"); > XEN_HYPER_STRUCT_SIZE_INIT(tss_struct, "tss_struct"); > - XEN_HYPER_ASSIGN_OFFSET(tss_struct_rsp0) = MEMBER_OFFSET("tss_struct", > "__blh") + sizeof(short unsigned int); > + if (MEMBER_EXISTS("tss_struct", "__blh")) { > + XEN_HYPER_ASSIGN_OFFSET(tss_struct_rsp0) = MEMBER_OFFSET("tss_struct", > "__blh") + sizeof(short unsigned int); > + } else { > + XEN_HYPER_ASSIGN_OFFSET(tss_struct_rsp0) = MEMBER_OFFSET("tss_struct", > "rsp0"); > + } > XEN_HYPER_MEMBER_OFFSET_INIT(tss_struct_ist, "tss_struct", "ist"); > if (symbol_exists("cpu_data")) { > xht->cpu_data_address = symbol_value("cpu_data"); > diff --git a/xen_hyper.c b/xen_hyper.c > index 20072e9..f2f00e6 100644 > --- a/xen_hyper.c > +++ b/xen_hyper.c > @@ -1060,8 +1060,8 @@ xen_hyper_get_domains(void) > long domain_next_in_list; > int i, j; > > - if (!try_get_symbol_data("dom0", sizeof(void *), &domain)) > - get_symbol_data("hardware_domain", sizeof(void *), &domain); > + if (!try_get_symbol_data("hardware_domain", sizeof(void *), &domain)) > + get_symbol_data("dom0", sizeof(void *), &domain); > > domain_next_in_list = MEMBER_OFFSET("domain", "next_in_list"); > i = 0; > @@ -1103,8 +1103,8 @@ xen_hyper_get_domain_next(int mod, ulong *next) > if (xhdt->dom0) { > *next = xhdt->dom0->domain; > } else { > - if (!try_get_symbol_data("dom0", sizeof(void *), next)) > - get_symbol_data("hardware_domain", sizeof(void *), next); > + if (!try_get_symbol_data("hardware_domain", sizeof(void *), next)) > + get_symbol_data("dom0", sizeof(void *), next); > } > return xhdt->domain_struct; > break; > -- > 2.12.3 > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility