This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb] Use gdbarch_long_bit to determine layout of FreeBSD siginfo_t.
- From: John Baldwin <jhb at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 9 Oct 2017 16:56:40 -0000
- Subject: [binutils-gdb] Use gdbarch_long_bit to determine layout of FreeBSD siginfo_t.
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a181c0bf7461c28cdb72a4074c6d7608119fb575
commit a181c0bf7461c28cdb72a4074c6d7608119fb575
Author: John Baldwin <jhb@FreeBSD.org>
Date: Mon Oct 9 09:54:42 2017 -0700
Use gdbarch_long_bit to determine layout of FreeBSD siginfo_t.
FreeBSD architectures are either ILP32 or LP64 resulting in two
different layouts for siginfo_t. Previously, the 'bits_per_word'
member of bfd_arch_info was used to determine the layout to use for a
given FreeBSD architecture. However, mipsn32 architectures inherit
from a 64-bit mips architecture where bits_per_word is 64. As a
result, $_siginfo was not properly extracted from FreeBSD/mipsn32 core
dumps. Fix this by using gdbarch_long_bit instead of 'bits_per_word'
to determine if a FreeBSD architecture is ILP32 or LP64.
gdb/ChangeLog:
* fbsd-nat.c (fbsd_siginfo_size): Use gdbarch_long_bit.
(fbsd_convert_siginfo): Likewise.
* fbsd-tdep.c (fbsd_core_xfer_siginfo): Likewise.
Diff:
---
gdb/ChangeLog | 6 ++++++
gdb/fbsd-nat.c | 4 ++--
gdb/fbsd-tdep.c | 4 ++--
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7c8c6e4..b04da8b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2017-10-09 John Baldwin <jhb@FreeBSD.org>
+
+ * fbsd-nat.c (fbsd_siginfo_size): Use gdbarch_long_bit.
+ (fbsd_convert_siginfo): Likewise.
+ * fbsd-tdep.c (fbsd_core_xfer_siginfo): Likewise.
+
2017-10-09 Simon Marchi <simon.marchi@polymtl.ca>
* configure.ac (try_guile_versions): Remove guile-2.2.
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index 5ad0dda..265175a 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -279,7 +279,7 @@ fbsd_siginfo_size ()
struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
/* Is the inferior 32-bit? If so, use the 32-bit siginfo size. */
- if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
+ if (gdbarch_long_bit (gdbarch) == 32)
return sizeof (struct siginfo32);
#endif
return sizeof (siginfo_t);
@@ -296,7 +296,7 @@ fbsd_convert_siginfo (siginfo_t *si)
struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
/* Is the inferior 32-bit? If not, nothing to do. */
- if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word != 32)
+ if (gdbarch_long_bit (gdbarch) != 32)
return;
struct siginfo32 si32;
diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c
index fa4cd91..fa70f7c 100644
--- a/gdb/fbsd-tdep.c
+++ b/gdb/fbsd-tdep.c
@@ -143,7 +143,7 @@ fbsd_core_xfer_siginfo (struct gdbarch *gdbarch, gdb_byte *readbuf,
{
size_t siginfo_size;
- if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
+ if (gdbarch_long_bit (gdbarch) == 32)
siginfo_size = SIZE32_SIGINFO_T;
else
siginfo_size = SIZE64_SIGINFO_T;
@@ -168,7 +168,7 @@ fbsd_core_xfer_siginfo (struct gdbarch *gdbarch, gdb_byte *readbuf,
len = siginfo_size - offset;
ULONGEST siginfo_offset;
- if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
+ if (gdbarch_long_bit (gdbarch) == 32)
siginfo_offset = LWPINFO_OFFSET + LWPINFO32_PL_SIGINFO;
else
siginfo_offset = LWPINFO_OFFSET + LWPINFO64_PL_SIGINFO;