[Crash-utility] question about phys_base
Wen Congyang
wency at cn.fujitsu.com
Wed Feb 29 06:01:44 UTC 2012
At 02/29/2012 09:04 AM, HATAYAMA Daisuke Wrote:
> From: Dave Anderson <anderson at redhat.com>
> Subject: Re: [Crash-utility] question about phys_base
> Date: Tue, 28 Feb 2012 09:44:09 -0500 (EST)
>
>>
>>
>> ----- Original Message -----
>>> At 02/28/2012 04:52 PM, HATAYAMA Daisuke Wrote:
>>
>>>>>> In general, such characteristic should not be used. You should prepare
>>>>>> a solid interface. Even if using them, it should be limited to as
>>>>>> workaround to avoid some issue.
>>>>>>
>>>>>> Why not use qemu's CPU state? Include it as note information with good
>>>>>> name, and we can use it to distinguish which. Like:
>>>>>>
>>>>>> $ readelf -n vmcore
>>>>>>
>>>>>> Notes at offset 0x000001c8 with length 0x00000838:
>>>>>> Owner Data size Description
>>>>>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>>>>>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>>>>>> QEMU 0x00000557 Unknown note type: (0x00000000)
>>>>>>
>>>>>> Or QEMUCPUState is better?
>>>>>
>>>>> Good idea. I will try it, and hope gdb can also work.
>>>>>
>>>>
>>>> Tools basically ignore unknown notes. Looking into gdb, it appears to
>>>> ignore unknown information.
>>>>
>>>> static bfd_boolean
>>>> elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
>>>> {
>>>> const struct elf_backend_data *bed = get_elf_backend_data (abfd);
>>>>
>>>> switch (note->type)
>>>> {
>>>> default:
>>>> return TRUE;
>>>> <cut>
>>>>
>>>> You might need to add new command to output contents of new note if
>>>> it's necessary.
>>>
>>> My goal is:
>>> 1. gdb uses NT_PRSTATUS, and can work well
>>> 2. crash uses unknown notes, and can get phys_base from it.
>>>
>>> Another question:
>>>
>>> What is QEMUCPUState? I donot find its definition?
>>
>> It's just the note's name character string. Either "QEMU", "QEMUCPUState",
>> or whatever unique character string you prefer would suffice.
>>
>>> What note->type shoule be for "QEMU"? If we choose an unused value, the
>>> value may be used in the future.
>>
>> Why not do the same thing as the "VMCOREINFO" note, and leave it
>> as an "illegal/unknown" type of 0::
>>
>> $ cat /usr/include/elf.h
>> ... [ cut ] ...
>>
>> /* Legal values for note segment descriptor types for core files. */
>>
>> #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
>> #define NT_FPREGSET 2 /* Contains copy of fpregset struct */
>> #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
>> ...
>> $
>>
>> $ readelf -a vmcore
>> ... [ cut ] ...
>>
>> Notes at offset 0x00000190 with length 0x00000f1c:
>> Owner Data size Description
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> CORE 0x00000150 NT_PRSTATUS (prstatus structure)
>> VMCOREINFO 0x000003e4 Unknown note type: (0x00000000)
>> $
>>
>
> It looks OK to me for now.
>
> But rigorously, it might be better to give it a name QEMU and then
> prepare variety of information such as NT_CPUSTATE and others to be
> needed later.
I see. I think we should decide what information should be stored in QEMUCPUState.
The CPUState in qemu cannot be used directly, because it may be changed in the furture.
I think all CPU register should be stored in QEMUCPUState. Do we need other information?
Thanks
Wen Congyang
>
> Thanks.
> HATAYAMA, Daisuke
>
>
More information about the Crash-utility
mailing list