mirror of https://github.com/crash-utility/crash
401 lines
14 KiB
C
401 lines
14 KiB
C
/*
|
|
* xen_hyper_global_data.c
|
|
*
|
|
* Portions Copyright (C) 2006-2007 Fujitsu Limited
|
|
* Portions Copyright (C) 2006-2007 VA Linux Systems Japan K.K.
|
|
*
|
|
* Authors: Itsuro Oda <oda@valinux.co.jp>
|
|
* Fumihiko Kakuma <kakuma@valinux.co.jp>
|
|
*
|
|
* This file is part of Xencrash.
|
|
*
|
|
* Xencrash is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Xencrash is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Xencrash; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#include "defs.h"
|
|
|
|
#ifdef XEN_HYPERVISOR_ARCH
|
|
#include "xen_hyper_defs.h"
|
|
|
|
/*
|
|
* Global data for Xen hypervisor.
|
|
*/
|
|
|
|
struct xen_hyper_machdep_table xen_hyper_machdep_table = { 0 };
|
|
struct xen_hyper_machdep_table *xhmachdep = &xen_hyper_machdep_table;
|
|
|
|
struct xen_hyper_table xen_hyper_table = { 0 };
|
|
struct xen_hyper_table *xht = &xen_hyper_table;
|
|
|
|
struct xen_hyper_dumpinfo_table xen_hyper_dumpinfo_table = { 0 };
|
|
struct xen_hyper_dumpinfo_table *xhdit = &xen_hyper_dumpinfo_table;
|
|
|
|
struct xen_hyper_domain_table xen_hyper_domain_table = { 0 };
|
|
struct xen_hyper_domain_table *xhdt = &xen_hyper_domain_table;
|
|
|
|
struct xen_hyper_vcpu_table xen_hyper_vcpu_table = { 0 };
|
|
struct xen_hyper_vcpu_table *xhvct = &xen_hyper_vcpu_table;
|
|
|
|
struct xen_hyper_pcpu_table xen_hyper_pcpu_table = { 0 };
|
|
struct xen_hyper_pcpu_table *xhpct = &xen_hyper_pcpu_table;
|
|
|
|
struct xen_hyper_sched_table xen_hyper_sched_table = { 0 };
|
|
struct xen_hyper_sched_table *xhscht = &xen_hyper_sched_table;
|
|
|
|
struct xen_hyper_symbol_table_data xen_hyper_symbol_table_data = { 0 };
|
|
struct xen_hyper_symbol_table_data *xhsymt = &xen_hyper_symbol_table_data;
|
|
|
|
/*
|
|
* The following commands are for Xen hypervisor.
|
|
*/
|
|
|
|
struct command_table_entry xen_hyper_command_table[] = {
|
|
{"*", cmd_pointer, help_pointer, 0},
|
|
{"alias", cmd_alias, help_alias, 0},
|
|
{"ascii", cmd_ascii, help_ascii, 0},
|
|
{"bt", cmd_bt, help_bt, 0},
|
|
{"dis", cmd_dis, help_dis, 0},
|
|
{"domain", xen_hyper_cmd_domain, xen_hyper_help_domain, REFRESH_TASK_TABLE},
|
|
{"doms", xen_hyper_cmd_doms, xen_hyper_help_doms, REFRESH_TASK_TABLE},
|
|
#if defined(X86) || defined(X86_64)
|
|
{"dumpinfo",xen_hyper_cmd_dumpinfo, xen_hyper_help_dumpinfo,0},
|
|
#endif
|
|
{"eval", cmd_eval, help_eval, 0},
|
|
{"exit", cmd_quit, help_exit, 0},
|
|
{"extend", cmd_extend, help_extend, 0},
|
|
{"gdb", cmd_gdb, help_gdb, 0},
|
|
{"help", xen_hyper_cmd_help, help_help, 0},
|
|
{"list", cmd_list, help__list, 0},
|
|
{"log", xen_hyper_cmd_log, xen_hyper_help_log, 0},
|
|
{"p", cmd_p, help_p, 0},
|
|
{"pcpus", xen_hyper_cmd_pcpus, xen_hyper_help_pcpus, 0},
|
|
{"pte", cmd_pte, help_pte, 0},
|
|
{"q", cmd_quit, help_quit, 0},
|
|
{"rd", cmd_rd, help_rd, 0},
|
|
{"repeat", cmd_repeat, help_repeat, 0},
|
|
{"sched", xen_hyper_cmd_sched, xen_hyper_help_sched, 0},
|
|
{"search", cmd_search, help_search, 0},
|
|
{"set", cmd_set, help_set, 0},
|
|
{"struct", cmd_struct, help_struct, 0},
|
|
{"sym", cmd_sym, help_sym, 0},
|
|
{"sys", xen_hyper_cmd_sys, xen_hyper_help_sys, 0},
|
|
{"test", cmd_test, NULL, HIDDEN_COMMAND},
|
|
{"union", cmd_union, help_union, 0},
|
|
{"vcpu", xen_hyper_cmd_vcpu, xen_hyper_help_vcpu, REFRESH_TASK_TABLE},
|
|
{"vcpus", xen_hyper_cmd_vcpus, xen_hyper_help_vcpus, REFRESH_TASK_TABLE},
|
|
{"whatis", cmd_whatis, help_whatis, 0},
|
|
{"wr", cmd_wr, help_wr, 0},
|
|
{(char *)NULL}
|
|
};
|
|
|
|
/*
|
|
*
|
|
*/
|
|
struct xen_hyper_offset_table xen_hyper_offset_table = { 0 };
|
|
struct xen_hyper_size_table xen_hyper_size_table = { 0 };
|
|
|
|
/*
|
|
* help data
|
|
*/
|
|
|
|
char *xen_hyper_help_domain[] = {
|
|
"domain",
|
|
"display contents of domain struct",
|
|
"[domain-id | domainp] ...",
|
|
" This command displays contents of domain struct for selected, or all, domains",
|
|
" domain-id a domain id.",
|
|
" domainp a domain pointer.",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_doms[] = {
|
|
"doms",
|
|
"display domain status information",
|
|
"[domain-id | domainp] ...",
|
|
" This command displays domain status for selected, or all, domains" ,
|
|
" domain-id a domain id.",
|
|
" domainp a domain pointer.",
|
|
" ",
|
|
" 1. the DOMAIN-ID.",
|
|
" 2. the struct domain pointer.",
|
|
" 3. the domain state",
|
|
" (SF:fully shut down, SH:shutting down, DY:dying,",
|
|
" CP:pause by controller software, PO:polling event channels,",
|
|
" PA:pause by the hypervisor, RU:running).",
|
|
" 4. the TYPE of domain",
|
|
" (O:dom_io, X:dom_xen, I:idle domain, 0:domain 0, U:domain U).",
|
|
" 5. displays max_pages member of domain.",
|
|
" 6. displays tot_pages member of domain.",
|
|
" 7. a number of vcpu that domain is assigned.",
|
|
" 8. the shared_info pointer of domain.",
|
|
" 9. frame containing list of mfns containing list of mfns" ,
|
|
" containing p2m.",
|
|
" ",
|
|
" The active domain on each CPU will be highlighted by an angle ",
|
|
" bracket (\">\") preceding its information.",
|
|
" The crashing domain on each CPU will be highlighted by an aster ",
|
|
" (\"*\") preceding its information.",
|
|
"\nEXAMPLES",
|
|
" Show the domain status of all:\n",
|
|
" %s> doms",
|
|
" DID DOMAIN ST T MAXPAGE TOTPAGE VCPU SHARED_I P2M_MFN",
|
|
" 32753 ffbf8080 RU O 0 0 0 0 ----",
|
|
" 32754 ffbfa080 RU X 0 0 0 0 ----",
|
|
" 32767 ffbfc080 RU I 0 0 2 0 ----",
|
|
" >* 0 ff198080 RU 0 ffffffff 32900 2 ff194000 18d0",
|
|
" 4 ffbee080 RU U 4000 4000 2 ff18d000 3eb92",
|
|
" 5 ff186080 RU U 4000 4000 2 ff184000 298d3",
|
|
" %s>",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_dumpinfo[] = {
|
|
"dumpinfo",
|
|
"display Xen dump information",
|
|
"[-t | -r] [pcpu-id | enotep] ...",
|
|
" This command displays Xen dump information for selected, or all, cpus" ,
|
|
" pcpu-id a physical cpu id.",
|
|
" enotep a ELF Note pointer.",
|
|
" -t display time information.",
|
|
" -r display register information.",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_log[] = {
|
|
"log",
|
|
"dump system message buffer",
|
|
" ",
|
|
" This command dumps the xen conring contents in chronological order." ,
|
|
" ",
|
|
"EXAMPLES",
|
|
" Dump the Xen message buffer:\n",
|
|
" %s> log",
|
|
" __ __ _____ ___ _ _ _",
|
|
" \\ \\/ /___ _ __ |___ / / _ \\ _ _ _ __ ___| |_ __ _| |__ | | ___",
|
|
" \\ // _ \\ '_ \\ |_ \\| | | |__| | | | '_ \\/ __| __/ _` | '_ \\| |/ _ \\",
|
|
" / \\ __/ | | | ___) | |_| |__| |_| | | | \\__ \\ || (_| | |_) | | __/",
|
|
" /_/\\_\\___|_| |_| |____(_)___/ \\__,_|_| |_|___/\\__\\__,_|_.__/|_|\\___|",
|
|
" ",
|
|
" http://www.cl.cam.ac.uk/netos/xen",
|
|
" University of Cambridge Computer Laboratory",
|
|
" ",
|
|
" Xen version 3.0-unstable (damm@) (gcc version 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0,",
|
|
" pie-8.7.9)) Wed Dec 6 17:34:32 JST 2006",
|
|
" Latest ChangeSet: unavailable",
|
|
" ",
|
|
" (XEN) Console output is synchronous.",
|
|
" (XEN) Command line: 12733-i386-pae/xen.gz console=com1 sync_console conswitch=bb com1",
|
|
" =115200,8n1,0x3f8 dom0_mem=480000 crashkernel=64M@32M",
|
|
" (XEN) Physical RAM map:",
|
|
" (XEN) 0000000000000000 - 0000000000098000 (usable)",
|
|
" (XEN) 0000000000098000 - 00000000000a0000 (reserved)",
|
|
" (XEN) 00000000000f0000 - 0000000000100000 (reserved)",
|
|
" (XEN) 0000000000100000 - 000000003f7f0000 (usable)",
|
|
" (XEN) 000000003f7f0000 - 000000003f7f3000 (ACPI NVS)",
|
|
" (XEN) 000000003f7f3000 - 000000003f800000 (ACPI data)",
|
|
" (XEN) 00000000e0000000 - 00000000f0000000 (reserved)",
|
|
" (XEN) 00000000fec00000 - 0000000100000000 (reserved)",
|
|
" (XEN) Kdump: 64MB (65536kB) at 0x2000000",
|
|
" (XEN) System RAM: 1015MB (1039904kB)",
|
|
" (XEN) ACPI: RSDP (v000 XPC ) @ 0x000f9250",
|
|
" ...",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_pcpus[] = {
|
|
"pcpus",
|
|
"display physical cpu information",
|
|
"[-r][-t] [pcpu-id | pcpup] ...",
|
|
" This command displays physical cpu information for selected, or all, cpus" ,
|
|
" pcpu-id a physical cpu id.",
|
|
" pcpup a physical cpu pointer.",
|
|
" cur-vcpu a current virtual cpu pointer.",
|
|
" -r display register information.",
|
|
" -t display init_tss information.",
|
|
" ",
|
|
" The crashing physical cpu will be highlighted by an aster ",
|
|
" (\"*\") preceding its information.",
|
|
"\nEXAMPLES",
|
|
" Show the physical cpu status of all:\n",
|
|
" %s> pcpus",
|
|
" PCID PCPU CUR-VCPU",
|
|
" 0 ff1a3fb4 ffbf9080",
|
|
" * 1 ff1dbfb4 ffbf8080",
|
|
" %s>",
|
|
" ",
|
|
" Show the physical cpu status of all with register information:\n",
|
|
" %s> pcpus -r",
|
|
" PCID PCPU CUR-VCPU",
|
|
" * 0 ff1b7fb4 ffbef080",
|
|
" Register information:",
|
|
" struct cpu_user_regs {",
|
|
" ebx = 0x0,",
|
|
" ecx = 0xdcf4bed8,",
|
|
" edx = 0xc0326887,",
|
|
" esi = 0x63,",
|
|
" edi = 0x0,",
|
|
" ebp = 0xdcf4bee0,",
|
|
" eax = 0x25,",
|
|
" error_code = 0x6,",
|
|
" entry_vector = 0xe,",
|
|
" eip = 0xc01014a7,",
|
|
" cs = 0x61,",
|
|
" saved_upcall_mask = 0x0,",
|
|
" _pad0 = 0x0,",
|
|
" eflags = 0x202,",
|
|
" esp = 0xdcf4bed0,",
|
|
" ss = 0x69,",
|
|
" _pad1 = 0x0,",
|
|
" es = 0x7b,",
|
|
" _pad2 = 0x0,",
|
|
" ds = 0x7b,",
|
|
" _pad3 = 0x0,",
|
|
" fs = 0x0,",
|
|
" _pad4 = 0x0,",
|
|
" gs = 0x0,",
|
|
" _pad5 = 0x0",
|
|
" }",
|
|
" ",
|
|
" Show the physical cpu status of all with init_tss information:\n",
|
|
" %s> pcpus -t",
|
|
" PCID PCPU CUR-VCPU",
|
|
" * 0 ff1b7fb4 ffbef080",
|
|
" init_tss information:",
|
|
" struct tss_struct {",
|
|
" back_link = 0x0,",
|
|
" __blh = 0x0,",
|
|
" esp0 = 0xff1b7fe8,",
|
|
" ss0 = 0xe010,",
|
|
" __ss0h = 0x0,",
|
|
" esp1 = 0xdcf4bff8,",
|
|
" ss1 = 0x69,",
|
|
" __ss1h = 0x0,",
|
|
" esp2 = 0x0,",
|
|
" ss2 = 0x0,",
|
|
" __ss2h = 0x0,",
|
|
" __cr3 = 0x0,",
|
|
" eip = 0x0,",
|
|
" eflags = 0x0,",
|
|
" eax = 0x0,",
|
|
" ecx = 0x0,",
|
|
" edx = 0x0,",
|
|
" ebx = 0x0,",
|
|
" esp = 0x0,",
|
|
" ebp = 0x0,",
|
|
" esi = 0x0,",
|
|
" edi = 0x0,",
|
|
" es = 0x0,",
|
|
" __esh = 0x0,",
|
|
" cs = 0x0,",
|
|
" __csh = 0x0,",
|
|
" ss = 0x0,",
|
|
" __ssh = 0x0,",
|
|
" ds = 0x0,",
|
|
" __dsh = 0x0,",
|
|
" fs = 0x0,",
|
|
" __fsh = 0x0,",
|
|
" gs = 0x0,",
|
|
" __gsh = 0x0,",
|
|
" ldt = 0x0,",
|
|
" __ldth = 0x0,",
|
|
" trace = 0x0,",
|
|
" bitmap = 0x8000,",
|
|
" __cacheline_filler = \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\"",
|
|
" }",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_sched[] = {
|
|
"pcpus",
|
|
"display scheduler information",
|
|
"[-v] [pcpu-id] ...",
|
|
" This command displays scheduler information for selected, or all, cpus" ,
|
|
" pcpu-id a physical cpu id.",
|
|
" -v display verbosely scheduler information.",
|
|
" ",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_sys[] = {
|
|
"sys",
|
|
"system data",
|
|
"[-c [name|number]] config",
|
|
" This command displays system-specific data. If no arguments are entered,\n"
|
|
" the same system data shown during %s invocation is shown.\n",
|
|
"\nEXAMPLES",
|
|
" Display essential system information:\n",
|
|
" %s> sys",
|
|
" DEBUG KERNEL: xen-syms",
|
|
" DUMPFILE: vmcore",
|
|
" CPUS: 2",
|
|
" DOMAINS: 2",
|
|
" MACHINE: Pentium III (Coppermine) (866 Mhz)",
|
|
" MEMORY: 2 GB",
|
|
" %s>",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_vcpu[] = {
|
|
"vcpu",
|
|
"display contents of vcpu struct",
|
|
"[vcpup] ...",
|
|
" This command displays contents of vcpu struct for selected, or all, vcpus",
|
|
" vcpu-id a virtual cpu id.",
|
|
" vcpup a virtual cpu pointer.",
|
|
NULL
|
|
};
|
|
|
|
char *xen_hyper_help_vcpus[] = {
|
|
"vcpus",
|
|
"display vcpu status information",
|
|
"[-i domain-id vcpu-id | vcpup] ...",
|
|
" This command displays vcpu status for selected, or all, vcpus" ,
|
|
" domain-id a domain id.",
|
|
" vcpu-id a VCPU-ID.",
|
|
" vcpup a hexadecimal struct vcpu pointer.",
|
|
" -i specify vcpu id as an argument.",
|
|
" ",
|
|
" 1. the VCPU-ID.",
|
|
" 2. the physical CPU-ID.",
|
|
" 3. the struct vcpu pointer.",
|
|
" 4. the vcpu state (RU, BL, OF).",
|
|
" 5. the TYPE of domain that vcpu is assigned(I, 0, G).",
|
|
" 6. the DOMAIN-ID of domain that vcpu is assigned.",
|
|
" 7. the struct domain pointer of domain that vcpu is assigned.",
|
|
" ",
|
|
" The active vcpu on each CPU will be highlighted by an angle ",
|
|
" bracket (\">\") preceding its information.",
|
|
" The crashing vcpu on each CPU will be highlighted by an aster ",
|
|
" (\"*\") preceding its information.",
|
|
"\nEXAMPLES",
|
|
" Show the vcpu status of all:\n",
|
|
" %s> vcpus",
|
|
" VCID PCID VCPU ST T DOMID DOMAIN",
|
|
" 0 0 ffbfe080 RU I 32767 ffbfc080",
|
|
" 1 1 ff1df080 RU I 32767 ffbfc080",
|
|
" >* 0 0 ff195180 RU 0 0 ff198080",
|
|
" > 1 1 ff190080 BL 0 0 ff198080",
|
|
" 0 1 ff18a080 BL G 4 ffbee080",
|
|
" 1 0 ff189080 BL G 4 ffbee080",
|
|
" 0 1 ff1f3080 BL G 5 ff186080",
|
|
" 1 0 ff1f2080 BL G 5 ff186080",
|
|
" %s>",
|
|
NULL
|
|
};
|
|
|
|
struct task_context fake_tc = { 0 };
|
|
|
|
#endif
|