----- Original Message -----
VMSS dump files contain the state of each vCPU at the time of
suspending
the VM. This change enables 'crash' to read some relevant registers from
each vCPU state to display them in 'bt' and adds additional output for
commands 'help -D', 'help -r' and 'help -p'.
This is also the first step towards implementing kaslr offset
calculation for VMSS dump files.
---
defs.h | 5 +
help.c | 3 +
kernel.c | 2 +
main.c | 3 +
memory.c | 2 +
vmware_vmss.c | 375
++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
vmware_vmss.h | 31 +++++
x86_64.c | 13 +-
8 files changed, 424 insertions(+), 10 deletions(-)
Hi Sergio,
I should have mentioned this before, but there is a build option
for compiling with several warning ptions, which should result in
clean compiles. Here on an x86_64:
$ make warn
... [ cut ] ...
cc -c -g -DX86_64 -DLZO -DSNAPPY -DGDB_7_6 vmware_vmss.c -Wall -O2 -Wstrict-prototypes
-Wmissing-prototypes -fstack-protector -Wformat-security
vmware_vmss.c: In function ‘vmware_vmss_init’:
vmware_vmss.c:242:6: warning: dereferencing type-punned pointer will break strict-aliasing
rules [-Wstrict-aliasing]
vmss.regs64[cpu]->idtr = *((uint64_t *)(&buf[0] + 2));
^
vmware_vmss.c: In function ‘vmware_vmss_display_regs’:
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
);
^
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 6 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 7 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 8 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 9 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 10 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 11 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 12 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 13 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 14 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 15 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 16 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 17 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 18 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 19 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:439:3: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 20 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c: In function ‘get_vmware_vmss_regs’:
vmware_vmss.c:447:23: warning: unused variable ‘rp’ [-Wunused-variable]
struct register_set *rp;
^
vmware_vmss.c: In function ‘vmware_vmss_memory_dump’:
vmware_vmss.c:501:4: warning: format ‘%s’ expects argument of type ‘char *’, but argument
3 has type ‘int’ [-Wformat=]
errno, strerror(errno));
^
vmware_vmss.c:501:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 4
has type ‘char *’ [-Wformat=]
vmware_vmss.c:501:4: warning: format ‘%s’ expects a matching ‘char *’ argument
[-Wformat=]
vmware_vmss.c: In function ‘dump_registers_for_vmss_dump’:
vmware_vmss.c:695:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->rax, regs->rbx, regs->rcx);
^
vmware_vmss.c:695:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:695:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:697:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->rdx, regs->rsi, regs->rdi);
^
vmware_vmss.c:697:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:697:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:699:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->rsp, regs->rbp, regs->r8);
^
vmware_vmss.c:699:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:699:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:701:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->r9, regs->r10, regs->r11);
^
vmware_vmss.c:701:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:701:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:703:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->r12, regs->r13, regs->r14);
^
vmware_vmss.c:703:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:703:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:705:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->r15, regs->rip, regs->rflags);
^
vmware_vmss.c:705:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:705:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:707:25: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->idtr);
^
vmware_vmss.c:709:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->cr[0], regs->cr[1], regs->cr[2]);
^
vmware_vmss.c:709:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:709:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 5 has type ‘uint64_t’ [-Wformat=]
vmware_vmss.c:711:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 3 has type ‘uint64_t’ [-Wformat=]
regs->cr[3], regs->cr[4]);
^
vmware_vmss.c:711:4: warning: format ‘%llx’ expects argument of type ‘long long unsigned
int’, but argument 4 has type ‘uint64_t’ [-Wformat=]
cc -c -g -DX86_64 -DLZO -DSNAPPY -DGDB_7_6 xen_dom0.c -Wall -O2 -Wstrict-prototypes
-Wmissing-prototypes -fstack-protector -Wformat-security
...
And here on 32-bit x86:
$ make warn
... [ cut ] ...
cc -c -g -DX86 -m32 -D_FILE_OFFSET_BITS=64 -DLZO -DSNAPPY -DGDB_7_6 vmware_vmss.c -Wall
-O2 -Wstrict-prototypes -Wmissing-prototypes -fstack-protector -Wformat-security
vmware_vmss.c: In function ‘vmware_vmss_init’:
vmware_vmss.c:242:6: warning: dereferencing type-punned pointer will break strict-aliasing
rules [-Wstrict-aliasing]
vmss.regs64[cpu]->idtr = *((uint64_t *)(&buf[0] + 2));
^
vmware_vmss.c: In function ‘get_vmware_vmss_regs’:
vmware_vmss.c:447:23: warning: unused variable ‘rp’ [-Wunused-variable]
struct register_set *rp;
^
vmware_vmss.c: In function ‘vmware_vmss_memory_dump’:
vmware_vmss.c:501:4: warning: format ‘%s’ expects argument of type ‘char *’, but argument
3 has type ‘int’ [-Wformat=]
errno, strerror(errno));
^
vmware_vmss.c:501:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 4
has type ‘char *’ [-Wformat=]
vmware_vmss.c:501:4: warning: format ‘%s’ expects a matching ‘char *’ argument
[-Wformat=]
...
Can you clean these up?
Thanks,
Dave