[Crash-utility] question about phys_base
Wen Congyang
wency at cn.fujitsu.com
Mon Feb 27 01:01:18 UTC 2012
At 02/24/2012 09:37 PM, Dave Anderson Wrote:
>
>
> ----- Original Message -----
>> At 02/17/2012 10:20 PM, Dave Anderson Wrote:
>>>
>>>
>>> ----- Original Message -----
>>>> At 02/17/2012 12:30 AM, Dave Anderson Wrote:
>>>
>>>>>> Yes. Even if the guest is linux, it is still impossible to do it. Because
>>>>>> the guest maybe in the second kernel.
>>>>>>
>>>>>> qemu-dump walks all guest's page table and collect virtual address and
>>>>>> physical address mapping. If the page is not used by guest, the virtual is set
>>>>>> to 0. I create PT_LOAD according to such mapping. So if the guest linux,
>>>>>> there may be a PT_LOAD segment that describes __START_KERNEL_map region.
>>>>>> But the information stored in PT_LOAD maybe for the second. If crash
>>>>>> uses it, crash will see the second kernel, not the first kernel.
>>>>>
>>>>> Just to be clear -- what do you mean by the "second" kernel? Do you
>>>>> mean that a guest kernel crashed guest, and did a kdump operation,
>>>>> and that second kdump kernel failed somehow, and now you're trying
>>>>> to do a "virsh dump" on the kdump kernel?
>>>>
>>>> Yes, the second kernel means kdump kernel. If kdump failed, the user can
>>>> use it to dump the guest's memory.
>>>
>>> OK, so will your code present two different "types" of ELF headers?
>>
>> I donot understand what do you want to say.
>> Do you mean there is two ELF headers in qemu-generated vmcore?
>
> No. What I want to understand is how x86_64_calc_phys_base() will
> be able to confidently recognize that an ELF file was qemu-generated,
> so that it can then do the right thing.
>
> And from your description, it sounds like there will be different PT_LOAD
> descriptors based upon whether it's the first or second kernel. And
> the difference between the two would be based upon which (if any) of the
> following statements are true:
>
> (1) first kernel -- contains a valid __START_KERNEL_map PT_LOAD segment
> (2) first kernel -- does *not* contain a __START_KERNEL_map PT_LOAD segment
> (3) second kernel -- contains an invalid (first kernel) __START_KERNEL_map PT_LOAD segment
> (4) second kernel -- does *not* contain a __START_KERNEL_map PT_LOAD segment
> (5) ???
The guest is in first kernel:
# readelf /tmp/vm2.save -l| grep 0xffffffff8
LOAD 0x00000000010226b8 0xffffffff81000000 0x0000000001000000
LOAD 0x00000000010226b8 0xffffffff81000000 0x0000000001000000
LOAD 0x00000000010226b8 0xffffffff81000000 0x0000000001000000
LOAD 0x00000000010226b8 0xffffffff81000000 0x0000000001000000
The guest is in the second kernel(vcpu > 1)
]# readelf /tmp/vm2.save2 -l| grep 0xffffffff8
LOAD 0x0000000001017be0 0xffffffff81000000 0x0000000001000000
LOAD 0x0000000001017be0 0xffffffff81000000 0x0000000001000000
LOAD 0x0000000001017be0 0xffffffff81000000 0x0000000001000000
LOAD 0x0000000004017be0 0xffffffff81000000 0x0000000004000000
The guest is in the second kernel(vcpu = 1)
[root at ghost ~]# readelf /tmp/vm2.save3 -l| grep 0xffffffff8
LOAD 0x0000000004001e4c 0xffffffff81000000 0x0000000004000000
I donot find differentiate qemu-genetated ELF headers from dump-generated ELF
headers.
Thanks
Wen Congyang
>
> What will differentiate qemu-generated ELF headers from kdump-generated ELF
> headers?
>
> Dave
>
More information about the Crash-utility
mailing list