Blame xen_hyper_global_data.c

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