[hppa-hpux] Core file support for hppa64-hp-hpux11.11

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

[hppa-hpux] Core file support for hppa64-hp-hpux11.11

Randolph Chung
Together with http://sourceware.org/ml/binutils/2005-11/msg00269.html,
the following patch adds support for corefiles to hppa64-hp-hpux11.11.
This should fix corefiles/2026

I'll check this in once the bfd bits are approved.

randolph

2005-11-17  Randolph Chung  <[hidden email]>

        PR corefiles/2026
        * hppa-hpux-tdep.c (hppa_hpux_core_osabi_sniffer): Recognize core
        files generated by hppa64-hp-hpux*
        (_initialize_hppa_hpux_tdep): Likewise.

Index: hppa-hpux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/hppa-hpux-tdep.c,v
retrieving revision 1.43
diff -u -p -r1.43 hppa-hpux-tdep.c
--- hppa-hpux-tdep.c 29 Oct 2005 21:31:45 -0000 1.43
+++ hppa-hpux-tdep.c 17 Nov 2005 12:18:56 -0000
@@ -2055,6 +2064,8 @@ hppa_hpux_core_osabi_sniffer (bfd *abfd)
 {
   if (strcmp (bfd_get_target (abfd), "hpux-core") == 0)
     return GDB_OSABI_HPUX_SOM;
+  else if (strcmp (bfd_get_target (abfd), "elf64-hppa") == 0)
+    return GDB_OSABI_HPUX_ELF;
 
   return GDB_OSABI_UNKNOWN;
 }
@@ -2067,6 +2078,9 @@ _initialize_hppa_hpux_tdep (void)
   gdbarch_register_osabi_sniffer (bfd_arch_unknown,
   bfd_target_unknown_flavour,
   hppa_hpux_core_osabi_sniffer);
+  gdbarch_register_osabi_sniffer (bfd_arch_hppa,
+                                  bfd_target_elf_flavour,
+  hppa_hpux_core_osabi_sniffer);
 
   gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_HPUX_SOM,
                           hppa_hpux_som_init_abi);
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Mark Kettenis
> Date: Thu, 17 Nov 2005 20:26:06 +0800
> From: Randolph Chung <[hidden email]>
>
> Together with http://sourceware.org/ml/binutils/2005-11/msg00269.html,
> the following patch adds support for corefiles to hppa64-hp-hpux11.11.
> This should fix corefiles/2026
>
> I'll check this in once the bfd bits are approved.
>
> 2005-11-17  Randolph Chung  <[hidden email]>
>
> PR corefiles/2026
> * hppa-hpux-tdep.c (hppa_hpux_core_osabi_sniffer): Recognize core
> files generated by hppa64-hp-hpux*
> (_initialize_hppa_hpux_tdep): Likewise.
>
> Index: hppa-hpux-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/hppa-hpux-tdep.c,v
> retrieving revision 1.43
> diff -u -p -r1.43 hppa-hpux-tdep.c
> --- hppa-hpux-tdep.c 29 Oct 2005 21:31:45 -0000 1.43
> +++ hppa-hpux-tdep.c 17 Nov 2005 12:18:56 -0000
> @@ -2055,6 +2064,8 @@ hppa_hpux_core_osabi_sniffer (bfd *abfd)
>  {
>    if (strcmp (bfd_get_target (abfd), "hpux-core") == 0)
>      return GDB_OSABI_HPUX_SOM;
> +  else if (strcmp (bfd_get_target (abfd), "elf64-hppa") == 0)
> +    return GDB_OSABI_HPUX_ELF;

Don't think this is right.  Is it needed at all?  If it is, then we
should try to do this differently.  The mere fact that the BFD target
is elf64-hppa doesn't imply that this is a HP-UX ELF core file does it?

Mark
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Randolph Chung
> Don't think this is right.  Is it needed at all?  If it is, then we
> should try to do this differently.  The mere fact that the BFD target
> is elf64-hppa doesn't imply that this is a HP-UX ELF core file does it?

Well, the osabi sniffer doesn't say that it's a corefile, it just says
it's a HPUX ELF file. As for whether "elf64-hppa" means hpux, currently
bfd/elf64-hppa.c only supports two targets, hpux and linux, and linux is
"elf64-hppa-linux". I know this is not very nice. Do you have any other
suggestions?

randolph
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Mark Kettenis
> Date: Thu, 17 Nov 2005 20:56:39 +0800
> From: Randolph Chung <[hidden email]>
>
> Well, the osabi sniffer doesn't say that it's a corefile, it just says
> it's a HPUX ELF file. As for whether "elf64-hppa" means hpux, currently
> bfd/elf64-hppa.c only supports two targets, hpux and linux, and linux is
> "elf64-hppa-linux". I know this is not very nice. Do you have any other
> suggestions?

Ok, so your problem is that the core file is marked as "UNIX - System
V", so there's no way to tell that this is a HP-UX core file.

What I'd do, is create BFD sections out of those HP_CORE_XXX program
headers, and then in GDB, check for one of those sections.  There's
one program header that looks particularly promising: HP_CORE_KERNEL.
That one contains the string HP-UX.  That'd certainly convince me that
this is a HP-UX core file.

Actually I think it makes sense to modify your BFD patch such that it
gives all HP_CORE_XXX program headers a sensible name:


/* Support HP specific sections for core files.  */
static bfd_boolean
elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index,
                              const char *typename)
{
  switch (hdr->p_type)
    {
    case PT_HP_CORE_VERSION:
      typename = "core.version";
      break;
    case PT_HP_CORE_KERNEL:
      typename = "core.kernel";
      break;
    case PT_HP_CORE_PROC:

      ...

    }

  if (hdr->p_type == PT_HP_CORE_PROC)
    {
      int sig;

      if (bfd_seek (abfd, hdr->p_offset, SEEK_SET) != 0)
        return FALSE;
      if (bfd_bread (&sig, 4, abfd) != 4)
        return FALSE;

      elf_tdata (abfd)->core_signal = sig;

      /* gdb uses the ".reg" section to read register contents.  */
      if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
             hdr->p_offset))
        return FALSE;
    }

  if (hdr->p_type == PT_HP_CORE_LOADABLE
      || hdr->p_type == PT_HP_CORE_STACK
      || hdr->p_type == PT_HP_CORE_MMF)
    hdr->p_type = PT_LOAD;

  return _bfd_elf_make_section_from_phdr (abfd, hdr, index, typename);
}
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Randolph Chung
> Ok, so your problem is that the core file is marked as "UNIX - System
> V", so there's no way to tell that this is a HP-UX core file.

Yes.

> What I'd do, is create BFD sections out of those HP_CORE_XXX program
> headers, and then in GDB, check for one of those sections.  There's
> one program header that looks particularly promising: HP_CORE_KERNEL.
> That one contains the string HP-UX.  That'd certainly convince me that
> this is a HP-UX core file.

[...]

> Actually I think it makes sense to modify your BFD patch such that it
> gives all HP_CORE_XXX program headers a sensible name:

Sure, I'll do that.

So basically you want:
1) BFD to name the HP_CORE_KERNEL phdr as a "core.kernel" section
2) GDB in its OSABI sniffer will look for this section and check that
its contents contains "HP-UX"

right?

randolph
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Mark Kettenis
> Date: Fri, 18 Nov 2005 07:44:04 +0800
> From: Randolph Chung <[hidden email]>
>
> > Ok, so your problem is that the core file is marked as "UNIX - System
> > V", so there's no way to tell that this is a HP-UX core file.
>
> Yes.
>
> > What I'd do, is create BFD sections out of those HP_CORE_XXX program
> > headers, and then in GDB, check for one of those sections.  There's
> > one program header that looks particularly promising: HP_CORE_KERNEL.
> > That one contains the string HP-UX.  That'd certainly convince me that
> > this is a HP-UX core file.
>
> [...]
>
> > Actually I think it makes sense to modify your BFD patch such that it
> > gives all HP_CORE_XXX program headers a sensible name:
>
> Sure, I'll do that.
>
> So basically you want:
> 1) BFD to name the HP_CORE_KERNEL phdr as a "core.kernel" section
> 2) GDB in its OSABI sniffer will look for this section and check that
> its contents contains "HP-UX"
>
> right?

Yes.  The section will come out as .core.kernel in objdump.  Perhaps
it should be .hp.core.kernel.  I'll leave the naming decision to you
and/or the binutils maintainers.  But I think that's better than
having all those .proc0, .proc1, .proc2 sections that we have now.
And it makes it easier to pick the right one from GDB.

Mark
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Randolph Chung
> Yes.  The section will come out as .core.kernel in objdump.  Perhaps
> it should be .hp.core.kernel.  I'll leave the naming decision to you
> and/or the binutils maintainers.  But I think that's better than
> having all those .proc0, .proc1, .proc2 sections that we have now.
> And it makes it easier to pick the right one from GDB.

actually there's no . prefix unless i explicitly pass one, and they will
look like:

/home/tausq/core:     file format elf64-hppa

Sections:
Idx Name          Size      VMA               LMA               File off
  Algn
   0 hp.core.version0 00000004  0000000000000000  0000000000000000
00000350  2**0
                   CONTENTS, READONLY
   1 hp.core.kernel1 0000003c  0000000000000000  0000000000000000
00000354  2**0
                  CONTENTS, READONLY
   2 hp.core.comm2 00000009  0000000000000000  0000000000000000
00000390  2**0
                   CONTENTS, READONLY
   [...]

Does this match what you have in mind?

randolph
Reply | Threaded
Open this post in threaded view
|

Re: [hppa-hpux] Core file support for hppa64-hp-hpux11.11

Mark Kettenis
> Date: Fri, 18 Nov 2005 20:58:49 +0800
> From: Randolph Chung <[hidden email]>
>
> > Yes.  The section will come out as .core.kernel in objdump.  Perhaps
> > it should be .hp.core.kernel.  I'll leave the naming decision to you
> > and/or the binutils maintainers.  But I think that's better than
> > having all those .proc0, .proc1, .proc2 sections that we have now.
> > And it makes it easier to pick the right one from GDB.
>
> actually there's no . prefix unless i explicitly pass one, and they will
> look like:

Hmm, looks like I misread the code in bfd//elf.c then.

> /home/tausq/core:     file format elf64-hppa
>
> Sections:
> Idx Name          Size      VMA               LMA               File off
>   Algn
>    0 hp.core.version0 00000004  0000000000000000  0000000000000000
> 00000350  2**0
>                    CONTENTS, READONLY
>    1 hp.core.kernel1 0000003c  0000000000000000  0000000000000000
> 00000354  2**0
>                   CONTENTS, READONLY
>    2 hp.core.comm2 00000009  0000000000000000  0000000000000000
> 00000390  2**0
>                    CONTENTS, READONLY
>    [...]
>
> Does this match what you have in mind?

It sort of screws up the formatting doesn't it.  Perhaps something
like the attached is better; we only need the HP_CORE_KERNEL section
don't we?  This gives output like this:

/tmp/core:     file format elf64-hppa

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 proc0         00000004  0000000000000000  0000000000000000  00000350  2**0
                  CONTENTS, READONLY
  1 proc1         0000003c  0000000000000000  0000000000000000  00000354  2**0
                  CONTENTS, READONLY
  2 .kernel       0000003c  0000000000000000  0000000000000000  00000354  2**0
                  CONTENTS, READONLY
  3 proc2         00000009  0000000000000000  0000000000000000  00000390  2**0
                  CONTENTS, READONLY
  4 proc3         00000498  0000000000000000  0000000000000000  000003a0  2**0
                  CONTENTS, READONLY
  5 .reg/0        00000498  0000000000000000  0000000000000000  000003a0  2**2
                  CONTENTS
  6 .reg          00000498  0000000000000000  0000000000000000  000003a0  2**2
                  CONTENTS
  7 proc4         0000c000  8000000100000000  0000000000000000  00000838  2**0
                  CONTENTS, ALLOC, LOAD, CODE


Index: ChangeLog
from  Mark Kettenis  <[hidden email]>

        * elf64-hppa.c (elf64_hppa_section_from_phdr): Create .kernel
        pseudo-section.  Make sure .reg section comes after the proc
        section it's generated from.

Index: elf64-hppa.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-hppa.c,v
retrieving revision 1.66
diff -u -p -r1.66 elf64-hppa.c
--- elf64-hppa.c 18 Nov 2005 00:48:50 -0000 1.66
+++ elf64-hppa.c 18 Nov 2005 14:19:00 -0000
@@ -2652,6 +2652,22 @@ static bfd_boolean
 elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index,
       const char *typename)
 {
+  if (hdr->p_type == PT_HP_CORE_KERNEL)
+    {
+      asection *sect;
+
+      if (!_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename))
+ return FALSE;
+
+      sect = bfd_make_section_anyway (abfd, ".kernel");
+      if (sect == NULL)
+ return FALSE;
+      sect->size = hdr->p_filesz;
+      sect->filepos = hdr->p_offset;
+      sect->flags = SEC_HAS_CONTENTS | SEC_READONLY;
+      return TRUE;
+    }
+
   if (hdr->p_type == PT_HP_CORE_PROC)
     {
       int sig;
@@ -2663,10 +2679,12 @@ elf64_hppa_section_from_phdr (bfd *abfd,
 
       elf_tdata (abfd)->core_signal = sig;
 
-      /* gdb uses the ".reg" section to read register contents.  */
-      if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
-      hdr->p_offset))
+      if (!_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename))
  return FALSE;
+
+      /* GDB uses the ".reg" section to read register contents.  */
+      return _bfd_elfcore_make_pseudosection (abfd, ".reg", hdr->p_filesz,
+      hdr->p_offset);
     }
 
   if (hdr->p_type == PT_HP_CORE_LOADABLE