[Crash-utility] question about phys_base
HATAYAMA Daisuke
d.hatayama at jp.fujitsu.com
Wed Feb 29 01:04:24 UTC 2012
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.
Thanks.
HATAYAMA, Daisuke
More information about the Crash-utility
mailing list