This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
[RFA] Fix corefile-write support for Unixware
- From: Michael Snyder <msnyder at cygnus dot com>
- To: binutils at sources dot redhat dot com
- Cc: nickc at redhat dot com
- Date: Mon, 11 Feb 2002 16:47:26 -0800
- Subject: [RFA] Fix corefile-write support for Unixware
This patch makes writing of corefiles work on Unixware,
plus silences a few compiler warnings by adding prototype declarations.
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.
Index: elf-bfd.h
===================================================================
RCS file: /cvs/src/src/bfd/elf-bfd.h,v
retrieving revision 1.66
diff -c -3 -p -r1.66 elf-bfd.h
*** elf-bfd.h 2002/01/21 10:29:07 1.66
--- elf-bfd.h 2002/02/12 00:50:10
*************** extern char *elfcore_write_prfpreg
*** 1531,1536 ****
--- 1531,1538 ----
PARAMS ((bfd *, char *, int *, void *, int));
extern char *elfcore_write_prxfpreg
PARAMS ((bfd *, char *, int *, void *, int));
+ extern char *elfcore_write_lwpstatus
+ PARAMS ((bfd*, char*, int*, long, int, void*));
/* MIPS ELF specific routines. */
Index: elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.127
diff -c -3 -p -r1.127 elf.c
*** elf.c 2002/01/30 10:31:28 1.127
--- elf.c 2002/02/12 00:50:10
*************** elfcore_grok_psinfo (abfd, note)
*** 6148,6153 ****
--- 6148,6155 ----
#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;
*************** elfcore_grok_pstatus (abfd, note)
*** 6185,6190 ****
--- 6187,6194 ----
#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;
*************** elfcore_write_prstatus (abfd, buf, bufsi
*** 6598,6603 ****
--- 6602,6639 ----
}
#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)
*************** elfcore_write_pstatus (abfd, buf, bufsiz
*** 6611,6621 ****
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));
}
#endif /* HAVE_PSTATUS_T */
--- 6647,6657 ----
pstatus_t pstat;
char *note_name = "CORE";
! 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 */