]> git.pld-linux.org Git - packages/gdb.git/blame - gdb-bug-20287.patch
- rebuild with readline 7.0
[packages/gdb.git] / gdb-bug-20287.patch
CommitLineData
e3366964
AM
1From 9cf12d57c58a82cfe3e6fee26d1ea55dfe49f9c4 Mon Sep 17 00:00:00 2001
2From: Pedro Alves <palves@redhat.com>
3Date: Tue, 26 Jul 2016 19:35:40 +0100
4Subject: [PATCH] Fix PR gdb/20287 - x32 and "gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t))"
5MIME-Version: 1.0
6Content-Type: text/plain; charset=utf8
7Content-Transfer-Encoding: 8bit
8
9Building an x32 gdb trips on a static assertion:
10
11 In file included from .../src/gdb/common/common-defs.h:71:0,
12 from .../src/gdb/nat/amd64-linux-siginfo.c:21:
13 .../src/gdb/common/gdb_assert.h:26:66: error: size of array â\80\98never_defined_just_used_for_checkingâ\80\99 is negative
14 extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
15 ^
16 .../src/gdb/nat/amd64-linux-siginfo.c:113:1: note: in expansion of macro â\80\98gdb_static_assertâ\80\99
17 gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t));
18 ^
19
20The problem is that the way nat_siginfo_t is defined, it can only
21match the host's siginfo_t object when gdb is built as a 64-bit
22program.
23
24Several bits of nat_siginfo_t are off:
25
26- nat_siginfo_t's _pad field's definition is:
27
28 int _pad[((128 / sizeof (int)) - 4)];
29
30 while /usr/include/bits/siginfo.h has:
31
32 # define __SI_MAX_SIZE 128
33 # if __WORDSIZE == 64
34 # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
35 # else
36 # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
37 # endif
38
39 and __WORDSIZE == 32 for x32. This is what causes the size of
40 nat_siginfo_t to be wrong and the assertion to fail.
41
42- the nat_clock_t type is incorrect for 64-bit. We have this:
43
44 /* For native 64-bit, clock_t in _sigchld is 64bit aligned at 4 bytes. */
45 typedef long __attribute__ ((__aligned__ (4))) nat_clock_t;
46
47 however, /usr/include/bits/siginfo.h has:
48
49 # if defined __x86_64__ && __WORDSIZE == 32
50 /* si_utime and si_stime must be 4 byte aligned for x32 to match the
51 kernel. We align siginfo_t to 8 bytes so that si_utime and si_stime
52 are actually aligned to 8 bytes since their offsets are multiple of
53 8 bytes. */
54 typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t;
55 # define __SI_ALIGNMENT __attribute__ ((__aligned__ (8)))
56 # else
57 typedef __clock_t __sigchld_clock_t;
58 # define __SI_ALIGNMENT
59 # endif
60
61 So we're currently forcing 4-byte alignment on clock_t, when it
62 should only be so for x32, not 64-bit.
63
64The fix:
65
66 - Leaves nat_siginfo_t strictly for the 64-bit ABI.
67
68 - Adds a new typedef for the siginfo type that ptrace uses
69 (ptrace_siginfo_t). An x32 gdb always gets/sets an x32 siginfo_t
70 type with PTRACE_GETSIGINFO/PTRACE_SETSIGINFO.
71
72 - Uses this new ptrace_siginfo_t type instead of nat_siginfo_t as the
73 intermediate conversion type.
74
75diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
76index 391a646..fea6ee2 100644
77--- a/gdb/amd64-linux-nat.c
78+++ b/gdb/amd64-linux-nat.c
79@@ -321,25 +321,25 @@ ps_get_thread_area (const struct ps_prochandle *ph,
80 }
81 \f
82
83-/* Convert a native/host siginfo object, into/from the siginfo in the
84+/* Convert a ptrace/host siginfo object, into/from the siginfo in the
85 layout of the inferiors' architecture. Returns true if any
86 conversion was done; false otherwise. If DIRECTION is 1, then copy
87- from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
88+ from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to
89 INF. */
90
91 static int
92-amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
93+amd64_linux_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
94 {
95 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
96
97 /* Is the inferior 32-bit? If so, then do fixup the siginfo
98 object. */
99 if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
100- return amd64_linux_siginfo_fixup_common (native, inf, direction,
101+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
102 FIXUP_32);
103 /* No fixup for native x32 GDB. */
104 else if (gdbarch_addr_bit (gdbarch) == 32 && sizeof (void *) == 8)
105- return amd64_linux_siginfo_fixup_common (native, inf, direction,
106+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
107 FIXUP_X32);
108 else
109 return 0;
110diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
111index 5080dec..4e6dbce 100644
112--- a/gdb/gdbserver/linux-x86-low.c
113+++ b/gdb/gdbserver/linux-x86-low.c
114@@ -624,14 +624,14 @@ x86_debug_reg_state (pid_t pid)
115 as debugging it with a 32-bit GDBSERVER, we do the 32-bit <-> 64-bit
116 conversion in-place ourselves. */
117
118-/* Convert a native/host siginfo object, into/from the siginfo in the
119+/* Convert a ptrace/host siginfo object, into/from the siginfo in the
120 layout of the inferiors' architecture. Returns true if any
121 conversion was done; false otherwise. If DIRECTION is 1, then copy
122- from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to
123+ from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to
124 INF. */
125
126 static int
127-x86_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
128+x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction)
129 {
130 #ifdef __x86_64__
131 unsigned int machine;
132@@ -640,11 +640,11 @@ x86_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
133
134 /* Is the inferior 32-bit? If so, then fixup the siginfo object. */
135 if (!is_64bit_tdesc ())
136- return amd64_linux_siginfo_fixup_common (native, inf, direction,
137+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
138 FIXUP_32);
139 /* No fixup for native x32 GDB. */
140 else if (!is_elf64 && sizeof (void *) == 8)
141- return amd64_linux_siginfo_fixup_common (native, inf, direction,
142+ return amd64_linux_siginfo_fixup_common (ptrace, inf, direction,
143 FIXUP_X32);
144 #endif
145
146diff --git a/gdb/nat/amd64-linux-siginfo.c b/gdb/nat/amd64-linux-siginfo.c
147index 72b3042..9f7df0c 100644
148--- a/gdb/nat/amd64-linux-siginfo.c
149+++ b/gdb/nat/amd64-linux-siginfo.c
150@@ -21,23 +21,29 @@
151 #include "common-defs.h"
152 #include "amd64-linux-siginfo.h"
153
154-/* The nat_* types below define the most complete kernel siginfo type
155- known for the architecture, independent of the system/libc headers. */
156+#define GDB_SI_SIZE 128
157+
158+/* The types below define the most complete kernel siginfo types known
159+ for the architecture, independent of the system/libc headers. They
160+ are named from a 64-bit kernel's perspective:
161+
162+ | layout | type |
163+ |--------+----------------------|
164+ | 64-bit | nat_siginfo_t |
165+ | 32-bit | compat_siginfo_t |
166+ | x32 | compat_x32_siginfo_t |
167+*/
168+
169+#ifndef __ILP32__
170
171 typedef int nat_int_t;
172-typedef void* nat_uptr_t;
173+typedef unsigned long nat_uptr_t;
174
175 typedef int nat_time_t;
176 typedef int nat_timer_t;
177
178-/* For native 64-bit, clock_t in _sigchld is 64bit aligned at 4 bytes. */
179-typedef long __attribute__ ((__aligned__ (4))) nat_clock_t;
180-
181-struct nat_timeval
182-{
183- nat_time_t tv_sec;
184- int tv_usec;
185-};
186+/* For native 64-bit, clock_t in _sigchld is 64-bit. */
187+typedef long nat_clock_t;
188
189 typedef union nat_sigval
190 {
191@@ -106,11 +112,9 @@ typedef struct nat_siginfo
192 int _fd;
193 } _sigpoll;
194 } _sifields;
195-} nat_siginfo_t __attribute__ ((__aligned__ (8)));
196-
197-/* Sanity check for the siginfo structure size. */
198+} nat_siginfo_t;
199
200-gdb_static_assert (sizeof (nat_siginfo_t) == sizeof (siginfo_t));
201+#endif /* __ILP32__ */
202
203 /* These types below (compat_*) define a siginfo type that is layout
204 compatible with the siginfo type exported by the 32-bit userspace
205@@ -286,62 +290,71 @@ typedef struct compat_x32_siginfo
206 #define si_overrun si_timer2
207 #endif
208
209+/* The type of the siginfo object the kernel returns in
210+ PTRACE_GETSIGINFO. If gdb is built as a x32 program, we get a x32
211+ siginfo. */
212+#ifdef __ILP32__
213+typedef compat_x32_siginfo_t ptrace_siginfo_t;
214+#else
215+typedef nat_siginfo_t ptrace_siginfo_t;
216+#endif
217+
218 /* Convert the system provided siginfo into compatible siginfo. */
219
220 static void
221-compat_siginfo_from_siginfo (compat_siginfo_t *to, siginfo_t *from)
222+compat_siginfo_from_siginfo (compat_siginfo_t *to, const siginfo_t *from)
223 {
224- nat_siginfo_t from_nat;
225+ ptrace_siginfo_t from_ptrace;
226
227- memcpy (&from_nat, from, sizeof (from_nat));
228+ memcpy (&from_ptrace, from, sizeof (from_ptrace));
229 memset (to, 0, sizeof (*to));
230
231- to->si_signo = from_nat.si_signo;
232- to->si_errno = from_nat.si_errno;
233- to->si_code = from_nat.si_code;
234+ to->si_signo = from_ptrace.si_signo;
235+ to->si_errno = from_ptrace.si_errno;
236+ to->si_code = from_ptrace.si_code;
237
238 if (to->si_code == SI_TIMER)
239 {
240- to->cpt_si_timerid = from_nat.cpt_si_timerid;
241- to->cpt_si_overrun = from_nat.cpt_si_overrun;
242- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
243+ to->cpt_si_timerid = from_ptrace.cpt_si_timerid;
244+ to->cpt_si_overrun = from_ptrace.cpt_si_overrun;
245+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
246 }
247 else if (to->si_code == SI_USER)
248 {
249- to->cpt_si_pid = from_nat.cpt_si_pid;
250- to->cpt_si_uid = from_nat.cpt_si_uid;
251+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
252+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
253 }
254 else if (to->si_code < 0)
255 {
256- to->cpt_si_pid = from_nat.cpt_si_pid;
257- to->cpt_si_uid = from_nat.cpt_si_uid;
258- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
259+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
260+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
261+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
262 }
263 else
264 {
265 switch (to->si_signo)
266 {
267 case SIGCHLD:
268- to->cpt_si_pid = from_nat.cpt_si_pid;
269- to->cpt_si_uid = from_nat.cpt_si_uid;
270- to->cpt_si_status = from_nat.cpt_si_status;
271- to->cpt_si_utime = from_nat.cpt_si_utime;
272- to->cpt_si_stime = from_nat.cpt_si_stime;
273+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
274+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
275+ to->cpt_si_status = from_ptrace.cpt_si_status;
276+ to->cpt_si_utime = from_ptrace.cpt_si_utime;
277+ to->cpt_si_stime = from_ptrace.cpt_si_stime;
278 break;
279 case SIGILL:
280 case SIGFPE:
281 case SIGSEGV:
282 case SIGBUS:
283- to->cpt_si_addr = (intptr_t) from_nat.cpt_si_addr;
284+ to->cpt_si_addr = from_ptrace.cpt_si_addr;
285 break;
286 case SIGPOLL:
287- to->cpt_si_band = from_nat.cpt_si_band;
288- to->cpt_si_fd = from_nat.cpt_si_fd;
289+ to->cpt_si_band = from_ptrace.cpt_si_band;
290+ to->cpt_si_fd = from_ptrace.cpt_si_fd;
291 break;
292 default:
293- to->cpt_si_pid = from_nat.cpt_si_pid;
294- to->cpt_si_uid = from_nat.cpt_si_uid;
295- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
296+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
297+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
298+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
299 break;
300 }
301 }
302@@ -350,124 +363,124 @@ compat_siginfo_from_siginfo (compat_siginfo_t *to, siginfo_t *from)
303 /* Convert the compatible siginfo into system siginfo. */
304
305 static void
306-siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
307+siginfo_from_compat_siginfo (siginfo_t *to, const compat_siginfo_t *from)
308 {
309- nat_siginfo_t to_nat;
310+ ptrace_siginfo_t to_ptrace;
311
312- memset (&to_nat, 0, sizeof (to_nat));
313+ memset (&to_ptrace, 0, sizeof (to_ptrace));
314
315- to_nat.si_signo = from->si_signo;
316- to_nat.si_errno = from->si_errno;
317- to_nat.si_code = from->si_code;
318+ to_ptrace.si_signo = from->si_signo;
319+ to_ptrace.si_errno = from->si_errno;
320+ to_ptrace.si_code = from->si_code;
321
322- if (to_nat.si_code == SI_TIMER)
323+ if (to_ptrace.si_code == SI_TIMER)
324 {
325- to_nat.cpt_si_timerid = from->cpt_si_timerid;
326- to_nat.cpt_si_overrun = from->cpt_si_overrun;
327- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
328+ to_ptrace.cpt_si_timerid = from->cpt_si_timerid;
329+ to_ptrace.cpt_si_overrun = from->cpt_si_overrun;
330+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
331 }
332- else if (to_nat.si_code == SI_USER)
333+ else if (to_ptrace.si_code == SI_USER)
334 {
335- to_nat.cpt_si_pid = from->cpt_si_pid;
336- to_nat.cpt_si_uid = from->cpt_si_uid;
337+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
338+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
339 }
340- if (to_nat.si_code < 0)
341+ if (to_ptrace.si_code < 0)
342 {
343- to_nat.cpt_si_pid = from->cpt_si_pid;
344- to_nat.cpt_si_uid = from->cpt_si_uid;
345- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
346+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
347+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
348+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
349 }
350 else
351 {
352- switch (to_nat.si_signo)
353+ switch (to_ptrace.si_signo)
354 {
355 case SIGCHLD:
356- to_nat.cpt_si_pid = from->cpt_si_pid;
357- to_nat.cpt_si_uid = from->cpt_si_uid;
358- to_nat.cpt_si_status = from->cpt_si_status;
359- to_nat.cpt_si_utime = from->cpt_si_utime;
360- to_nat.cpt_si_stime = from->cpt_si_stime;
361+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
362+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
363+ to_ptrace.cpt_si_status = from->cpt_si_status;
364+ to_ptrace.cpt_si_utime = from->cpt_si_utime;
365+ to_ptrace.cpt_si_stime = from->cpt_si_stime;
366 break;
367 case SIGILL:
368 case SIGFPE:
369 case SIGSEGV:
370 case SIGBUS:
371- to_nat.cpt_si_addr = (void *) (intptr_t) from->cpt_si_addr;
372- to_nat.cpt_si_addr_lsb = (short) from->cpt_si_addr_lsb;
373+ to_ptrace.cpt_si_addr = from->cpt_si_addr;
374+ to_ptrace.cpt_si_addr_lsb = from->cpt_si_addr_lsb;
375 break;
376 case SIGPOLL:
377- to_nat.cpt_si_band = from->cpt_si_band;
378- to_nat.cpt_si_fd = from->cpt_si_fd;
379+ to_ptrace.cpt_si_band = from->cpt_si_band;
380+ to_ptrace.cpt_si_fd = from->cpt_si_fd;
381 break;
382 default:
383- to_nat.cpt_si_pid = from->cpt_si_pid;
384- to_nat.cpt_si_uid = from->cpt_si_uid;
385- to_nat.cpt_si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
386+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
387+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
388+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
389 break;
390 }
391 }
392- memcpy (to, &to_nat, sizeof (to_nat));
393+ memcpy (to, &to_ptrace, sizeof (to_ptrace));
394 }
395
396 /* Convert the system provided siginfo into compatible x32 siginfo. */
397
398 static void
399 compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
400- siginfo_t *from)
401+ const siginfo_t *from)
402 {
403- nat_siginfo_t from_nat;
404+ ptrace_siginfo_t from_ptrace;
405
406- memcpy (&from_nat, from, sizeof (from_nat));
407+ memcpy (&from_ptrace, from, sizeof (from_ptrace));
408 memset (to, 0, sizeof (*to));
409
410- to->si_signo = from_nat.si_signo;
411- to->si_errno = from_nat.si_errno;
412- to->si_code = from_nat.si_code;
413+ to->si_signo = from_ptrace.si_signo;
414+ to->si_errno = from_ptrace.si_errno;
415+ to->si_code = from_ptrace.si_code;
416
417 if (to->si_code == SI_TIMER)
418 {
419- to->cpt_si_timerid = from_nat.cpt_si_timerid;
420- to->cpt_si_overrun = from_nat.cpt_si_overrun;
421- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
422+ to->cpt_si_timerid = from_ptrace.cpt_si_timerid;
423+ to->cpt_si_overrun = from_ptrace.cpt_si_overrun;
424+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
425 }
426 else if (to->si_code == SI_USER)
427 {
428- to->cpt_si_pid = from_nat.cpt_si_pid;
429- to->cpt_si_uid = from_nat.cpt_si_uid;
430+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
431+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
432 }
433 else if (to->si_code < 0)
434 {
435- to->cpt_si_pid = from_nat.cpt_si_pid;
436- to->cpt_si_uid = from_nat.cpt_si_uid;
437- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
438+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
439+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
440+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
441 }
442 else
443 {
444 switch (to->si_signo)
445 {
446 case SIGCHLD:
447- to->cpt_si_pid = from_nat.cpt_si_pid;
448- to->cpt_si_uid = from_nat.cpt_si_uid;
449- to->cpt_si_status = from_nat.cpt_si_status;
450- memcpy (&to->cpt_si_utime, &from_nat.cpt_si_utime,
451+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
452+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
453+ to->cpt_si_status = from_ptrace.cpt_si_status;
454+ memcpy (&to->cpt_si_utime, &from_ptrace.cpt_si_utime,
455 sizeof (to->cpt_si_utime));
456- memcpy (&to->cpt_si_stime, &from_nat.cpt_si_stime,
457+ memcpy (&to->cpt_si_stime, &from_ptrace.cpt_si_stime,
458 sizeof (to->cpt_si_stime));
459 break;
460 case SIGILL:
461 case SIGFPE:
462 case SIGSEGV:
463 case SIGBUS:
464- to->cpt_si_addr = (intptr_t) from_nat.cpt_si_addr;
465+ to->cpt_si_addr = from_ptrace.cpt_si_addr;
466 break;
467 case SIGPOLL:
468- to->cpt_si_band = from_nat.cpt_si_band;
469- to->cpt_si_fd = from_nat.cpt_si_fd;
470+ to->cpt_si_band = from_ptrace.cpt_si_band;
471+ to->cpt_si_fd = from_ptrace.cpt_si_fd;
472 break;
473 default:
474- to->cpt_si_pid = from_nat.cpt_si_pid;
475- to->cpt_si_uid = from_nat.cpt_si_uid;
476- to->cpt_si_ptr = (intptr_t) from_nat.cpt_si_ptr;
477+ to->cpt_si_pid = from_ptrace.cpt_si_pid;
478+ to->cpt_si_uid = from_ptrace.cpt_si_uid;
479+ to->cpt_si_ptr = from_ptrace.cpt_si_ptr;
480 break;
481 }
482 }
483@@ -479,98 +492,105 @@ compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
484 /* Convert the compatible x32 siginfo into system siginfo. */
485 static void
486 siginfo_from_compat_x32_siginfo (siginfo_t *to,
487- compat_x32_siginfo_t *from)
488+ const compat_x32_siginfo_t *from)
489 {
490- nat_siginfo_t to_nat;
491+ ptrace_siginfo_t to_ptrace;
492
493- memset (&to_nat, 0, sizeof (to_nat));
494- to_nat.si_signo = from->si_signo;
495- to_nat.si_errno = from->si_errno;
496- to_nat.si_code = from->si_code;
497+ memset (&to_ptrace, 0, sizeof (to_ptrace));
498+ to_ptrace.si_signo = from->si_signo;
499+ to_ptrace.si_errno = from->si_errno;
500+ to_ptrace.si_code = from->si_code;
501
502- if (to_nat.si_code == SI_TIMER)
503+ if (to_ptrace.si_code == SI_TIMER)
504 {
505- to_nat.cpt_si_timerid = from->cpt_si_timerid;
506- to_nat.cpt_si_overrun = from->cpt_si_overrun;
507- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
508+ to_ptrace.cpt_si_timerid = from->cpt_si_timerid;
509+ to_ptrace.cpt_si_overrun = from->cpt_si_overrun;
510+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
511 }
512- else if (to_nat.si_code == SI_USER)
513+ else if (to_ptrace.si_code == SI_USER)
514 {
515- to_nat.cpt_si_pid = from->cpt_si_pid;
516- to_nat.cpt_si_uid = from->cpt_si_uid;
517+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
518+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
519 }
520- if (to_nat.si_code < 0)
521+ if (to_ptrace.si_code < 0)
522 {
523- to_nat.cpt_si_pid = from->cpt_si_pid;
524- to_nat.cpt_si_uid = from->cpt_si_uid;
525- to_nat.cpt_si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
526+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
527+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
528+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
529 }
530 else
531 {
532- switch (to_nat.si_signo)
533+ switch (to_ptrace.si_signo)
534 {
535 case SIGCHLD:
536- to_nat.cpt_si_pid = from->cpt_si_pid;
537- to_nat.cpt_si_uid = from->cpt_si_uid;
538- to_nat.cpt_si_status = from->cpt_si_status;
539- memcpy (&to_nat.cpt_si_utime, &from->cpt_si_utime,
540- sizeof (to_nat.cpt_si_utime));
541- memcpy (&to_nat.cpt_si_stime, &from->cpt_si_stime,
542- sizeof (to_nat.cpt_si_stime));
543+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
544+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
545+ to_ptrace.cpt_si_status = from->cpt_si_status;
546+ memcpy (&to_ptrace.cpt_si_utime, &from->cpt_si_utime,
547+ sizeof (to_ptrace.cpt_si_utime));
548+ memcpy (&to_ptrace.cpt_si_stime, &from->cpt_si_stime,
549+ sizeof (to_ptrace.cpt_si_stime));
550 break;
551 case SIGILL:
552 case SIGFPE:
553 case SIGSEGV:
554 case SIGBUS:
555- to_nat.cpt_si_addr = (void *) (intptr_t) from->cpt_si_addr;
556+ to_ptrace.cpt_si_addr = from->cpt_si_addr;
557 break;
558 case SIGPOLL:
559- to_nat.cpt_si_band = from->cpt_si_band;
560- to_nat.cpt_si_fd = from->cpt_si_fd;
561+ to_ptrace.cpt_si_band = from->cpt_si_band;
562+ to_ptrace.cpt_si_fd = from->cpt_si_fd;
563 break;
564 default:
565- to_nat.cpt_si_pid = from->cpt_si_pid;
566- to_nat.cpt_si_uid = from->cpt_si_uid;
567- to_nat.cpt_si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
568+ to_ptrace.cpt_si_pid = from->cpt_si_pid;
569+ to_ptrace.cpt_si_uid = from->cpt_si_uid;
570+ to_ptrace.cpt_si_ptr = from->cpt_si_ptr;
571 break;
572 }
573 }
574- memcpy (to, &to_nat, sizeof (to_nat));
575+ memcpy (to, &to_ptrace, sizeof (to_ptrace));
576 }
577
578-/* Convert a native/host siginfo object, into/from the siginfo in the
579+/* Convert a ptrace siginfo object, into/from the siginfo in the
580 layout of the inferiors' architecture. Returns true if any
581 conversion was done; false otherwise. If DIRECTION is 1, then copy
582- from INF to NATIVE. If DIRECTION is 0, then copy from NATIVE to INF. */
583+ from INF to PTRACE. If DIRECTION is 0, then copy from NATIVE to
584+ INF. */
585
586 int
587-amd64_linux_siginfo_fixup_common (siginfo_t *native, gdb_byte *inf,
588+amd64_linux_siginfo_fixup_common (siginfo_t *ptrace, gdb_byte *inf,
589 int direction,
590 enum amd64_siginfo_fixup_mode mode)
591 {
592 if (mode == FIXUP_32)
593 {
594- gdb_assert (sizeof (siginfo_t) == sizeof (compat_siginfo_t));
595-
596 if (direction == 0)
597- compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, native);
598+ compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, ptrace);
599 else
600- siginfo_from_compat_siginfo (native, (struct compat_siginfo *) inf);
601+ siginfo_from_compat_siginfo (ptrace, (struct compat_siginfo *) inf);
602
603 return 1;
604 }
605 else if (mode == FIXUP_X32)
606 {
607- gdb_assert (sizeof (siginfo_t) == sizeof (compat_x32_siginfo_t));
608-
609 if (direction == 0)
610 compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf,
611- native);
612+ ptrace);
613 else
614- siginfo_from_compat_x32_siginfo (native,
615+ siginfo_from_compat_x32_siginfo (ptrace,
616 (struct compat_x32_siginfo *) inf);
617
618 return 1;
619 }
620 return 0;
621 }
622+
623+/* Sanity check for the siginfo structure sizes. */
624+
625+gdb_static_assert (sizeof (siginfo_t) == GDB_SI_SIZE);
626+#ifndef __ILP32__
627+gdb_static_assert (sizeof (nat_siginfo_t) == GDB_SI_SIZE);
628+#endif
629+gdb_static_assert (sizeof (compat_x32_siginfo_t) == GDB_SI_SIZE);
630+gdb_static_assert (sizeof (compat_siginfo_t) == GDB_SI_SIZE);
631+gdb_static_assert (sizeof (ptrace_siginfo_t) == GDB_SI_SIZE);
632--
6331.7.1
634
This page took 0.19902 seconds and 4 git commands to generate.