+++ /dev/null
-From 9cf12d57c58a82cfe3e6fee26d1ea55dfe49f9c4 Mon Sep 17 00:00:00 2001
-From: Pedro Alves <palves@redhat.com>
-Date: Tue, 26 Jul 2016 19:35:40 +0100
-Subject: [PATCH] Fix PR gdb/20287 - x32 and "gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t))"
-MIME-Version: 1.0
-Content-Type: text/plain; charset=utf8
-Content-Transfer-Encoding: 8bit
-
-Building an x32 gdb trips on a static assertion:
-
- In file included from .../src/gdb/common/common-defs.h:71:0,
- from .../src/gdb/nat/amd64-linux-siginfo.c:21:
- .../src/gdb/common/gdb_assert.h:26:66: error: size of array â\80\98never_defined_just_used_for_checkingâ\80\99 is negative
- extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
- ^
- .../src/gdb/nat/amd64-linux-siginfo.c:113:1: note: in expansion of macro â\80\98gdb_static_assertâ\80\99
- gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t));
- ^
-
-The problem is that the way nat_siginfo_t is defined, it can only
-match the host's siginfo_t object when gdb is built as a 64-bit
-program.
-
-Several bits of nat_siginfo_t are off:
-
-- nat_siginfo_t's _pad field's definition is:
-
- int _pad[((128 / sizeof (int)) - 4)];
-
- while /usr/include/bits/siginfo.h has:
-
- # define __SI_MAX_SIZE 128
- # if __WORDSIZE == 64
- # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
- # else
- # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
- # endif
-
- and __WORDSIZE == 32 for x32. This is what causes the size of
- nat_siginfo_t to be wrong and the assertion to fail.
-
-- the nat_clock_t type is incorrect for 64-bit. We have this:
-
- /* For native 64-bit, clock_t in _sigchld is 64bit aligned at 4 bytes. */
- typedef long __attribute__ ((__aligned__ (4))) nat_clock_t;
-
- however, /usr/include/bits/siginfo.h has:
-
- # if defined __x86_64__ && __WORDSIZE == 32
- /* si_utime and si_stime must be 4 byte aligned for x32 to match the
- kernel. We align siginfo_t to 8 bytes so that si_utime and si_stime
- are actually aligned to 8 bytes since their offsets are multiple of
- 8 bytes. */
- typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t;
- # define __SI_ALIGNMENT __attribute__ ((__aligned__ (8)))
- # else
- typedef __clock_t __sigchld_clock_t;
- # define __SI_ALIGNMENT
- # endif
-
- So we're currently forcing 4-byte alignment on clock_t, when it
- should only be so for x32, not 64-bit.
-
-The fix:
-
- - Leaves nat_siginfo_t strictly for the 64-bit ABI.
-
- - Adds a new typedef for the siginfo type that ptrace uses
- (ptrace_siginfo_t). An x32 gdb always gets/sets an x32 siginfo_t
- type with PTRACE_GETSIGINFO/PTRACE_SETSIGINFO.
-
- - Uses this new ptrace_siginfo_t type instead of nat_siginfo_t as the
- intermediate conversion type.
-
-diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
-index 391a646..fea6ee2 100644
---- a/gdb/amd64-linux-nat.c
-+++ b/gdb/amd64-linux-nat.c
-@@ -321,25 +321,25 @@ ps_get_thread_area (const struct ps_prochandle *ph,
- }
- \f
-
--/* Convert a native/host siginfo object, into/from the siginfo in the
-+/* Convert a ptrace/host siginfo object, into/from the siginfo in the
- layout of the inferiors' architecture. Returns true if any
- conversion was done; false otherwise. If DIRECTION is 1, then copy
-- from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
-+ from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to
- INF. */
-
- static int
--amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
-+amd64_linux_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
- {
- struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
-
- /* Is the inferior 32-bit? If so, then do fixup the siginfo
- object. */
- if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
-- return amd64_linux_siginfo_fixup_common (native, inf, direction,
-+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
- FIXUP_32);
- /* No fixup for native x32 GDB. */
- else if (gdbarch_addr_bit (gdbarch) == 32 && sizeof (void *) == 8)
-- return amd64_linux_siginfo_fixup_common (native, inf, direction,
-+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
- FIXUP_X32);
- else
- return 0;
-diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
-index 5080dec..4e6dbce 100644
---- a/gdb/gdbserver/linux-x86-low.c
-+++ b/gdb/gdbserver/linux-x86-low.c
-@@ -624,14 +624,14 @@ x86_debug_reg_state (pid_t pid)
- as debugging it with a 32-bit GDBSERVER, we do the 32-bit <-> 64-bit
- conversion in-place ourselves. */
-
--/* Convert a native/host siginfo object, into/from the siginfo in the
-+/* Convert a ptrace/host siginfo object, into/from the siginfo in the
- layout of the inferiors' architecture. Returns true if any
- conversion was done; false otherwise. If DIRECTION is 1, then copy
-- from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
-+ from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to
- INF. */
-
- static int
--x86_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
-+x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
- {
- #ifdef __x86_64__
- unsigned int machine;
-@@ -640,11 +640,11 @@ x86_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
-
- /* Is the inferior 32-bit? If so, then fixup the siginfo object. */
- if (!is_64bit_tdesc ())
-- return amd64_linux_siginfo_fixup_common (native, inf, direction,
-+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
- FIXUP_32);
- /* No fixup for native x32 GDB. */
- else if (!is_elf64 && sizeof (void *) == 8)
-- return amd64_linux_siginfo_fixup_common (native, inf, direction,
-+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
- FIXUP_X32);
- #endif
-
-diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c
-index 72b3042..9f7df0c 100644
---- a/gdb/nat/amd64-linux-siginfo.c
-+++ b/gdb/nat/amd64-linux-siginfo.c
-@@ -21,23 +21,29 @@
- #include "common-defs.h"
- #include "amd64-linux-siginfo.h"
-
--/* The nat_* types below define the most complete kernel siginfo type
-- known for the architecture, independent of the system/libc headers. */
-+#define GDB_SI_SIZE 128
-+
-+/* The types below define the most complete kernel siginfo types known
-+ for the architecture, independent of the system/libc headers. They
-+ are named from a 64-bit kernel's perspective:
-+
-+ | layout | type |
-+ |--------+----------------------|
-+ | 64-bit | nat_siginfo_t |
-+ | 32-bit | compat_siginfo_t |
-+ | x32 | compat_x32_siginfo_t |
-+*/
-+
-+#ifndef __ILP32__
-
- typedef int nat_int_t;
--typedef void* nat_uptr_t;
-+typedef unsigned long nat_uptr_t;
-
- typedef int nat_time_t;
- typedef int nat_timer_t;
-
--/* For native 64-bit, clock_t in _sigchld is 64bit aligned at 4 bytes. */
--typedef long __attribute__ ((__aligned__ (4))) nat_clock_t;
--
--struct nat_timeval
--{
-- nat_time_t tv_sec;
-- int tv_usec;
--};
-+/* For native 64-bit, clock_t in _sigchld is 64-bit. */
-+typedef long nat_clock_t;
-
- typedef union nat_sigval
- {
-@@ -106,11 +112,9 @@ typedef struct nat_siginfo
- int _fd;
- } _sigpoll;
- } _sifields;
--} nat_siginfo_t __attribute__ ((__aligned__ (8)));
--
--/* Sanity check for the siginfo structure size. */
-+} nat_siginfo_t;
-
--gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t));
-+#endif /* __ILP32__ */
-
- /* These types below (compat_*) define a siginfo type that is layout
- compatible with the siginfo type exported by the 32-bit userspace
-@@ -286,62 +290,71 @@ typedef struct compat_x32_siginfo
- #define si_overrun si_timer2
- #endif
-
-+/* The type of the siginfo object the kernel returns in
-+ PTRACE_GETSIGINFO. If gdb is built as a x32 program, we get a x32
-+ siginfo. */
-+#ifdef __ILP32__
-+typedef compat_x32_siginfo_t ptrace_siginfo_t;
-+#else
-+typedef nat_siginfo_t ptrace_siginfo_t;
-+#endif
-+
- /* Convert the system provided siginfo into compatible siginfo. */
-
- static void
--compat_siginfo_from_siginfo (compat_siginfo_t *to, siginfo_t *from)
-+compat_siginfo_from_siginfo (compat_siginfo_t *to, const siginfo_t *from)
- {
-- nat_siginfo_t from_nat;
-+ ptrace_siginfo_t from_ptrace;
-
-- memcpy (&from_nat, from, sizeof (from_nat));
-+ memcpy (&from_ptrace, from, sizeof (from_ptrace));
- memset (to, 0, sizeof (*to));
-
-- to->si_signo = from_nat.si_signo;
-- to->si_errno = from_nat.si_errno;
-- to->si_code = from_nat.si_code;
-+ to->si_signo = from_ptrace.si_signo;
-+ to->si_errno = from_ptrace.si_errno;
-+ to->si_code = from_ptrace.si_code;
-
- if (to->si_code == SI_TIMER)
- {
-- to->cpt_si_timerid = from_nat.cpt_si_timerid;
-- to->cpt_si_overrun = from_nat.cpt_si_overrun;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_timerid = from_ptrace.cpt_si_timerid;
-+ to->cpt_si_overrun = from_ptrace.cpt_si_overrun;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- }
- else if (to->si_code == SI_USER)
- {
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
- }
- else if (to->si_code < 0)
- {
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- }
- else
- {
- switch (to->si_signo)
- {
- case SIGCHLD:
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_status = from_nat.cpt_si_status;
-- to->cpt_si_utime = from_nat.cpt_si_utime;
-- to->cpt_si_stime = from_nat.cpt_si_stime;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_status = from_ptrace.cpt_si_status;
-+ to->cpt_si_utime = from_ptrace.cpt_si_utime;
-+ to->cpt_si_stime = from_ptrace.cpt_si_stime;
- break;
- case SIGILL:
- case SIGFPE:
- case SIGSEGV:
- case SIGBUS:
-- to->cpt_si_addr = (intptr_t) from_nat.cpt_si_addr;
-+ to->cpt_si_addr = from_ptrace.cpt_si_addr;
- break;
- case SIGPOLL:
-- to->cpt_si_band = from_nat.cpt_si_band;
-- to->cpt_si_fd = from_nat.cpt_si_fd;
-+ to->cpt_si_band = from_ptrace.cpt_si_band;
-+ to->cpt_si_fd = from_ptrace.cpt_si_fd;
- break;
- default:
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- break;
- }
- }
-@@ -350,124 +363,124 @@ compat_siginfo_from_siginfo (compat_siginfo_t *to, siginfo_t *from)
- /* Convert the compatible siginfo into system siginfo. */
-
- static void
--siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
-+siginfo_from_compat_siginfo (siginfo_t *to, const compat_siginfo_t *from)
- {
-- nat_siginfo_t to_nat;
-+ ptrace_siginfo_t to_ptrace;
-
-- memset (&to_nat, 0, sizeof (to_nat));
-+ memset (&to_ptrace, 0, sizeof (to_ptrace));
-
-- to_nat.si_signo = from->si_signo;
-- to_nat.si_errno = from->si_errno;
-- to_nat.si_code = from->si_code;
-+ to_ptrace.si_signo = from->si_signo;
-+ to_ptrace.si_errno = from->si_errno;
-+ to_ptrace.si_code = from->si_code;
-
-- if (to_nat.si_code == SI_TIMER)
-+ if (to_ptrace.si_code == SI_TIMER)
- {
-- to_nat.cpt_si_timerid = from->cpt_si_timerid;
-- to_nat.cpt_si_overrun = from->cpt_si_overrun;
-- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_timerid = from->cpt_si_timerid;
-+ to_ptrace.cpt_si_overrun = from->cpt_si_overrun;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- }
-- else if (to_nat.si_code == SI_USER)
-+ else if (to_ptrace.si_code == SI_USER)
- {
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
- }
-- if (to_nat.si_code < 0)
-+ if (to_ptrace.si_code < 0)
- {
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- }
- else
- {
-- switch (to_nat.si_signo)
-+ switch (to_ptrace.si_signo)
- {
- case SIGCHLD:
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_status = from->cpt_si_status;
-- to_nat.cpt_si_utime = from->cpt_si_utime;
-- to_nat.cpt_si_stime = from->cpt_si_stime;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_status = from->cpt_si_status;
-+ to_ptrace.cpt_si_utime = from->cpt_si_utime;
-+ to_ptrace.cpt_si_stime = from->cpt_si_stime;
- break;
- case SIGILL:
- case SIGFPE:
- case SIGSEGV:
- case SIGBUS:
-- to_nat.cpt_si_addr = (void *) (intptr_t) from->cpt_si_addr;
-- to_nat.cpt_si_addr_lsb = (short) from->cpt_si_addr_lsb;
-+ to_ptrace.cpt_si_addr = from->cpt_si_addr;
-+ to_ptrace.cpt_si_addr_lsb = from->cpt_si_addr_lsb;
- break;
- case SIGPOLL:
-- to_nat.cpt_si_band = from->cpt_si_band;
-- to_nat.cpt_si_fd = from->cpt_si_fd;
-+ to_ptrace.cpt_si_band = from->cpt_si_band;
-+ to_ptrace.cpt_si_fd = from->cpt_si_fd;
- break;
- default:
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- break;
- }
- }
-- memcpy (to, &to_nat, sizeof (to_nat));
-+ memcpy (to, &to_ptrace, sizeof (to_ptrace));
- }
-
- /* Convert the system provided siginfo into compatible x32 siginfo. */
-
- static void
- compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
-- siginfo_t *from)
-+ const siginfo_t *from)
- {
-- nat_siginfo_t from_nat;
-+ ptrace_siginfo_t from_ptrace;
-
-- memcpy (&from_nat, from, sizeof (from_nat));
-+ memcpy (&from_ptrace, from, sizeof (from_ptrace));
- memset (to, 0, sizeof (*to));
-
-- to->si_signo = from_nat.si_signo;
-- to->si_errno = from_nat.si_errno;
-- to->si_code = from_nat.si_code;
-+ to->si_signo = from_ptrace.si_signo;
-+ to->si_errno = from_ptrace.si_errno;
-+ to->si_code = from_ptrace.si_code;
-
- if (to->si_code == SI_TIMER)
- {
-- to->cpt_si_timerid = from_nat.cpt_si_timerid;
-- to->cpt_si_overrun = from_nat.cpt_si_overrun;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_timerid = from_ptrace.cpt_si_timerid;
-+ to->cpt_si_overrun = from_ptrace.cpt_si_overrun;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- }
- else if (to->si_code == SI_USER)
- {
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
- }
- else if (to->si_code < 0)
- {
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- }
- else
- {
- switch (to->si_signo)
- {
- case SIGCHLD:
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_status = from_nat.cpt_si_status;
-- memcpy (&to->cpt_si_utime, &from_nat.cpt_si_utime,
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_status = from_ptrace.cpt_si_status;
-+ memcpy (&to->cpt_si_utime, &from_ptrace.cpt_si_utime,
- sizeof (to->cpt_si_utime));
-- memcpy (&to->cpt_si_stime, &from_nat.cpt_si_stime,
-+ memcpy (&to->cpt_si_stime, &from_ptrace.cpt_si_stime,
- sizeof (to->cpt_si_stime));
- break;
- case SIGILL:
- case SIGFPE:
- case SIGSEGV:
- case SIGBUS:
-- to->cpt_si_addr = (intptr_t) from_nat.cpt_si_addr;
-+ to->cpt_si_addr = from_ptrace.cpt_si_addr;
- break;
- case SIGPOLL:
-- to->cpt_si_band = from_nat.cpt_si_band;
-- to->cpt_si_fd = from_nat.cpt_si_fd;
-+ to->cpt_si_band = from_ptrace.cpt_si_band;
-+ to->cpt_si_fd = from_ptrace.cpt_si_fd;
- break;
- default:
-- to->cpt_si_pid = from_nat.cpt_si_pid;
-- to->cpt_si_uid = from_nat.cpt_si_uid;
-- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
-+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
-+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
-+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
- break;
- }
- }
-@@ -479,98 +492,105 @@ compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
- /* Convert the compatible x32 siginfo into system siginfo. */
- static void
- siginfo_from_compat_x32_siginfo (siginfo_t *to,
-- compat_x32_siginfo_t *from)
-+ const compat_x32_siginfo_t *from)
- {
-- nat_siginfo_t to_nat;
-+ ptrace_siginfo_t to_ptrace;
-
-- memset (&to_nat, 0, sizeof (to_nat));
-- to_nat.si_signo = from->si_signo;
-- to_nat.si_errno = from->si_errno;
-- to_nat.si_code = from->si_code;
-+ memset (&to_ptrace, 0, sizeof (to_ptrace));
-+ to_ptrace.si_signo = from->si_signo;
-+ to_ptrace.si_errno = from->si_errno;
-+ to_ptrace.si_code = from->si_code;
-
-- if (to_nat.si_code == SI_TIMER)
-+ if (to_ptrace.si_code == SI_TIMER)
- {
-- to_nat.cpt_si_timerid = from->cpt_si_timerid;
-- to_nat.cpt_si_overrun = from->cpt_si_overrun;
-- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_timerid = from->cpt_si_timerid;
-+ to_ptrace.cpt_si_overrun = from->cpt_si_overrun;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- }
-- else if (to_nat.si_code == SI_USER)
-+ else if (to_ptrace.si_code == SI_USER)
- {
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
- }
-- if (to_nat.si_code < 0)
-+ if (to_ptrace.si_code < 0)
- {
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- }
- else
- {
-- switch (to_nat.si_signo)
-+ switch (to_ptrace.si_signo)
- {
- case SIGCHLD:
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_status = from->cpt_si_status;
-- memcpy (&to_nat.cpt_si_utime, &from->cpt_si_utime,
-- sizeof (to_nat.cpt_si_utime));
-- memcpy (&to_nat.cpt_si_stime, &from->cpt_si_stime,
-- sizeof (to_nat.cpt_si_stime));
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_status = from->cpt_si_status;
-+ memcpy (&to_ptrace.cpt_si_utime, &from->cpt_si_utime,
-+ sizeof (to_ptrace.cpt_si_utime));
-+ memcpy (&to_ptrace.cpt_si_stime, &from->cpt_si_stime,
-+ sizeof (to_ptrace.cpt_si_stime));
- break;
- case SIGILL:
- case SIGFPE:
- case SIGSEGV:
- case SIGBUS:
-- to_nat.cpt_si_addr = (void *) (intptr_t) from->cpt_si_addr;
-+ to_ptrace.cpt_si_addr = from->cpt_si_addr;
- break;
- case SIGPOLL:
-- to_nat.cpt_si_band = from->cpt_si_band;
-- to_nat.cpt_si_fd = from->cpt_si_fd;
-+ to_ptrace.cpt_si_band = from->cpt_si_band;
-+ to_ptrace.cpt_si_fd = from->cpt_si_fd;
- break;
- default:
-- to_nat.cpt_si_pid = from->cpt_si_pid;
-- to_nat.cpt_si_uid = from->cpt_si_uid;
-- to_nat.cpt_si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
-+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
-+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
-+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
- break;
- }
- }
-- memcpy (to, &to_nat, sizeof (to_nat));
-+ memcpy (to, &to_ptrace, sizeof (to_ptrace));
- }
-
--/* Convert a native/host siginfo object, into/from the siginfo in the
-+/* Convert a ptrace siginfo object, into/from the siginfo in the
- layout of the inferiors' architecture. Returns true if any
- conversion was done; false otherwise. If DIRECTION is 1, then copy
-- from INF to NATIVE. If DIRECTION is 0, then copy from NATIVE to INF. */
-+ from INF to PTRACE. If DIRECTION is 0, then copy from NATIVE to
-+ INF. */
-
- int
--amd64_linux_siginfo_fixup_common (siginfo_t *native, gdb_byte *inf,
-+amd64_linux_siginfo_fixup_common (siginfo_t *ptrace, gdb_byte *inf,
- int direction,
- enum amd64_siginfo_fixup_mode mode)
- {
- if (mode == FIXUP_32)
- {
-- gdb_assert (sizeof (siginfo_t) == sizeof (compat_siginfo_t));
--
- if (direction == 0)
-- compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, native);
-+ compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, ptrace);
- else
-- siginfo_from_compat_siginfo (native, (struct compat_siginfo *) inf);
-+ siginfo_from_compat_siginfo (ptrace, (struct compat_siginfo *) inf);
-
- return 1;
- }
- else if (mode == FIXUP_X32)
- {
-- gdb_assert (sizeof (siginfo_t) == sizeof (compat_x32_siginfo_t));
--
- if (direction == 0)
- compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf,
-- native);
-+ ptrace);
- else
-- siginfo_from_compat_x32_siginfo (native,
-+ siginfo_from_compat_x32_siginfo (ptrace,
- (struct compat_x32_siginfo *) inf);
-
- return 1;
- }
- return 0;
- }
-+
-+/* Sanity check for the siginfo structure sizes. */
-+
-+gdb_static_assert (sizeof (siginfo_t) == GDB_SI_SIZE);
-+#ifndef __ILP32__
-+gdb_static_assert (sizeof (nat_siginfo_t) == GDB_SI_SIZE);
-+#endif
-+gdb_static_assert (sizeof (compat_x32_siginfo_t) == GDB_SI_SIZE);
-+gdb_static_assert (sizeof (compat_siginfo_t) == GDB_SI_SIZE);
-+gdb_static_assert (sizeof (ptrace_siginfo_t) == GDB_SI_SIZE);
---
-1.7.1
-