crash/xen_hyper_dump_tables.c

961 lines
38 KiB
C

/*
* xen_hyper_dump_tables.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"
static void xen_hyper_dump_xen_hyper_table(int verbose);
static void xen_hyper_dump_xen_hyper_dumpinfo_table(int verbose);
static void xen_hyper_dump_xen_hyper_domain_table(int verbose);
static void xen_hyper_dump_xen_hyper_vcpu_table(int verbose);
static void xen_hyper_dump_xen_hyper_pcpu_table(int verbose);
static void xen_hyper_dump_xen_hyper_sched_table(int verbose);
static void xen_hyper_dump_xen_hyper_size_table(char *spec, ulong makestruct);
static void xen_hyper_dump_xen_hyper_offset_table(char *spec, ulong makestruct);
static void xen_hyper_dump_mem(void *mem, ulong len, int dsz);
/*
* Get help for a command, to dump an internal table, or the GNU public
* license copying/warranty information.
*/
void
xen_hyper_cmd_help(void)
{
int c;
int oflag;
oflag = 0;
while ((c = getopt(argcnt, args,
"aBbcDgHhM:mnOopszX:")) != EOF) {
switch(c)
{
case 'a':
dump_alias_data();
return;
case 'b':
dump_shared_bufs();
return;
case 'B':
dump_build_data();
return;
case 'c':
dump_numargs_cache();
return;
case 'n':
case 'D':
dumpfile_memory(DUMPFILE_MEM_DUMP);
return;
case 'g':
dump_gdb_data();
return;
case 'H':
dump_hash_table(VERBOSE);
return;
case 'h':
dump_hash_table(!VERBOSE);
return;
case 'M':
dump_machdep_table(stol(optarg, FAULT_ON_ERROR, NULL));
return;
case 'm':
dump_machdep_table(0);
return;
case 'O':
dump_offset_table(NULL, TRUE);
return;
case 'o':
oflag = TRUE;
break;
case 'p':
dump_program_context();
return;
case 's':
dump_symbol_table();
return;
case 'X':
if (strlen(optarg) != 3) {
argerrs++;
break;
}
if (!strncmp("Xen", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_table(VERBOSE);
else if (!strncmp("xen", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_table(!VERBOSE);
else if (!strncmp("Dmp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_dumpinfo_table(VERBOSE);
else if (!strncmp("dmp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_dumpinfo_table(!VERBOSE);
else if (!strncmp("Dom", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_domain_table(VERBOSE);
else if (!strncmp("dom", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_domain_table(!VERBOSE);
else if (!strncmp("Vcp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_vcpu_table(VERBOSE);
else if (!strncmp("vcp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_vcpu_table(!VERBOSE);
else if (!strncmp("Pcp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_pcpu_table(VERBOSE);
else if (!strncmp("pcp", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_pcpu_table(!VERBOSE);
else if (!strncmp("Sch", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_sched_table(VERBOSE);
else if (!strncmp("sch", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_sched_table(!VERBOSE);
else if (!strncmp("siz", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_size_table(NULL, TRUE);
else if (!strncmp("ofs", optarg, strlen(optarg)))
xen_hyper_dump_xen_hyper_offset_table(NULL, TRUE);
else {
argerrs++;
break;
}
return;
case 'z':
fprintf(fp, "help options:\n");
fprintf(fp, " -a - alias data\n");
fprintf(fp, " -b - shared buffer data\n");
fprintf(fp, " -B - build data\n");
fprintf(fp, " -c - numargs cache\n");
fprintf(fp, " -M <num> machine specific\n");
fprintf(fp, " -m - machdep_table\n");
fprintf(fp, " -s - symbol table data\n");
fprintf(fp, " -o - offset_table and size_table\n");
fprintf(fp, " -p - program_context\n");
fprintf(fp, " -h - hash_table data\n");
fprintf(fp, " -H - hash_table data (verbose)\n");
fprintf(fp, " -X Xen - xen table data (verbose)\n");
fprintf(fp, " -X xen - xen table data\n");
fprintf(fp, " -X Dmp - dumpinfo table data (verbose)\n");
fprintf(fp, " -X dmp - dumpinfo table data\n");
fprintf(fp, " -X Dom - domain table data (verbose)\n");
fprintf(fp, " -X dom - domain table data\n");
fprintf(fp, " -X Vcp - vcpu table data (verbose)\n");
fprintf(fp, " -X vcp - vcpu table data\n");
fprintf(fp, " -X Pcp - pcpu table data (verbose)\n");
fprintf(fp, " -X pcp - pcpu table data\n");
fprintf(fp, " -X Sch - schedule table data (verbose)\n");
fprintf(fp, " -X sch - schedule table data\n");
fprintf(fp, " -X siz - size table data\n");
fprintf(fp, " -X ofs - offset table data\n");
return;
default:
argerrs++;
break;
}
}
if (argerrs)
cmd_usage(pc->curcmd, COMPLETE_HELP);
if (!args[optind]) {
if (oflag)
dump_offset_table(NULL, FALSE);
else
display_help_screen("");
return;
}
do {
if (oflag)
dump_offset_table(args[optind], FALSE);
else
cmd_usage(args[optind], COMPLETE_HELP);
optind++;
} while (args[optind]);
}
/*
* "help -x xen" output
*/
static void
xen_hyper_dump_xen_hyper_table(int verbose)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
uint cpuid;
int len, flag, i;
len = 14;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "cpu_data_address: ", buf, flag,
(buf, "%lu\n", xht->cpu_data_address));
XEN_HYPER_PRI(fp, len, "cpu_curr: ", buf, flag,
(buf, "%u\n", xht->cpu_curr));
XEN_HYPER_PRI(fp, len, "max_cpus: ", buf, flag,
(buf, "%u\n", xht->max_cpus));
XEN_HYPER_PRI(fp, len, "cores: ", buf, flag,
(buf, "%d\n", xht->cores));
XEN_HYPER_PRI(fp, len, "pcpus: ", buf, flag,
(buf, "%d\n", xht->pcpus));
XEN_HYPER_PRI(fp, len, "vcpus: ", buf, flag,
(buf, "%d\n", xht->vcpus));
XEN_HYPER_PRI(fp, len, "domains: ", buf, flag,
(buf, "%d\n", xht->domains));
XEN_HYPER_PRI(fp, len, "sys_pages: ", buf, flag,
(buf, "%lu\n", xht->sys_pages));
XEN_HYPER_PRI(fp, len, "crashing_cpu: ", buf, flag,
(buf, "%d\n", xht->crashing_cpu));
XEN_HYPER_PRI(fp, len, "crashing_vcc: ", buf, flag,
(buf, "%p\n", xht->crashing_vcc));
XEN_HYPER_PRI(fp, len, "max_page: ", buf, flag,
(buf, "%lu\n", xht->max_page));
XEN_HYPER_PRI(fp, len, "total_pages: ", buf, flag,
(buf, "%lu\n", xht->total_pages));
XEN_HYPER_PRI(fp, len, "cpumask: ", buf, flag,
(buf, "%p\n", xht->cpumask));
if (verbose && xht->cpumask) {
xen_hyper_dump_mem(xht->cpumask,
XEN_HYPER_SIZE(cpumask_t), sizeof(long));
}
XEN_HYPER_PRI(fp, len, "cpu_idxs: ", buf, flag,
(buf, "%p\n", xht->cpu_idxs));
if (verbose) {
for_cpu_indexes(i, cpuid)
fprintf(fp, "%03d : %d\n", i, cpuid);
}
}
/*
* "help -x dmp" output
*/
static void
xen_hyper_dump_xen_hyper_dumpinfo_table(int verbose)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
int len, flag;
len = 25;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "note_ver: ", buf, flag,
(buf, "%u\n", xhdit->note_ver));
XEN_HYPER_PRI(fp, len, "context_array: ", buf, flag,
(buf, "%p\n", xhdit->context_array));
if (verbose && xhdit->context_array) {
xen_hyper_dump_mem((long *)xhdit->context_array,
sizeof(struct xen_hyper_dumpinfo_context) *
XEN_HYPER_MAX_CPUS(), sizeof(long));
}
XEN_HYPER_PRI(fp, len, "context_xen_core_array: ", buf, flag,
(buf, "%p\n", xhdit->context_xen_core_array));
if (verbose && xhdit->context_xen_core_array) {
xen_hyper_dump_mem((long *)xhdit->context_xen_core_array,
sizeof(struct xen_hyper_dumpinfo_context_xen_core) *
XEN_HYPER_MAX_CPUS(), sizeof(long));
}
XEN_HYPER_PRI_CONST(fp, len, "context_xen_info: ", flag|XEN_HYPER_PRI_LF);
XEN_HYPER_PRI(fp, len, "note: ", buf, flag,
(buf, "%lx\n", xhdit->context_xen_info.note));
XEN_HYPER_PRI(fp, len, "pcpu_id: ", buf, flag,
(buf, "%u\n", xhdit->context_xen_info.pcpu_id));
XEN_HYPER_PRI(fp, len, "crash_xen_info_ptr: ", buf, flag,
(buf, "%p\n", xhdit->context_xen_info.crash_xen_info_ptr));
XEN_HYPER_PRI(fp, len, "crash_note_core_array: ", buf, flag,
(buf, "%p\n", xhdit->crash_note_core_array));
if (verbose && xhdit->crash_note_core_array) {
xen_hyper_dump_mem((long *)xhdit->crash_note_core_array,
xhdit->core_size * XEN_HYPER_NR_PCPUS(),
sizeof(long));
}
XEN_HYPER_PRI(fp, len, "crash_note_xen_core_array: ", buf, flag,
(buf, "%p\n", xhdit->crash_note_xen_core_array));
if (verbose && xhdit->crash_note_xen_core_array) {
xen_hyper_dump_mem(
xhdit->crash_note_xen_core_array,
xhdit->xen_core_size * XEN_HYPER_NR_PCPUS(),
sizeof(long));
}
XEN_HYPER_PRI(fp, len, "crash_note_xen_info_ptr: ", buf, flag,
(buf, "%p\n", xhdit->crash_note_xen_info_ptr));
if (verbose && xhdit->crash_note_xen_info_ptr) {
xen_hyper_dump_mem(
xhdit->crash_note_xen_info_ptr,
xhdit->xen_info_size, sizeof(long));
}
XEN_HYPER_PRI(fp, len, "xen_info_cpu: ", buf, flag,
(buf, "%u\n", xhdit->xen_info_cpu));
XEN_HYPER_PRI(fp, len, "note_size: ", buf, flag,
(buf, "%u\n", xhdit->note_size));
XEN_HYPER_PRI(fp, len, "core_offset: ", buf, flag,
(buf, "%u\n", xhdit->core_offset));
XEN_HYPER_PRI(fp, len, "core_size: ", buf, flag,
(buf, "%u\n", xhdit->core_size));
XEN_HYPER_PRI(fp, len, "xen_core_offset: ", buf, flag,
(buf, "%u\n", xhdit->xen_core_offset));
XEN_HYPER_PRI(fp, len, "xen_core_size: ", buf, flag,
(buf, "%u\n", xhdit->xen_core_size));
XEN_HYPER_PRI(fp, len, "xen_info_offset: ", buf, flag,
(buf, "%u\n", xhdit->xen_info_offset));
XEN_HYPER_PRI(fp, len, "xen_info_size: ", buf, flag,
(buf, "%u\n", xhdit->xen_info_size));
}
/*
* "help -x dom" output
*/
static void
xen_hyper_dump_xen_hyper_domain_table(int verbose)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
struct xen_hyper_domain_context *dcca;
int len, flag, i;
len = 22;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "context_array: ", buf, flag,
(buf, "%p\n", xhdt->context_array));
if (verbose) {
char buf1[XEN_HYPER_CMD_BUFSIZE];
int j;
for (i = 0, dcca = xhdt->context_array;
i < xhdt->context_array_cnt; i++, dcca++) {
snprintf(buf, XEN_HYPER_CMD_BUFSIZE, "context_array[%d]: ", i);
XEN_HYPER_PRI_CONST(fp, len, buf, flag|XEN_HYPER_PRI_LF);
XEN_HYPER_PRI(fp, len, "domain: ", buf, flag,
(buf, "%lx\n", dcca->domain));
XEN_HYPER_PRI(fp, len, "domain_id: ", buf, flag,
(buf, "%d\n", dcca->domain_id));
XEN_HYPER_PRI(fp, len, "tot_pages: ", buf, flag,
(buf, "%x\n", dcca->tot_pages));
XEN_HYPER_PRI(fp, len, "max_pages: ", buf, flag,
(buf, "%x\n", dcca->max_pages));
XEN_HYPER_PRI(fp, len, "xenheap_pages: ", buf, flag,
(buf, "%x\n", dcca->xenheap_pages));
XEN_HYPER_PRI(fp, len, "shared_info: ", buf, flag,
(buf, "%lx\n", dcca->shared_info));
XEN_HYPER_PRI(fp, len, "sched_priv: ", buf, flag,
(buf, "%lx\n", dcca->sched_priv));
XEN_HYPER_PRI(fp, len, "next_in_list: ", buf, flag,
(buf, "%lx\n", dcca->next_in_list));
XEN_HYPER_PRI(fp, len, "domain_flags: ", buf, flag,
(buf, "%lx\n", dcca->domain_flags));
XEN_HYPER_PRI(fp, len, "evtchn: ", buf, flag,
(buf, "%lx\n", dcca->evtchn));
XEN_HYPER_PRI(fp, len, "vcpu_cnt: ", buf, flag,
(buf, "%d\n", dcca->vcpu_cnt));
for (j = 0; j < XEN_HYPER_MAX_VIRT_CPUS; j++) {
snprintf(buf1, XEN_HYPER_CMD_BUFSIZE, "vcpu[%d]: ", j);
XEN_HYPER_PRI(fp, len, buf1, buf, flag,
(buf, "%lx\n", dcca->vcpu[j]));
}
XEN_HYPER_PRI(fp, len, "vcpu_context_array: ", buf, flag,
(buf, "%p\n", dcca->vcpu_context_array));
}
}
XEN_HYPER_PRI(fp, len, "context_array_cnt: ", buf, flag,
(buf, "%d\n", xhdt->context_array_cnt));
XEN_HYPER_PRI(fp, len, "running_domains: ", buf, flag,
(buf, "%lu\n", xhdt->running_domains));
XEN_HYPER_PRI(fp, len, "dom_io: ", buf, flag,
(buf, "%p\n", xhdt->dom_io));
XEN_HYPER_PRI(fp, len, "dom_xen: ", buf, flag,
(buf, "%p\n", xhdt->dom_xen));
XEN_HYPER_PRI(fp, len, "dom0: ", buf, flag,
(buf, "%p\n", xhdt->dom0));
XEN_HYPER_PRI(fp, len, "idle_domain: ", buf, flag,
(buf, "%p\n", xhdt->idle_domain));
XEN_HYPER_PRI(fp, len, "curr_domain: ", buf, flag,
(buf, "%p\n", xhdt->curr_domain));
XEN_HYPER_PRI(fp, len, "last: ", buf, flag,
(buf, "%p\n", xhdt->last));
XEN_HYPER_PRI(fp, len, "domain_struct: ", buf, flag,
(buf, "%p\n", xhdt->domain_struct));
XEN_HYPER_PRI(fp, len, "domain_struct_verify: ", buf, flag,
(buf, "%p\n", xhdt->domain_struct_verify));
}
/*
* "help -x vcp" output
*/
static void
xen_hyper_dump_xen_hyper_vcpu_table(int verbose)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
int len, flag;
len = 25;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "vcpu_context_arrays: ", buf, flag,
(buf, "%p\n", xhvct->vcpu_context_arrays));
XEN_HYPER_PRI(fp, len, "vcpu_context_arrays_cnt: ", buf, flag,
(buf, "%d\n", xhvct->vcpu_context_arrays_cnt));
if (verbose) {
struct xen_hyper_vcpu_context_array *vcca;
struct xen_hyper_vcpu_context *vca;
int i, j;
for (i = 0, vcca = xhvct->vcpu_context_arrays;
i < xhvct->vcpu_context_arrays_cnt; i++, vcca++) {
snprintf(buf, XEN_HYPER_CMD_BUFSIZE, "vcpu_context_arrays[%d]: ", i);
XEN_HYPER_PRI_CONST(fp, len, buf, flag|XEN_HYPER_PRI_LF);
if (vcca->context_array) {
XEN_HYPER_PRI(fp, len, "context_array: ", buf, flag,
(buf, "%p\n", vcca->context_array));
} else {
XEN_HYPER_PRI(fp, len, "context_array: ", buf, flag,
(buf, "NULL\n"));
}
XEN_HYPER_PRI(fp, len, "context_array_cnt: ", buf, flag,
(buf, "%d\n", vcca->context_array_cnt));
XEN_HYPER_PRI(fp, len, "context_array_valid: ", buf, flag,
(buf, "%d\n", vcca->context_array_valid));
for (j = 0, vca = vcca->context_array;
j < vcca->context_array_cnt; j++, vca++) {
snprintf(buf, XEN_HYPER_CMD_BUFSIZE, "context_array[%d]: ", j);
XEN_HYPER_PRI_CONST(fp, len, buf, flag|XEN_HYPER_PRI_LF);
XEN_HYPER_PRI(fp, len, "vcpu: ", buf, flag,
(buf, "%lx\n", vca->vcpu));
XEN_HYPER_PRI(fp, len, "vcpu_id: ", buf, flag,
(buf, "%d\n", vca->vcpu_id));
XEN_HYPER_PRI(fp, len, "processor: ", buf, flag,
(buf, "%d\n", vca->processor));
XEN_HYPER_PRI(fp, len, "vcpu_info: ", buf, flag,
(buf, "%lx\n", vca->vcpu_info));
XEN_HYPER_PRI(fp, len, "domain: ", buf, flag,
(buf, "%lx\n", vca->domain));
XEN_HYPER_PRI(fp, len, "next_in_list: ", buf, flag,
(buf, "%lx\n", vca->next_in_list));
XEN_HYPER_PRI(fp, len, "sleep_tick: ", buf, flag,
(buf, "%lx\n", vca->sleep_tick));
XEN_HYPER_PRI(fp, len, "sched_priv: ", buf, flag,
(buf, "%lx\n", vca->sched_priv));
XEN_HYPER_PRI(fp, len, "state: ", buf, flag,
(buf, "%d\n", vca->state));
XEN_HYPER_PRI(fp, len, "state_entry_time: ", buf, flag,
(buf, "%llux\n", (unsigned long long)(vca->state_entry_time)));
XEN_HYPER_PRI(fp, len, "runstate_guest: ", buf, flag,
(buf, "%lx\n", vca->runstate_guest));
XEN_HYPER_PRI(fp, len, "vcpu_flags: ", buf, flag,
(buf, "%lx\n", vca->vcpu_flags));
}
}
}
XEN_HYPER_PRI(fp, len, "idle_vcpu: ", buf, flag,
(buf, "%lx\n", xhvct->idle_vcpu));
XEN_HYPER_PRI(fp, len, "idle_vcpu_context_array: ", buf, flag,
(buf, "%p\n", xhvct->idle_vcpu_context_array));
XEN_HYPER_PRI(fp, len, "last: ", buf, flag,
(buf, "%p\n", xhvct->last));
XEN_HYPER_PRI(fp, len, "vcpu_struct: ", buf, flag,
(buf, "%p\n", xhvct->vcpu_struct));
XEN_HYPER_PRI(fp, len, "vcpu_struct_verify: ", buf, flag,
(buf, "%p\n", xhvct->vcpu_struct_verify));
}
/*
* "help -x pcp" output
*/
static void
xen_hyper_dump_xen_hyper_pcpu_table(int verbose)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
struct xen_hyper_pcpu_context *pcca;
int len, flag, i;
#ifdef X86_64
uint64_t *ist_p;
int j;
#endif
len = 21;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "context_array: ", buf, flag,
(buf, "%p\n", xhpct->context_array));
if (verbose) {
for (i = 0, pcca = xhpct->context_array;
i < XEN_HYPER_MAX_CPUS(); i++, pcca++) {
snprintf(buf, XEN_HYPER_CMD_BUFSIZE, "context_array %d: ", i);
XEN_HYPER_PRI_CONST(fp, len, buf, flag|XEN_HYPER_PRI_LF);
XEN_HYPER_PRI(fp, len, "pcpu: ", buf, flag,
(buf, "%lx\n", pcca->pcpu));
XEN_HYPER_PRI(fp, len, "processor_id: ", buf, flag,
(buf, "%u\n", pcca->processor_id));
XEN_HYPER_PRI(fp, len, "guest_cpu_user_regs: ", buf, flag,
(buf, "%lx\n", pcca->guest_cpu_user_regs));
XEN_HYPER_PRI(fp, len, "current_vcpu: ", buf, flag,
(buf, "%lx\n", pcca->current_vcpu));
XEN_HYPER_PRI(fp, len, "init_tss: ", buf, flag,
(buf, "%lx\n", pcca->init_tss));
#ifdef X86
XEN_HYPER_PRI(fp, len, "sp.esp0: ", buf, flag,
(buf, "%x\n", pcca->sp.esp0));
#endif
#ifdef X86_64
XEN_HYPER_PRI(fp, len, "sp.rsp0: ", buf, flag,
(buf, "%lx\n", pcca->sp.rsp0));
for (j = 0, ist_p = pcca->ist;
j < XEN_HYPER_TSS_IST_MAX; j++, ist_p++) {
XEN_HYPER_PRI(fp, len, "ist: ", buf, flag,
(buf, "%lx\n", *ist_p));
}
#endif
}
}
XEN_HYPER_PRI(fp, len, "last: ", buf, flag,
(buf, "%p\n", xhpct->last));
XEN_HYPER_PRI(fp, len, "pcpu_struct: ", buf, flag,
(buf, "%p\n", xhpct->pcpu_struct));
}
/*
* "help -x sch" output
*/
static void
xen_hyper_dump_xen_hyper_sched_table(int verbose)
{
struct xen_hyper_sched_context *schc;
char buf[XEN_HYPER_CMD_BUFSIZE];
int len, flag, i;
len = 21;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "name: ", buf, flag,
(buf, "%s\n", xhscht->name));
XEN_HYPER_PRI(fp, len, "opt_sched: ", buf, flag,
(buf, "%s\n", xhscht->opt_sched));
XEN_HYPER_PRI(fp, len, "sched_id: ", buf, flag,
(buf, "%d\n", xhscht->sched_id));
XEN_HYPER_PRI(fp, len, "scheduler: ", buf, flag,
(buf, "%lx\n", xhscht->scheduler));
XEN_HYPER_PRI(fp, len, "scheduler_struct: ", buf, flag,
(buf, "%p\n", xhscht->scheduler_struct));
XEN_HYPER_PRI(fp, len, "sched_context_array: ", buf, flag,
(buf, "%p\n", xhscht->sched_context_array));
if (verbose) {
for (i = 0, schc = xhscht->sched_context_array;
i < xht->pcpus; i++, schc++) {
XEN_HYPER_PRI(fp, len, "sched_context_array[", buf,
flag, (buf, "%d]\n", i));
XEN_HYPER_PRI(fp, len, "schedule_data: ", buf, flag,
(buf, "%lx\n", schc->schedule_data));
XEN_HYPER_PRI(fp, len, "sched_resource: ", buf, flag,
(buf, "%lx\n", schc->sched_resource));
XEN_HYPER_PRI(fp, len, "curr: ", buf, flag,
(buf, "%lx\n", schc->curr));
XEN_HYPER_PRI(fp, len, "idle: ", buf, flag,
(buf, "%lx\n", schc->idle));
XEN_HYPER_PRI(fp, len, "sched_priv: ", buf, flag,
(buf, "%lx\n", schc->sched_priv));
XEN_HYPER_PRI(fp, len, "tick: ", buf, flag,
(buf, "%lx\n", schc->tick));
}
}
}
/*
* "help -x siz" output
*/
static void
xen_hyper_dump_xen_hyper_size_table(char *spec, ulong makestruct)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
int len, flag;
len = 23;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "ELF_Prstatus: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.ELF_Prstatus));
XEN_HYPER_PRI(fp, len, "ELF_Signifo: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.ELF_Signifo));
XEN_HYPER_PRI(fp, len, "ELF_Gregset: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.ELF_Gregset));
XEN_HYPER_PRI(fp, len, "ELF_Timeval: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.ELF_Timeval));
XEN_HYPER_PRI(fp, len, "arch_domain: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.arch_domain));
XEN_HYPER_PRI(fp, len, "arch_shared_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.arch_shared_info));
XEN_HYPER_PRI(fp, len, "cpu_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpu_info));
XEN_HYPER_PRI(fp, len, "cpu_time: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpu_time));
XEN_HYPER_PRI(fp, len, "cpu_user_regs: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpu_user_regs));
XEN_HYPER_PRI(fp, len, "cpumask_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpumask_t));
XEN_HYPER_PRI(fp, len, "cpuinfo_ia64: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpuinfo_ia64));
XEN_HYPER_PRI(fp, len, "cpuinfo_x86: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.cpuinfo_x86));
XEN_HYPER_PRI(fp, len, "crash_note_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_note_t));
XEN_HYPER_PRI(fp, len, "crash_note_core_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_note_core_t));
XEN_HYPER_PRI(fp, len, "crash_note_xen_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_note_xen_t));
XEN_HYPER_PRI(fp, len, "crash_note_xen_core_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_note_xen_core_t));
XEN_HYPER_PRI(fp, len, "crash_note_xen_info_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_note_xen_info_t));
XEN_HYPER_PRI(fp, len, "crash_xen_core_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_xen_core_t));
XEN_HYPER_PRI(fp, len, "crash_xen_info_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.crash_xen_info_t));
XEN_HYPER_PRI(fp, len, "domain: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.domain));
#ifdef IA64
XEN_HYPER_PRI(fp, len, "mm_struct: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.mm_struct));
#endif
XEN_HYPER_PRI(fp, len, "note_buf_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.note_buf_t));
XEN_HYPER_PRI(fp, len, "schedule_data: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.schedule_data));
XEN_HYPER_PRI(fp, len, "sched_resource: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.sched_resource));
XEN_HYPER_PRI(fp, len, "scheduler: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.scheduler));
XEN_HYPER_PRI(fp, len, "shared_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.shared_info));
XEN_HYPER_PRI(fp, len, "timer: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.timer));
XEN_HYPER_PRI(fp, len, "tss: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.tss));
XEN_HYPER_PRI(fp, len, "vcpu: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.vcpu));
XEN_HYPER_PRI(fp, len, "vcpu_runstate_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.vcpu_runstate_info));
XEN_HYPER_PRI(fp, len, "xen_crash_xen_regs_t: ", buf, flag,
(buf, "%ld\n", xen_hyper_size_table.xen_crash_xen_regs_t));
}
/*
* "help -x ofs" output
*/
static void
xen_hyper_dump_xen_hyper_offset_table(char *spec, ulong makestruct)
{
char buf[XEN_HYPER_CMD_BUFSIZE];
int len, flag;
len = 45;
flag = XEN_HYPER_PRI_R;
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_info));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_cursig: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_cursig));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_sigpend: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_sigpend));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_sighold: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_sighold));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_pid: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_pid));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_ppid: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_ppid));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_pgrp: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_pgrp));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_sid: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_sid));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_stime: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_stime));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_cutime: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_cutime));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_cstime: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_cstime));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_reg: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_reg));
XEN_HYPER_PRI(fp, len, "ELF_Prstatus_pr_fpvalid: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Prstatus_pr_fpvalid));
XEN_HYPER_PRI(fp, len, "ELF_Timeval_tv_sec: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Timeval_tv_sec));
XEN_HYPER_PRI(fp, len, "ELF_Timeval_tv_usec: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.ELF_Timeval_tv_usec));
#ifdef IA64
XEN_HYPER_PRI(fp, len, "arch_domain_mm: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.arch_domain_mm));
#endif
XEN_HYPER_PRI(fp, len, "arch_shared_info_max_pfn: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.arch_shared_info_max_pfn));
XEN_HYPER_PRI(fp, len, "arch_shared_info_pfn_to_mfn_frame_list_list: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.arch_shared_info_pfn_to_mfn_frame_list_list));
XEN_HYPER_PRI(fp, len, "arch_shared_info_nmi_reason: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.arch_shared_info_nmi_reason));
XEN_HYPER_PRI(fp, len, "cpu_info_guest_cpu_user_regs: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_info_guest_cpu_user_regs));
XEN_HYPER_PRI(fp, len, "cpu_info_processor_id: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_info_processor_id));
XEN_HYPER_PRI(fp, len, "cpu_info_current_vcpu: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_info_current_vcpu));
XEN_HYPER_PRI(fp, len, "cpu_time_local_tsc_stamp: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_time_local_tsc_stamp));
XEN_HYPER_PRI(fp, len, "cpu_time_stime_local_stamp: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_time_stime_local_stamp));
XEN_HYPER_PRI(fp, len, "cpu_time_stime_master_stamp: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_time_stime_master_stamp));
XEN_HYPER_PRI(fp, len, "cpu_time_tsc_scale: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_time_tsc_scale));
XEN_HYPER_PRI(fp, len, "cpu_time_calibration_timer: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.cpu_time_calibration_timer));
XEN_HYPER_PRI(fp, len, "crash_note_t_core: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_t_core));
XEN_HYPER_PRI(fp, len, "crash_note_t_xen: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_t_xen));
XEN_HYPER_PRI(fp, len, "crash_note_t_xen_regs: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_t_xen_regs));
XEN_HYPER_PRI(fp, len, "crash_note_t_xen_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_t_xen_info));
XEN_HYPER_PRI(fp, len, "crash_note_core_t_note: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_core_t_note));
XEN_HYPER_PRI(fp, len, "crash_note_core_t_desc: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_core_t_desc));
XEN_HYPER_PRI(fp, len, "crash_note_xen_t_note: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_t_note));
XEN_HYPER_PRI(fp, len, "crash_note_xen_t_desc: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_t_desc));
XEN_HYPER_PRI(fp, len, "crash_note_xen_core_t_note: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_core_t_note));
XEN_HYPER_PRI(fp, len, "crash_note_xen_core_t_desc: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_core_t_desc));
XEN_HYPER_PRI(fp, len, "crash_note_xen_info_t_note: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_info_t_note));
XEN_HYPER_PRI(fp, len, "crash_note_xen_info_t_desc: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.crash_note_xen_info_t_desc));
XEN_HYPER_PRI(fp, len, "domain_page_list: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_page_list));
XEN_HYPER_PRI(fp, len, "domain_xenpage_list: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_xenpage_list));
XEN_HYPER_PRI(fp, len, "domain_domain_id: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_domain_id));
XEN_HYPER_PRI(fp, len, "domain_tot_pages: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_tot_pages));
XEN_HYPER_PRI(fp, len, "domain_max_pages: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_max_pages));
XEN_HYPER_PRI(fp, len, "domain_xenheap_pages: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_xenheap_pages));
XEN_HYPER_PRI(fp, len, "domain_shared_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_shared_info));
XEN_HYPER_PRI(fp, len, "domain_sched_priv: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_sched_priv));
XEN_HYPER_PRI(fp, len, "domain_next_in_list: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_next_in_list));
XEN_HYPER_PRI(fp, len, "domain_domain_flags: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_domain_flags));
XEN_HYPER_PRI(fp, len, "domain_evtchn: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_evtchn));
XEN_HYPER_PRI(fp, len, "domain_is_hvm: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_hvm));
XEN_HYPER_PRI(fp, len, "domain_guest_type: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_guest_type));
XEN_HYPER_PRI(fp, len, "domain_is_privileged: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_privileged));
XEN_HYPER_PRI(fp, len, "domain_debugger_attached: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_debugger_attached));
if (XEN_HYPER_VALID_MEMBER(domain_is_polling)) {
XEN_HYPER_PRI(fp, len, "domain_is_polling: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_polling));
}
XEN_HYPER_PRI(fp, len, "domain_is_dying: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_dying));
/* Only one of next both exists but print both, ones value is -1. */
XEN_HYPER_PRI(fp, len, "domain_is_paused_by_controller: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_paused_by_controller));
XEN_HYPER_PRI(fp, len, "domain_controller_pause_count: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_controller_pause_count));
XEN_HYPER_PRI(fp, len, "domain_is_shutting_down: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_shutting_down));
XEN_HYPER_PRI(fp, len, "domain_is_shut_down: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_shut_down));
XEN_HYPER_PRI(fp, len, "domain_vcpu: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_vcpu));
XEN_HYPER_PRI(fp, len, "domain_arch: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_arch));
#ifdef IA64
XEN_HYPER_PRI(fp, len, "mm_struct_pgd: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.mm_struct_pgd));
#endif
XEN_HYPER_PRI(fp, len, "schedule_data_schedule_lock: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_schedule_lock));
XEN_HYPER_PRI(fp, len, "schedule_data_curr: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_curr));
XEN_HYPER_PRI(fp, len, "schedule_data_idle: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_idle));
XEN_HYPER_PRI(fp, len, "schedule_data_sched_priv: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_sched_priv));
XEN_HYPER_PRI(fp, len, "schedule_data_s_timer: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_s_timer));
XEN_HYPER_PRI(fp, len, "schedule_data_tick: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.schedule_data_tick));
XEN_HYPER_PRI(fp, len, "scheduler_name: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_name));
XEN_HYPER_PRI(fp, len, "scheduler_opt_name: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_opt_name));
XEN_HYPER_PRI(fp, len, "scheduler_sched_id: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_sched_id));
XEN_HYPER_PRI(fp, len, "scheduler_init: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_init));
XEN_HYPER_PRI(fp, len, "scheduler_tick: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_tick));
XEN_HYPER_PRI(fp, len, "scheduler_init_vcpu: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_init_vcpu));
XEN_HYPER_PRI(fp, len, "scheduler_destroy_domain: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_destroy_domain));
XEN_HYPER_PRI(fp, len, "scheduler_sleep: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_sleep));
XEN_HYPER_PRI(fp, len, "scheduler_wake: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_wake));
XEN_HYPER_PRI(fp, len, "scheduler_set_affinity: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_set_affinity));
XEN_HYPER_PRI(fp, len, "scheduler_do_schedule: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_do_schedule));
XEN_HYPER_PRI(fp, len, "scheduler_adjust: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_adjust));
XEN_HYPER_PRI(fp, len, "scheduler_dump_settings: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_dump_settings));
XEN_HYPER_PRI(fp, len, "scheduler_dump_cpu_state: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.scheduler_dump_cpu_state));
XEN_HYPER_PRI(fp, len, "shared_info_vcpu_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.shared_info_vcpu_info));
XEN_HYPER_PRI(fp, len, "shared_info_evtchn_pending: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.shared_info_evtchn_pending));
XEN_HYPER_PRI(fp, len, "shared_info_evtchn_mask: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.shared_info_evtchn_mask));
XEN_HYPER_PRI(fp, len, "shared_info_arch: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.shared_info_arch));
XEN_HYPER_PRI(fp, len, "timer_expires: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_expires));
XEN_HYPER_PRI(fp, len, "timer_cpu: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_cpu));
XEN_HYPER_PRI(fp, len, "timer_function: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_function));
XEN_HYPER_PRI(fp, len, "timer_data: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_data));
XEN_HYPER_PRI(fp, len, "timer_heap_offset: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_heap_offset));
XEN_HYPER_PRI(fp, len, "timer_killed: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.timer_killed));
XEN_HYPER_PRI(fp, len, "tss_struct_rsp0: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.tss_rsp0));
XEN_HYPER_PRI(fp, len, "tss_struct_esp0: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.tss_esp0));
XEN_HYPER_PRI(fp, len, "vcpu_vcpu_id: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_vcpu_id));
XEN_HYPER_PRI(fp, len, "vcpu_processor: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_processor));
XEN_HYPER_PRI(fp, len, "vcpu_vcpu_info: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_vcpu_info));
XEN_HYPER_PRI(fp, len, "vcpu_domain: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_domain));
XEN_HYPER_PRI(fp, len, "vcpu_next_in_list: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_next_in_list));
XEN_HYPER_PRI(fp, len, "vcpu_timer: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_timer));
XEN_HYPER_PRI(fp, len, "vcpu_sleep_tick: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_sleep_tick));
XEN_HYPER_PRI(fp, len, "vcpu_poll_timer: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_poll_timer));
XEN_HYPER_PRI(fp, len, "vcpu_sched_priv: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_sched_priv));
XEN_HYPER_PRI(fp, len, "vcpu_runstate: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_runstate));
XEN_HYPER_PRI(fp, len, "vcpu_runstate_guest: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_runstate_guest));
XEN_HYPER_PRI(fp, len, "vcpu_vcpu_flags: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_vcpu_flags));
XEN_HYPER_PRI(fp, len, "vcpu_pause_count: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_pause_count));
XEN_HYPER_PRI(fp, len, "vcpu_virq_to_evtchn: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_virq_to_evtchn));
XEN_HYPER_PRI(fp, len, "vcpu_cpu_affinity: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_cpu_affinity));
XEN_HYPER_PRI(fp, len, "vcpu_nmi_addr: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_nmi_addr));
XEN_HYPER_PRI(fp, len, "vcpu_vcpu_dirty_cpumask: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_vcpu_dirty_cpumask));
XEN_HYPER_PRI(fp, len, "vcpu_arch: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_arch));
XEN_HYPER_PRI(fp, len, "vcpu_runstate_info_state: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_runstate_info_state));
XEN_HYPER_PRI(fp, len, "vcpu_runstate_info_state_entry_time: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_runstate_info_state_entry_time));
XEN_HYPER_PRI(fp, len, "vcpu_runstate_info_time: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_runstate_info_time));
#ifdef IA64
XEN_HYPER_PRI(fp, len, "vcpu_thread_ksp: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.vcpu_thread_ksp));
#endif
}
/*
* dump specified memory with specified size.
*/
#define DSP_BYTE_SIZE 16
static void
xen_hyper_dump_mem(void *mem, ulong len, int dsz)
{
long i, max;
void *mem_w = mem;
if (!len ||
(dsz != SIZEOF_8BIT && dsz != SIZEOF_16BIT &&
dsz != SIZEOF_32BIT && dsz != SIZEOF_64BIT))
return;
max = len / dsz + (len % dsz ? 1 : 0);
for (i = 0; i < max; i++) {
if (i != 0 && !(i % (DSP_BYTE_SIZE / dsz)))
fprintf(fp, "\n");
if (i == 0 || !(i % (DSP_BYTE_SIZE / dsz)))
fprintf(fp, "%p : ", mem_w);
if (dsz == SIZEOF_8BIT)
fprintf(fp, "%02x ", *(uint8_t *)mem_w);
else if (dsz == SIZEOF_16BIT)
fprintf(fp, "%04x ", *(uint16_t *)mem_w);
else if (dsz == SIZEOF_32BIT)
fprintf(fp, "%08x ", *(uint32_t *)mem_w);
else if (dsz == SIZEOF_64BIT)
fprintf(fp, "%016llx ", *(unsigned long long *)mem_w);
mem_w = (char *)mem_w + dsz;
}
fprintf(fp, "\n");
}
#endif