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