Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 1/2] Put a NT_PSTATUS note on solaris cores.
Date: Tue, 11 Dec 2012 12:22:00 -0000	[thread overview]
Message-ID: <50C72573.5060305@redhat.com> (raw)
In-Reply-To: <20121211030352.GB13565@adacore.com>

[-- Attachment #1: Type: text/plain, Size: 1464 bytes --]

On 12/11/2012 03:03 AM, Joel Brobecker wrote:

> Tested on sparc-solaris, but it seems to have no effect yet:
> 
>     (gdb) core core.10498
>     [New LWP 1]
>     Core was generated by `/[...]/simple_main'.
>     Program terminated with signal 5, Trace/breakpoint trap.
>     #0  simple_main () at simple_main.adb:4
>     4           simple.test_simple;
>     (gdb) info inferiors
>       Num  Description       Executable
>     * 1    LWP 0             /[...]/simple_main
> 
> And after the patch:
> 
>     (gdb) core core.15731
>     [New LWP 1]
>     Core was generated by `/[...]/simple_main'.
>     Program terminated with signal 5, Trace/breakpoint trap.
>     #0  simple_main () at simple_main.adb:4
>     4           simple.test_simple;
>     (gdb) info inferiors
>       Num  Description       Executable
>     * 1    LWP 0             /[...]/simple_main
> 
> I can see that the second core file is bigger, but I am lacking
> the time to investigate this further at the moment. Maybe I am
> doing the wrong test?

You're doing the right test.  The issue is that core_pid_to_str
calls into the gdbarch_core_pid_to_str, and that isn't expecting
to be passed a "process pid" instead of an "LWP pid".

Could you try this one when you have a chance?  This is rebased on
top of current mainline, so it restores the elfcore_write_pstatus
call that the Unixware-excise patch removed.  I made sure it builds with
--enable-targets=all.

Thanks!

-- 
Pedro Alves


[-- Attachment #2: nt_pstatus.diff --]
[-- Type: text/x-patch, Size: 3232 bytes --]

commit 76583bee66b1faa3bfcf6de6f95e38dacc93d45a
Author: Pedro Alves <palves@redhat.com>
Date:   Mon Dec 10 17:52:55 2012 +0000

    Put a NT_PSTATUS note on solaris cores.
    
    This is based on the patch I once posted at:
    
    http://sourceware.org/ml/gdb-patches/2009-10/msg00188.html
    
    Rationale:
    
    This patch makes is so that cores generated with gdb's gcore on
    solaris also get an NT_PSTATUS note.  It is from this note that gdb
    can extract the original pid of the process from the core.  From
    higher up on procfs.c, we see that pstatus_t is assumed to be defined
    when NEW_PROC_API is defined, so this should be safe to not break
    builds on supported hosts.  Older Solaris not using the the new proc
    api are unaffected.
    
    I had applied the patch back in 2009, and then shortly afterwards
    backed it out, because it broke Solaris builds.  A patch to bfd this
    depended on was missing:
    
      http://sourceware.org/ml/gdb-patches/2009-10/msg00214.html
    
    The bfd patch went in 2010-01-04, but I never got back to pushing the
    GDB bit in.
    
    The user visible change is just that GDB will know the real PID the
    process that dumped core had (visible in "info inferiors").
    
    2012-12-11  Pedro Alves  <pedro@codesourcery.com>
    	    Pedro Alves  <palves@redhat.com>
    
    	gdb/
    	* procfs.c (procfs_make_note_section) [NEW_PROC_API]: Output a
    	NT_PSTATUS note.
    	* sol2-tdep.c (sol2_core_pid_to_str): Print process IDs
    	differently from LWP IDs.
    
    v2:
    
     - restore elfcore_write_pstatus call.
     - make sol2_core_pid_to_str aware or process ids vs lwp ids.

diff --git a/gdb/procfs.c b/gdb/procfs.c
index fa18b46..1c5cc13 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -5507,6 +5507,13 @@ procfs_make_note_section (bfd *obfd, int *note_size)
 
   stop_signal = find_stop_signal ();
 
+#ifdef NEW_PROC_API
+  fill_gregset (get_current_regcache (), &gregs, -1);
+  note_data = elfcore_write_pstatus (obfd, note_data, note_size,
+				     PIDGET (inferior_ptid),
+				     stop_signal, &gregs);
+#endif
+
   thread_args.obfd = obfd;
   thread_args.note_data = note_data;
   thread_args.note_size = note_size;
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
index e93758d..e292b8d 100644
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -43,7 +43,29 @@ char *
 sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
 {
   static char buf[80];
+  struct inferior *inf;
+  int pid;
 
-  xsnprintf (buf, sizeof buf, "LWP %ld", ptid_get_lwp (ptid));
-  return buf;
+  /* Check whether we're printing an LWP (gdb thread) or a
+     process.  */
+  pid = ptid_get_lwp (ptid);
+  if (pid != 0)
+    {
+      /* A thread.  */
+      xsnprintf (buf, sizeof buf, "LWP %ld", ptid_get_lwp (ptid));
+      return buf;
+    }
+
+  /* GDB didn't use to put a NT_PSTATUS note in Solaris cores.  If
+     that's missing, then we're dealing with a fake PID corelow.c made
+     up.  */
+  inf = find_inferior_pid (ptid_get_pid (ptid));
+  if (inf == NULL || inf->fake_pid_p)
+    {
+      xsnprintf (buf, sizeof buf, "<core>");
+      return buf;
+    }
+
+  /* Not fake; print as usual.  */
+  return normal_pid_to_str (ptid);
 }

  reply	other threads:[~2012-12-11 12:22 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-06 17:37 [PATCH] solib-svr4.c: Remove old SCO-related code Pedro Alves
2012-12-10 16:44 ` Pedro Alves
2012-12-10 18:02   ` [PATCH 1/2] Put a NT_PSTATUS note on solaris cores Pedro Alves
2012-12-11  3:04     ` Joel Brobecker
2012-12-11 12:22       ` Pedro Alves [this message]
2012-12-11 15:12         ` Joel Brobecker
2012-12-11 15:16           ` Mark Kettenis
2012-12-11 16:45             ` Pedro Alves
2012-12-10 18:04   ` [PATCH 2/2] Remove all traces of Unixware Pedro Alves
2012-12-10 19:24     ` Tom Tromey
2012-12-11  2:57     ` Joel Brobecker
2012-12-11 11:37       ` Pedro Alves
2012-12-11 12:46         ` Eli Zaretskii
2012-12-11  4:20     ` Yao Qi
2012-12-11 10:59       ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50C72573.5060305@redhat.com \
    --to=palves@redhat.com \
    --cc=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox