Are ppc*_elf_write_core_note Os-specific?

John Baldwin jhb@freebsd.org
Tue Jan 19 19:01:00 GMT 2016


On Tuesday, January 19, 2016 08:41:05 AM H.J. Lu wrote:
> On Mon, Jan 18, 2016 at 7:14 PM, Alan Modra <amodra@gmail.com> wrote:
> > On Tue, Jan 19, 2016 at 10:48:19AM +1030, Alan Modra wrote:
> >> PowerPC64 glibc even now doesn't defing prstatus32_t.  :-(  It seems
> >> only sparc and s390 do so.  So PowerPC would need a
> >> hosts/powerpc-linux.h to define them for Linux, with some configury
> >> changes, like hosts/x86-64linux.h does for x86-64 Linux.  I'll see
> >> about making those changes.
> >>
> >> Note that elf_backend_write_core_note is defined for x86-64, arm and
> >> aarch64 too.  The ARM and AARCH64 functions look to be completely
> >> redundant, and I suspect all of them could disappear if we modify the
> >> generic code to handle prstatusx32_t for x86-64.
> >
> > Actually, there is a reason for the ARM and AARCH64 functions.
> > See https://sourceware.org/ml/binutils/2011-10/msg00202.html
> > Note the followup emails too..
> >
> > So it seems that with the current infrastructure we can either support
> > core file generation on remote (linux) targets, or core file
> > generation on more native targets (freebsd).  Alternatively, we'd
> > need to use separate bfd target vectors for linux and freebsd, which
> > can and will cause multiple target matches.
> >
> > Do we really want non-native core file generation?
> >
> 
> Any changes shouldn't introduce regressions.  I don't see why
> elf_backend_write_core_note can't handle all targets BFD supports
> since note_type is unique to each OS.  BFD just needs to provide
> proper types independent of host header files, similar to
> hosts/x86-64linux.h.

Switching on note_type alone (as the current write_core_note methods do)
isn't sufficient.   Currently bfd writes out notes like NT_PRSTATUS and
NT_PRPSINFO with the "CORE" name on multiple platforms, so a
(note_name, note_type) tuple also seems insufficient.  Are you suggesting
to switch on (ELF OSABI, note_type)?  That is, supposing you had a
hosts/x86-64freebsd.h with a 'struct freebsd_amd64_prstatus' and if
hosts/x86-64linux.h had 'struct linux_x86_64_prstatus' (or whatever names
are preferred), then the logic in the write_core_note would look something
like:

  switch (get_elf_backend_data (abfd)->elf_osabi)
    {
      case ELFOSABI_FREEBSD:
        {
          switch (note_type)
            {
              case NT_PRSTATUS:
                 struct freebsd_amd64_prstatus prstatus;
                 ...
                 return elfcore_write_note (abfd, ... &prstatus, ...);
              ...
            }
          ...
        }
      case ELFOSABI_LINUX:
        {
          switch (note_type)
            {
              case NT_PRSTATUS:
                 struct linux_x86_64_prstatus prstatus;
                 ...
                 return elfcore_write_note (abfd, ... &prstatus, ...);
              ...
            }
          ...
        }
      ..
    }

If so, checking elf_osabi in the current write_core_note functions and
falling back to the native "catch-all" if it is not a currently-supported
elf_osabi would be sufficient to preserve existing functionality (I think)
while allowing other ABIs to either use the catch-all or implement support
for desired non-native cores.

-- 
John Baldwin



More information about the Gdb mailing list