diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2017-10-11 15:01:41 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2017-10-11 15:01:41 +0100 |
commit | 3c9a7b0d6d84425ea24d222a1a31e206e587374f (patch) | |
tree | 78ec2893e3f1867fe1a45ceac22d45315b81f0f2 /bfd/elf64-sh64.c | |
parent | a2f63b2e7a5da01ff828b45c7e0e57265ee24131 (diff) | |
download | gdb-3c9a7b0d6d84425ea24d222a1a31e206e587374f.zip gdb-3c9a7b0d6d84425ea24d222a1a31e206e587374f.tar.gz gdb-3c9a7b0d6d84425ea24d222a1a31e206e587374f.tar.bz2 |
ELF/BFD: Handle both variants of the 64-bit Linux core PRPSINFO note
Fix commit 70a38d42c5b3 ("New entry points for writing Linux NT_PRPSINFO
notes."), <https://sourceware.org/ml/binutils/2013-02/msg00023.html>,
and handle both variants of the 64-bit Linux core PRPSINFO note across
all targets.
The 64-bit Linux core PRPSINFO note matches the 64-bit kernel structure,
defined as follows:
(gdb) ptype struct elf_prpsinfo
type = struct elf_prpsinfo {
char pr_state;
char pr_sname;
char pr_zomb;
char pr_nice;
unsigned long pr_flag;
__kernel_uid_t pr_uid;
__kernel_gid_t pr_gid;
pid_t pr_pid;
pid_t pr_ppid;
pid_t pr_pgrp;
pid_t pr_sid;
char pr_fname[16];
char pr_psargs[80];
}
(gdb)
where the individual data types of most members are the same across all
64-bit Linux ports, with the exception of `__kernel_uid_t' and
`__kernel_gid_t'. These are defined in <asm-generic/posix_types.h> as
32-bit `unsigned int' by default, however overridden as 16-bit `unsigned
short' in port-specific <asm/posix_types.h> for the SuperH target.
The default is already handled, as from the commit referred. Add the
other variant then and provide a backend flag to switch between the two
cases possible, with the 32-bit one being the default and the 16-bit one
explicitly selected. Set the flag in the SuperH target backend. This
arrangement is analogous to how the 32-bit Linux core PRPSINFO note is
handled.
bfd/
* elf-bfd.h (elf_backend_data): Add `linux_prpsinfo64_ugid16'
member.
* elf-linux-core.h (elf_external_linux_prpsinfo64): Rename to...
(elf_external_linux_prpsinfo64_ugid32): ... this.
(swap_linux_prpsinfo32_out): Rename to...
(swap_linux_prpsinfo32_ugid32_out): ... this.
(elf_external_linux_prpsinfo64_ugid16): New structure.
(swap_linux_prpsinfo64_ugid16_out): New function.
* elfxx-target.h [!elf_backend_linux_prpsinfo64_ugid16]
(elf_backend_linux_prpsinfo64_ugid16): Define.
(elfNN_bed): Initialize `linux_prpsinfo64_ugid16' member.
* elf.c (elfcore_write_linux_prpsinfo64): Handle both variants
of the 64-bit Linux core PRPSINFO note.
* elf64-sh64.c (elf_backend_linux_prpsinfo64_ugid16): Define.
Diffstat (limited to 'bfd/elf64-sh64.c')
-rw-r--r-- | bfd/elf64-sh64.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c index 1cffb2e..8994e21 100644 --- a/bfd/elf64-sh64.c +++ b/bfd/elf64-sh64.c @@ -3944,6 +3944,8 @@ static const struct bfd_elf_special_section sh64_elf64_special_sections[]= #define elf_backend_got_header_size 24 #define elf_backend_dtrel_excludes_plt 1 +#define elf_backend_linux_prpsinfo64_ugid16 TRUE + #include "elf64-target.h" /* NetBSD support. */ |