From: Dave Anderson <anderson(a)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