/* * 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 * Fumihiko Kakuma * * 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