aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>2002-02-13 21:53:31 +0000
committerMichael Snyder <msnyder@vmware.com>2002-02-13 21:53:31 +0000
commit51316059ccf20325064353ec76fe94d2403393c1 (patch)
treee73e87ee1407863727dfc5e34e847856c84979f5 /bfd/elf.c
parent1e4d76e7d540ea26b91a1244114e6c22f8051381 (diff)
downloadgdb-51316059ccf20325064353ec76fe94d2403393c1.zip
gdb-51316059ccf20325064353ec76fe94d2403393c1.tar.gz
gdb-51316059ccf20325064353ec76fe94d2403393c1.tar.bz2
2002-02-11 Michael Snyder <msnyder@redhat.com>
* elf-bfd.h (elfcore_write_lwpstatus): Add prototype. * elf.c (elfcore_grok_pstatus): Add prototype. (elfcore_grok_lwpstatus): Add prototype. (elfcore_write_lwpstatus): New function. (elfcore_write_pstatus): Fix typo, eliminate unnecessary memcpy.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c46
1 files changed, 41 insertions, 5 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index 519e71d..f75eb85 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6153,6 +6153,8 @@ elfcore_grok_psinfo (abfd, note)
#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
#if defined (HAVE_PSTATUS_T)
+static boolean elfcore_grok_pstatus PARAMS ((bfd *, Elf_Internal_Note *));
+
static boolean
elfcore_grok_pstatus (abfd, note)
bfd *abfd;
@@ -6190,6 +6192,8 @@ elfcore_grok_pstatus (abfd, note)
#endif /* defined (HAVE_PSTATUS_T) */
#if defined (HAVE_LWPSTATUS_T)
+static boolean elfcore_grok_lwpstatus PARAMS ((bfd *, Elf_Internal_Note *));
+
static boolean
elfcore_grok_lwpstatus (abfd, note)
bfd *abfd;
@@ -6603,6 +6607,38 @@ elfcore_write_prstatus (abfd, buf, bufsiz, pid, cursig, gregs)
}
#endif /* HAVE_PRSTATUS_T */
+#if defined (HAVE_LWPSTATUS_T)
+char *
+elfcore_write_lwpstatus (abfd, buf, bufsiz, pid, cursig, gregs)
+ bfd *abfd;
+ char *buf;
+ int *bufsiz;
+ long pid;
+ int cursig;
+ void *gregs;
+{
+ lwpstatus_t lwpstat;
+ char *note_name = "CORE";
+
+ memset (&lwpstat, 0, sizeof (lwpstat));
+ lwpstat.pr_lwpid = pid >> 16;
+ lwpstat.pr_cursig = cursig;
+#if defined (HAVE_LWPSTATUS_T_PR_REG)
+ memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
+#elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
+#if !defined(gregs)
+ memcpy (lwpstat.pr_context.uc_mcontext.gregs,
+ gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
+#else
+ memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
+ gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
+#endif
+#endif
+ return elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
+}
+#endif /* HAVE_LWPSTATUS_T */
+
#if defined (HAVE_PSTATUS_T)
char *
elfcore_write_pstatus (abfd, buf, bufsiz, pid, cursig, gregs)
@@ -6616,11 +6652,11 @@ elfcore_write_pstatus (abfd, buf, bufsiz, pid, cursig, gregs)
pstatus_t pstat;
char *note_name = "CORE";
- memset (&pstat, 0, sizeof (prstat));
- pstat.pr_pid = pid;
- memcpy (pstat.pr_reg, gregs, sizeof (pstat.pr_reg));
- return elfcore_write_note (abfd, buf, bufsiz,
- note_name, NT_PSTATUS, &pstat, sizeof (pstat));
+ memset (&pstat, 0, sizeof (pstat));
+ pstat.pr_pid = pid & 0xffff;
+ buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
+ NT_PSTATUS, &pstat, sizeof (pstat));
+ return buf;
}
#endif /* HAVE_PSTATUS_T */