From: Sergio Durigan Junior <sergiodj@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: binutils@sourceware.org, jan.kratochvil@redhat.com,
hongjiu.lu@intel.com, gdb-patches@sourceware.org
Subject: Re: [PATCH 1/2] New entry points for writing Linux NT_PRPSINFO notes.
Date: Mon, 04 Feb 2013 18:31:00 -0000 [thread overview]
Message-ID: <m36228q6e0.fsf@redhat.com> (raw)
In-Reply-To: <20130201063725.GC30945@bubble.grove.modra.org> (Alan Modra's message of "Fri, 1 Feb 2013 17:07:25 +1030")
On Friday, February 01 2013, Alan Modra wrote:
> On Thu, Jan 31, 2013 at 11:04:38PM +0000, Pedro Alves wrote:
>> * Makefile.in (SOURCE_HFILES): Add `elf-linux-psinfo.h'.
>> * elf-bfd.h (elf_internal_linux_prpsinfo): New structure
>> declaration.
>> (elfcore_write_linux_prpsinfo32, elfcore_write_linux_prpsinfo64)
>> (elfcore_write_ppc32_linux_prpsinfo32): New declarations.
>> * elf-linux-psinfo.h: New file.
>> * elf.c: Include elf-linux-psinfo.h.
>> (elfcore_write_linux_prpsinfo32, elfcore_write_linux_prpsinfo64):
>> New functions.
>> * elf32-ppc.c: Include `elf-linux-psinfo.h'.
>> (elf_external_ppc_linux_prpsinfo32): New structure declaration.
>> (PPC_LINUX_PRPSINFO32_SWAP_FIELDS): New macro.
>> (elfcore_write_ppc_linux_prpsinfo32): New function.
>
> Looks good to me.
Committed.
http://sourceware.org/ml/binutils-cvs/2013-02/msg00015.html
--
Sergio
Index: bfd/ChangeLog
===================================================================
RCS file: /cvs/src/src/bfd/ChangeLog,v
retrieving revision 1.5928
diff -u -r1.5928 ChangeLog
--- bfd/ChangeLog 4 Feb 2013 14:48:20 -0000 1.5928
+++ bfd/ChangeLog 4 Feb 2013 18:25:02 -0000
@@ -1,3 +1,20 @@
+2013-02-04 Sergio Durigan Junior <sergiodj@redhat.com>
+ Pedro Alves <palves@redhat.com>
+
+ * Makefile.in (SOURCE_HFILES): Add `elf-linux-psinfo.h'.
+ * elf-bfd.h (elf_internal_linux_prpsinfo): New structure
+ declaration.
+ (elfcore_write_linux_prpsinfo32, elfcore_write_linux_prpsinfo64)
+ (elfcore_write_ppc32_linux_prpsinfo32): New declarations.
+ * elf-linux-psinfo.h: New file.
+ * elf.c: Include elf-linux-psinfo.h.
+ (elfcore_write_linux_prpsinfo32, elfcore_write_linux_prpsinfo64):
+ New functions.
+ * elf32-ppc.c: Include `elf-linux-psinfo.h'.
+ (elf_external_ppc_linux_prpsinfo32): New structure declaration.
+ (PPC_LINUX_PRPSINFO32_SWAP_FIELDS): New macro.
+ (elfcore_write_ppc_linux_prpsinfo32): New function.
+
2013-02-04 Tristan Gingold <gingold@adacore.com>
* mach-o.c (bfd_mach_o_scan_start_address): Do not fail if no
Index: bfd/Makefile.in
===================================================================
RCS file: /cvs/src/src/bfd/Makefile.in,v
retrieving revision 1.300
diff -u -r1.300 Makefile.in
--- bfd/Makefile.in 4 Feb 2013 06:02:09 -0000 1.300
+++ bfd/Makefile.in 4 Feb 2013 18:25:02 -0000
@@ -1070,7 +1070,7 @@
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
SOURCE_HFILES = \
aout-target.h aoutf1.h aoutx.h coffcode.h coffswap.h ecoffswap.h \
- elf-bfd.h elf-hppa.h elf32-hppa.h \
+ elf-bfd.h elf-linux-psinfo.h elf-hppa.h elf32-hppa.h \
elf64-hppa.h elfcode.h elfcore.h \
freebsd.h genlink.h go32stub.h \
libaout.h libbfd.h libcoff.h libecoff.h libhppa.h libieee.h \
Index: bfd/elf-bfd.h
===================================================================
RCS file: /cvs/src/src/bfd/elf-bfd.h,v
retrieving revision 1.355
diff -u -r1.355 elf-bfd.h
--- bfd/elf-bfd.h 13 Jan 2013 12:32:10 -0000 1.355
+++ bfd/elf-bfd.h 4 Feb 2013 18:25:03 -0000
@@ -2285,6 +2285,42 @@
extern char *elfcore_write_register_note
(bfd *, char *, int *, const char *, const void *, int);
+/* Internal structure which holds information to be included in the
+ PRPSINFO section of Linux core files.
+
+ This is an "internal" structure in the sense that it should be used
+ to pass information to BFD (via the `elfcore_write_linux_prpsinfo'
+ function), so things like endianess shouldn't be an issue. This
+ structure will eventually be converted in one of the
+ `elf_external_linux_*' structures and written out to an output bfd
+ by one of the functions declared below. */
+
+struct elf_internal_linux_prpsinfo
+ {
+ char pr_state; /* Numeric process state. */
+ char pr_sname; /* Char for pr_state. */
+ char pr_zomb; /* Zombie. */
+ char pr_nice; /* Nice val. */
+ unsigned long pr_flag; /* Flags. */
+ unsigned int pr_uid;
+ unsigned int pr_gid;
+ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+ char pr_fname[16 + 1]; /* Filename of executable. */
+ char pr_psargs[80 + 1]; /* Initial part of arg list. */
+ };
+
+/* Linux/most 32-bit archs. */
+extern char *elfcore_write_linux_prpsinfo32
+ (bfd *, char *, int *, const struct elf_internal_linux_prpsinfo *);
+
+/* Linux/most 64-bit archs. */
+extern char *elfcore_write_linux_prpsinfo64
+ (bfd *, char *, int *, const struct elf_internal_linux_prpsinfo *);
+
+/* Linux/PPC32 uses different layout compared to most archs. */
+extern char *elfcore_write_ppc_linux_prpsinfo32
+ (bfd *, char *, int *, const struct elf_internal_linux_prpsinfo *);
+
extern bfd *_bfd_elf32_bfd_from_remote_memory
(bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
Index: bfd/elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.581
diff -u -r1.581 elf.c
--- bfd/elf.c 8 Jan 2013 18:09:10 -0000 1.581
+++ bfd/elf.c 4 Feb 2013 18:25:04 -0000
@@ -45,6 +45,7 @@
#include "elf-bfd.h"
#include "libiberty.h"
#include "safe-ctype.h"
+#include "elf-linux-psinfo.h"
#ifdef CORE_HEADER
#include CORE_HEADER
@@ -9159,6 +9160,34 @@
}
char *
+elfcore_write_linux_prpsinfo32
+ (bfd *abfd, char *buf, int *bufsiz,
+ const struct elf_internal_linux_prpsinfo *prpsinfo)
+{
+ struct elf_external_linux_prpsinfo32 data;
+
+ memset (&data, 0, sizeof (data));
+ LINUX_PRPSINFO32_SWAP_FIELDS (abfd, prpsinfo, data);
+
+ return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
+ &data, sizeof (data));
+}
+
+char *
+elfcore_write_linux_prpsinfo64
+ (bfd *abfd, char *buf, int *bufsiz,
+ const struct elf_internal_linux_prpsinfo *prpsinfo)
+{
+ struct elf_external_linux_prpsinfo64 data;
+
+ memset (&data, 0, sizeof (data));
+ LINUX_PRPSINFO64_SWAP_FIELDS (abfd, prpsinfo, data);
+
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", NT_PRPSINFO, &data, sizeof (data));
+}
+
+char *
elfcore_write_prstatus (bfd *abfd,
char *buf,
int *bufsiz,
Index: bfd/elf32-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
retrieving revision 1.323
diff -u -r1.323 elf32-ppc.c
--- bfd/elf32-ppc.c 10 Jan 2013 20:03:53 -0000 1.323
+++ bfd/elf32-ppc.c 4 Feb 2013 18:25:05 -0000
@@ -37,6 +37,7 @@
#include "elf32-ppc.h"
#include "elf-vxworks.h"
#include "dwarf2.h"
+#include "elf-linux-psinfo.h"
typedef enum split16_format_type
{
@@ -1777,6 +1778,58 @@
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
};
+
+/* External 32-bit PPC structure for PRPSINFO. This structure is
+ ABI-defined, thus we choose to use char arrays here in order to
+ avoid dealing with different types in different architectures.
+
+ The PPC 32-bit structure uses int for `pr_uid' and `pr_gid' while
+ most non-PPC architectures use `short int'.
+
+ This structure will ultimately be written in the corefile's note
+ section, as the PRPSINFO. */
+
+struct elf_external_ppc_linux_prpsinfo32
+ {
+ char pr_state; /* Numeric process state. */
+ char pr_sname; /* Char for pr_state. */
+ char pr_zomb; /* Zombie. */
+ char pr_nice; /* Nice val. */
+ char pr_flag[4]; /* Flags. */
+ char pr_uid[4];
+ char pr_gid[4];
+ char pr_pid[4];
+ char pr_ppid[4];
+ char pr_pgrp[4];
+ char pr_sid[4];
+ char pr_fname[16]; /* Filename of executable. */
+ char pr_psargs[80]; /* Initial part of arg list. */
+ };
+
+/* Helper macro to swap (properly handling endianess) things from the
+ `elf_internal_prpsinfo' structure to the `elf_external_ppc_prpsinfo32'
+ structure.
+
+ Note that FROM should be a pointer, and TO should be the explicit type. */
+
+#define PPC_LINUX_PRPSINFO32_SWAP_FIELDS(abfd, from, to) \
+ do \
+ { \
+ H_PUT_8 (abfd, from->pr_state, &to.pr_state); \
+ H_PUT_8 (abfd, from->pr_sname, &to.pr_sname); \
+ H_PUT_8 (abfd, from->pr_zomb, &to.pr_zomb); \
+ H_PUT_8 (abfd, from->pr_nice, &to.pr_nice); \
+ H_PUT_32 (abfd, from->pr_flag, to.pr_flag); \
+ H_PUT_32 (abfd, from->pr_uid, to.pr_uid); \
+ H_PUT_32 (abfd, from->pr_gid, to.pr_gid); \
+ H_PUT_32 (abfd, from->pr_pid, to.pr_pid); \
+ H_PUT_32 (abfd, from->pr_ppid, to.pr_ppid); \
+ H_PUT_32 (abfd, from->pr_pgrp, to.pr_pgrp); \
+ H_PUT_32 (abfd, from->pr_sid, to.pr_sid); \
+ strncpy (to.pr_fname, from->pr_fname, sizeof (to.pr_fname)); \
+ strncpy (to.pr_psargs, from->pr_psargs, sizeof (to.pr_psargs)); \
+ } while (0)
+
\f
/* Initialize the ppc_elf_howto_table, so that linear accesses can be done. */
@@ -2212,6 +2265,19 @@
return TRUE;
}
+char *
+elfcore_write_ppc_linux_prpsinfo32 (bfd *abfd, char *buf, int *bufsiz,
+ const struct elf_internal_linux_prpsinfo *prpsinfo)
+{
+ struct elf_external_ppc_linux_prpsinfo32 data;
+
+ memset (&data, 0, sizeof (data));
+ PPC_LINUX_PRPSINFO32_SWAP_FIELDS (abfd, prpsinfo, data);
+
+ return elfcore_write_note (abfd, buf, bufsiz,
+ "CORE", NT_PRPSINFO, &data, sizeof (data));
+}
+
static char *
ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
{
next prev parent reply other threads:[~2013-02-04 18:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-30 6:53 [PATCH 1/3] Implement new Linux target vectors on BFD Sergio Durigan Junior
2013-01-30 9:16 ` Alan Modra
2013-01-30 16:43 ` Sergio Durigan Junior
2013-01-31 17:19 ` Pedro Alves
2013-01-31 23:04 ` [PATCH 1/2] New entry points for writing Linux NT_PRPSINFO notes Pedro Alves
2013-02-01 6:37 ` Alan Modra
2013-02-03 2:51 ` Sergio Durigan Junior
2013-02-04 18:31 ` Sergio Durigan Junior [this message]
2013-01-31 23:05 ` [PATCH 2/2] Put more info in NT_PRPSINFO Linux notes Pedro Alves
2013-02-03 21:05 ` Sergio Durigan Junior
2013-02-04 16:36 ` Pedro Alves
2013-02-04 18:41 ` Sergio Durigan Junior
2013-01-30 16:44 ` [PATCH 1/3] Implement new Linux target vectors on BFD H.J. Lu
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=m36228q6e0.fsf@redhat.com \
--to=sergiodj@redhat.com \
--cc=binutils@sourceware.org \
--cc=gdb-patches@sourceware.org \
--cc=hongjiu.lu@intel.com \
--cc=jan.kratochvil@redhat.com \
--cc=palves@redhat.com \
/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