Replace 'core_regset_sections' by iterator method
[deliverable/binutils-gdb.git] / gdb / linux-tdep.c
1 /* Target-dependent code for GNU/Linux, architecture independent.
2
3 Copyright (C) 2009-2014 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "gdbtypes.h"
22 #include "linux-tdep.h"
23 #include "auxv.h"
24 #include "target.h"
25 #include "gdbthread.h"
26 #include "gdbcore.h"
27 #include "regcache.h"
28 #include "regset.h"
29 #include "elf/common.h"
30 #include "elf-bfd.h" /* for elfcore_write_* */
31 #include "inferior.h"
32 #include "cli/cli-utils.h"
33 #include "arch-utils.h"
34 #include "gdb_obstack.h"
35
36 #include <ctype.h>
37
38 /* This enum represents the signals' numbers on a generic architecture
39 running the Linux kernel. The definition of "generic" comes from
40 the file <include/uapi/asm-generic/signal.h>, from the Linux kernel
41 tree, which is the "de facto" implementation of signal numbers to
42 be used by new architecture ports.
43
44 For those architectures which have differences between the generic
45 standard (e.g., Alpha), we define the different signals (and *only*
46 those) in the specific target-dependent file (e.g.,
47 alpha-linux-tdep.c, for Alpha). Please refer to the architecture's
48 tdep file for more information.
49
50 ARM deserves a special mention here. On the file
51 <arch/arm/include/uapi/asm/signal.h>, it defines only one different
52 (and ARM-only) signal, which is SIGSWI, with the same number as
53 SIGRTMIN. This signal is used only for a very specific target,
54 called ArthurOS (from RISCOS). Therefore, we do not handle it on
55 the ARM-tdep file, and we can safely use the generic signal handler
56 here for ARM targets.
57
58 As stated above, this enum is derived from
59 <include/uapi/asm-generic/signal.h>, from the Linux kernel
60 tree. */
61
62 enum
63 {
64 LINUX_SIGHUP = 1,
65 LINUX_SIGINT = 2,
66 LINUX_SIGQUIT = 3,
67 LINUX_SIGILL = 4,
68 LINUX_SIGTRAP = 5,
69 LINUX_SIGABRT = 6,
70 LINUX_SIGIOT = 6,
71 LINUX_SIGBUS = 7,
72 LINUX_SIGFPE = 8,
73 LINUX_SIGKILL = 9,
74 LINUX_SIGUSR1 = 10,
75 LINUX_SIGSEGV = 11,
76 LINUX_SIGUSR2 = 12,
77 LINUX_SIGPIPE = 13,
78 LINUX_SIGALRM = 14,
79 LINUX_SIGTERM = 15,
80 LINUX_SIGSTKFLT = 16,
81 LINUX_SIGCHLD = 17,
82 LINUX_SIGCONT = 18,
83 LINUX_SIGSTOP = 19,
84 LINUX_SIGTSTP = 20,
85 LINUX_SIGTTIN = 21,
86 LINUX_SIGTTOU = 22,
87 LINUX_SIGURG = 23,
88 LINUX_SIGXCPU = 24,
89 LINUX_SIGXFSZ = 25,
90 LINUX_SIGVTALRM = 26,
91 LINUX_SIGPROF = 27,
92 LINUX_SIGWINCH = 28,
93 LINUX_SIGIO = 29,
94 LINUX_SIGPOLL = LINUX_SIGIO,
95 LINUX_SIGPWR = 30,
96 LINUX_SIGSYS = 31,
97 LINUX_SIGUNUSED = 31,
98
99 LINUX_SIGRTMIN = 32,
100 LINUX_SIGRTMAX = 64,
101 };
102
103 static struct gdbarch_data *linux_gdbarch_data_handle;
104
105 struct linux_gdbarch_data
106 {
107 struct type *siginfo_type;
108 };
109
110 static void *
111 init_linux_gdbarch_data (struct gdbarch *gdbarch)
112 {
113 return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct linux_gdbarch_data);
114 }
115
116 static struct linux_gdbarch_data *
117 get_linux_gdbarch_data (struct gdbarch *gdbarch)
118 {
119 return gdbarch_data (gdbarch, linux_gdbarch_data_handle);
120 }
121
122 /* This function is suitable for architectures that don't
123 extend/override the standard siginfo structure. */
124
125 struct type *
126 linux_get_siginfo_type (struct gdbarch *gdbarch)
127 {
128 struct linux_gdbarch_data *linux_gdbarch_data;
129 struct type *int_type, *uint_type, *long_type, *void_ptr_type;
130 struct type *uid_type, *pid_type;
131 struct type *sigval_type, *clock_type;
132 struct type *siginfo_type, *sifields_type;
133 struct type *type;
134
135 linux_gdbarch_data = get_linux_gdbarch_data (gdbarch);
136 if (linux_gdbarch_data->siginfo_type != NULL)
137 return linux_gdbarch_data->siginfo_type;
138
139 int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
140 0, "int");
141 uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
142 1, "unsigned int");
143 long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
144 0, "long");
145 void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
146
147 /* sival_t */
148 sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
149 TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
150 append_composite_type_field (sigval_type, "sival_int", int_type);
151 append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
152
153 /* __pid_t */
154 pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
155 TYPE_LENGTH (int_type), "__pid_t");
156 TYPE_TARGET_TYPE (pid_type) = int_type;
157 TYPE_TARGET_STUB (pid_type) = 1;
158
159 /* __uid_t */
160 uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
161 TYPE_LENGTH (uint_type), "__uid_t");
162 TYPE_TARGET_TYPE (uid_type) = uint_type;
163 TYPE_TARGET_STUB (uid_type) = 1;
164
165 /* __clock_t */
166 clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
167 TYPE_LENGTH (long_type), "__clock_t");
168 TYPE_TARGET_TYPE (clock_type) = long_type;
169 TYPE_TARGET_STUB (clock_type) = 1;
170
171 /* _sifields */
172 sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
173
174 {
175 const int si_max_size = 128;
176 int si_pad_size;
177 int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
178
179 /* _pad */
180 if (gdbarch_ptr_bit (gdbarch) == 64)
181 si_pad_size = (si_max_size / size_of_int) - 4;
182 else
183 si_pad_size = (si_max_size / size_of_int) - 3;
184 append_composite_type_field (sifields_type, "_pad",
185 init_vector_type (int_type, si_pad_size));
186 }
187
188 /* _kill */
189 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
190 append_composite_type_field (type, "si_pid", pid_type);
191 append_composite_type_field (type, "si_uid", uid_type);
192 append_composite_type_field (sifields_type, "_kill", type);
193
194 /* _timer */
195 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
196 append_composite_type_field (type, "si_tid", int_type);
197 append_composite_type_field (type, "si_overrun", int_type);
198 append_composite_type_field (type, "si_sigval", sigval_type);
199 append_composite_type_field (sifields_type, "_timer", type);
200
201 /* _rt */
202 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
203 append_composite_type_field (type, "si_pid", pid_type);
204 append_composite_type_field (type, "si_uid", uid_type);
205 append_composite_type_field (type, "si_sigval", sigval_type);
206 append_composite_type_field (sifields_type, "_rt", type);
207
208 /* _sigchld */
209 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
210 append_composite_type_field (type, "si_pid", pid_type);
211 append_composite_type_field (type, "si_uid", uid_type);
212 append_composite_type_field (type, "si_status", int_type);
213 append_composite_type_field (type, "si_utime", clock_type);
214 append_composite_type_field (type, "si_stime", clock_type);
215 append_composite_type_field (sifields_type, "_sigchld", type);
216
217 /* _sigfault */
218 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
219 append_composite_type_field (type, "si_addr", void_ptr_type);
220 append_composite_type_field (sifields_type, "_sigfault", type);
221
222 /* _sigpoll */
223 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
224 append_composite_type_field (type, "si_band", long_type);
225 append_composite_type_field (type, "si_fd", int_type);
226 append_composite_type_field (sifields_type, "_sigpoll", type);
227
228 /* struct siginfo */
229 siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
230 TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
231 append_composite_type_field (siginfo_type, "si_signo", int_type);
232 append_composite_type_field (siginfo_type, "si_errno", int_type);
233 append_composite_type_field (siginfo_type, "si_code", int_type);
234 append_composite_type_field_aligned (siginfo_type,
235 "_sifields", sifields_type,
236 TYPE_LENGTH (long_type));
237
238 linux_gdbarch_data->siginfo_type = siginfo_type;
239
240 return siginfo_type;
241 }
242
243 /* Return true if the target is running on uClinux instead of normal
244 Linux kernel. */
245
246 int
247 linux_is_uclinux (void)
248 {
249 CORE_ADDR dummy;
250
251 return (target_auxv_search (&current_target, AT_NULL, &dummy) > 0
252 && target_auxv_search (&current_target, AT_PAGESZ, &dummy) == 0);
253 }
254
255 static int
256 linux_has_shared_address_space (struct gdbarch *gdbarch)
257 {
258 return linux_is_uclinux ();
259 }
260
261 /* This is how we want PTIDs from core files to be printed. */
262
263 static char *
264 linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
265 {
266 static char buf[80];
267
268 if (ptid_get_lwp (ptid) != 0)
269 {
270 snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
271 return buf;
272 }
273
274 return normal_pid_to_str (ptid);
275 }
276
277 /* Service function for corefiles and info proc. */
278
279 static void
280 read_mapping (const char *line,
281 ULONGEST *addr, ULONGEST *endaddr,
282 const char **permissions, size_t *permissions_len,
283 ULONGEST *offset,
284 const char **device, size_t *device_len,
285 ULONGEST *inode,
286 const char **filename)
287 {
288 const char *p = line;
289
290 *addr = strtoulst (p, &p, 16);
291 if (*p == '-')
292 p++;
293 *endaddr = strtoulst (p, &p, 16);
294
295 p = skip_spaces_const (p);
296 *permissions = p;
297 while (*p && !isspace (*p))
298 p++;
299 *permissions_len = p - *permissions;
300
301 *offset = strtoulst (p, &p, 16);
302
303 p = skip_spaces_const (p);
304 *device = p;
305 while (*p && !isspace (*p))
306 p++;
307 *device_len = p - *device;
308
309 *inode = strtoulst (p, &p, 10);
310
311 p = skip_spaces_const (p);
312 *filename = p;
313 }
314
315 /* Implement the "info proc" command. */
316
317 static void
318 linux_info_proc (struct gdbarch *gdbarch, const char *args,
319 enum info_proc_what what)
320 {
321 /* A long is used for pid instead of an int to avoid a loss of precision
322 compiler warning from the output of strtoul. */
323 long pid;
324 int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
325 int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
326 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
327 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
328 int status_f = (what == IP_STATUS || what == IP_ALL);
329 int stat_f = (what == IP_STAT || what == IP_ALL);
330 char filename[100];
331 char *data;
332 int target_errno;
333
334 if (args && isdigit (args[0]))
335 {
336 char *tem;
337
338 pid = strtoul (args, &tem, 10);
339 args = tem;
340 }
341 else
342 {
343 if (!target_has_execution)
344 error (_("No current process: you must name one."));
345 if (current_inferior ()->fake_pid_p)
346 error (_("Can't determine the current process's PID: you must name one."));
347
348 pid = current_inferior ()->pid;
349 }
350
351 args = skip_spaces_const (args);
352 if (args && args[0])
353 error (_("Too many parameters: %s"), args);
354
355 printf_filtered (_("process %ld\n"), pid);
356 if (cmdline_f)
357 {
358 xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
359 data = target_fileio_read_stralloc (filename);
360 if (data)
361 {
362 struct cleanup *cleanup = make_cleanup (xfree, data);
363 printf_filtered ("cmdline = '%s'\n", data);
364 do_cleanups (cleanup);
365 }
366 else
367 warning (_("unable to open /proc file '%s'"), filename);
368 }
369 if (cwd_f)
370 {
371 xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
372 data = target_fileio_readlink (filename, &target_errno);
373 if (data)
374 {
375 struct cleanup *cleanup = make_cleanup (xfree, data);
376 printf_filtered ("cwd = '%s'\n", data);
377 do_cleanups (cleanup);
378 }
379 else
380 warning (_("unable to read link '%s'"), filename);
381 }
382 if (exe_f)
383 {
384 xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
385 data = target_fileio_readlink (filename, &target_errno);
386 if (data)
387 {
388 struct cleanup *cleanup = make_cleanup (xfree, data);
389 printf_filtered ("exe = '%s'\n", data);
390 do_cleanups (cleanup);
391 }
392 else
393 warning (_("unable to read link '%s'"), filename);
394 }
395 if (mappings_f)
396 {
397 xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
398 data = target_fileio_read_stralloc (filename);
399 if (data)
400 {
401 struct cleanup *cleanup = make_cleanup (xfree, data);
402 char *line;
403
404 printf_filtered (_("Mapped address spaces:\n\n"));
405 if (gdbarch_addr_bit (gdbarch) == 32)
406 {
407 printf_filtered ("\t%10s %10s %10s %10s %s\n",
408 "Start Addr",
409 " End Addr",
410 " Size", " Offset", "objfile");
411 }
412 else
413 {
414 printf_filtered (" %18s %18s %10s %10s %s\n",
415 "Start Addr",
416 " End Addr",
417 " Size", " Offset", "objfile");
418 }
419
420 for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n"))
421 {
422 ULONGEST addr, endaddr, offset, inode;
423 const char *permissions, *device, *filename;
424 size_t permissions_len, device_len;
425
426 read_mapping (line, &addr, &endaddr,
427 &permissions, &permissions_len,
428 &offset, &device, &device_len,
429 &inode, &filename);
430
431 if (gdbarch_addr_bit (gdbarch) == 32)
432 {
433 printf_filtered ("\t%10s %10s %10s %10s %s\n",
434 paddress (gdbarch, addr),
435 paddress (gdbarch, endaddr),
436 hex_string (endaddr - addr),
437 hex_string (offset),
438 *filename? filename : "");
439 }
440 else
441 {
442 printf_filtered (" %18s %18s %10s %10s %s\n",
443 paddress (gdbarch, addr),
444 paddress (gdbarch, endaddr),
445 hex_string (endaddr - addr),
446 hex_string (offset),
447 *filename? filename : "");
448 }
449 }
450
451 do_cleanups (cleanup);
452 }
453 else
454 warning (_("unable to open /proc file '%s'"), filename);
455 }
456 if (status_f)
457 {
458 xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
459 data = target_fileio_read_stralloc (filename);
460 if (data)
461 {
462 struct cleanup *cleanup = make_cleanup (xfree, data);
463 puts_filtered (data);
464 do_cleanups (cleanup);
465 }
466 else
467 warning (_("unable to open /proc file '%s'"), filename);
468 }
469 if (stat_f)
470 {
471 xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
472 data = target_fileio_read_stralloc (filename);
473 if (data)
474 {
475 struct cleanup *cleanup = make_cleanup (xfree, data);
476 const char *p = data;
477
478 printf_filtered (_("Process: %s\n"),
479 pulongest (strtoulst (p, &p, 10)));
480
481 p = skip_spaces_const (p);
482 if (*p == '(')
483 {
484 /* ps command also relies on no trailing fields
485 ever contain ')'. */
486 const char *ep = strrchr (p, ')');
487 if (ep != NULL)
488 {
489 printf_filtered ("Exec file: %.*s\n",
490 (int) (ep - p - 1), p + 1);
491 p = ep + 1;
492 }
493 }
494
495 p = skip_spaces_const (p);
496 if (*p)
497 printf_filtered (_("State: %c\n"), *p++);
498
499 if (*p)
500 printf_filtered (_("Parent process: %s\n"),
501 pulongest (strtoulst (p, &p, 10)));
502 if (*p)
503 printf_filtered (_("Process group: %s\n"),
504 pulongest (strtoulst (p, &p, 10)));
505 if (*p)
506 printf_filtered (_("Session id: %s\n"),
507 pulongest (strtoulst (p, &p, 10)));
508 if (*p)
509 printf_filtered (_("TTY: %s\n"),
510 pulongest (strtoulst (p, &p, 10)));
511 if (*p)
512 printf_filtered (_("TTY owner process group: %s\n"),
513 pulongest (strtoulst (p, &p, 10)));
514
515 if (*p)
516 printf_filtered (_("Flags: %s\n"),
517 hex_string (strtoulst (p, &p, 10)));
518 if (*p)
519 printf_filtered (_("Minor faults (no memory page): %s\n"),
520 pulongest (strtoulst (p, &p, 10)));
521 if (*p)
522 printf_filtered (_("Minor faults, children: %s\n"),
523 pulongest (strtoulst (p, &p, 10)));
524 if (*p)
525 printf_filtered (_("Major faults (memory page faults): %s\n"),
526 pulongest (strtoulst (p, &p, 10)));
527 if (*p)
528 printf_filtered (_("Major faults, children: %s\n"),
529 pulongest (strtoulst (p, &p, 10)));
530 if (*p)
531 printf_filtered (_("utime: %s\n"),
532 pulongest (strtoulst (p, &p, 10)));
533 if (*p)
534 printf_filtered (_("stime: %s\n"),
535 pulongest (strtoulst (p, &p, 10)));
536 if (*p)
537 printf_filtered (_("utime, children: %s\n"),
538 pulongest (strtoulst (p, &p, 10)));
539 if (*p)
540 printf_filtered (_("stime, children: %s\n"),
541 pulongest (strtoulst (p, &p, 10)));
542 if (*p)
543 printf_filtered (_("jiffies remaining in current "
544 "time slice: %s\n"),
545 pulongest (strtoulst (p, &p, 10)));
546 if (*p)
547 printf_filtered (_("'nice' value: %s\n"),
548 pulongest (strtoulst (p, &p, 10)));
549 if (*p)
550 printf_filtered (_("jiffies until next timeout: %s\n"),
551 pulongest (strtoulst (p, &p, 10)));
552 if (*p)
553 printf_filtered (_("jiffies until next SIGALRM: %s\n"),
554 pulongest (strtoulst (p, &p, 10)));
555 if (*p)
556 printf_filtered (_("start time (jiffies since "
557 "system boot): %s\n"),
558 pulongest (strtoulst (p, &p, 10)));
559 if (*p)
560 printf_filtered (_("Virtual memory size: %s\n"),
561 pulongest (strtoulst (p, &p, 10)));
562 if (*p)
563 printf_filtered (_("Resident set size: %s\n"),
564 pulongest (strtoulst (p, &p, 10)));
565 if (*p)
566 printf_filtered (_("rlim: %s\n"),
567 pulongest (strtoulst (p, &p, 10)));
568 if (*p)
569 printf_filtered (_("Start of text: %s\n"),
570 hex_string (strtoulst (p, &p, 10)));
571 if (*p)
572 printf_filtered (_("End of text: %s\n"),
573 hex_string (strtoulst (p, &p, 10)));
574 if (*p)
575 printf_filtered (_("Start of stack: %s\n"),
576 hex_string (strtoulst (p, &p, 10)));
577 #if 0 /* Don't know how architecture-dependent the rest is...
578 Anyway the signal bitmap info is available from "status". */
579 if (*p)
580 printf_filtered (_("Kernel stack pointer: %s\n"),
581 hex_string (strtoulst (p, &p, 10)));
582 if (*p)
583 printf_filtered (_("Kernel instr pointer: %s\n"),
584 hex_string (strtoulst (p, &p, 10)));
585 if (*p)
586 printf_filtered (_("Pending signals bitmap: %s\n"),
587 hex_string (strtoulst (p, &p, 10)));
588 if (*p)
589 printf_filtered (_("Blocked signals bitmap: %s\n"),
590 hex_string (strtoulst (p, &p, 10)));
591 if (*p)
592 printf_filtered (_("Ignored signals bitmap: %s\n"),
593 hex_string (strtoulst (p, &p, 10)));
594 if (*p)
595 printf_filtered (_("Catched signals bitmap: %s\n"),
596 hex_string (strtoulst (p, &p, 10)));
597 if (*p)
598 printf_filtered (_("wchan (system call): %s\n"),
599 hex_string (strtoulst (p, &p, 10)));
600 #endif
601 do_cleanups (cleanup);
602 }
603 else
604 warning (_("unable to open /proc file '%s'"), filename);
605 }
606 }
607
608 /* Implement "info proc mappings" for a corefile. */
609
610 static void
611 linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args)
612 {
613 asection *section;
614 ULONGEST count, page_size;
615 unsigned char *descdata, *filenames, *descend, *contents;
616 size_t note_size;
617 unsigned int addr_size_bits, addr_size;
618 struct cleanup *cleanup;
619 struct gdbarch *core_gdbarch = gdbarch_from_bfd (core_bfd);
620 /* We assume this for reading 64-bit core files. */
621 gdb_static_assert (sizeof (ULONGEST) >= 8);
622
623 section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file");
624 if (section == NULL)
625 {
626 warning (_("unable to find mappings in core file"));
627 return;
628 }
629
630 addr_size_bits = gdbarch_addr_bit (core_gdbarch);
631 addr_size = addr_size_bits / 8;
632 note_size = bfd_get_section_size (section);
633
634 if (note_size < 2 * addr_size)
635 error (_("malformed core note - too short for header"));
636
637 contents = xmalloc (note_size);
638 cleanup = make_cleanup (xfree, contents);
639 if (!bfd_get_section_contents (core_bfd, section, contents, 0, note_size))
640 error (_("could not get core note contents"));
641
642 descdata = contents;
643 descend = descdata + note_size;
644
645 if (descdata[note_size - 1] != '\0')
646 error (_("malformed note - does not end with \\0"));
647
648 count = bfd_get (addr_size_bits, core_bfd, descdata);
649 descdata += addr_size;
650
651 page_size = bfd_get (addr_size_bits, core_bfd, descdata);
652 descdata += addr_size;
653
654 if (note_size < 2 * addr_size + count * 3 * addr_size)
655 error (_("malformed note - too short for supplied file count"));
656
657 printf_filtered (_("Mapped address spaces:\n\n"));
658 if (gdbarch_addr_bit (gdbarch) == 32)
659 {
660 printf_filtered ("\t%10s %10s %10s %10s %s\n",
661 "Start Addr",
662 " End Addr",
663 " Size", " Offset", "objfile");
664 }
665 else
666 {
667 printf_filtered (" %18s %18s %10s %10s %s\n",
668 "Start Addr",
669 " End Addr",
670 " Size", " Offset", "objfile");
671 }
672
673 filenames = descdata + count * 3 * addr_size;
674 while (--count > 0)
675 {
676 ULONGEST start, end, file_ofs;
677
678 if (filenames == descend)
679 error (_("malformed note - filenames end too early"));
680
681 start = bfd_get (addr_size_bits, core_bfd, descdata);
682 descdata += addr_size;
683 end = bfd_get (addr_size_bits, core_bfd, descdata);
684 descdata += addr_size;
685 file_ofs = bfd_get (addr_size_bits, core_bfd, descdata);
686 descdata += addr_size;
687
688 file_ofs *= page_size;
689
690 if (gdbarch_addr_bit (gdbarch) == 32)
691 printf_filtered ("\t%10s %10s %10s %10s %s\n",
692 paddress (gdbarch, start),
693 paddress (gdbarch, end),
694 hex_string (end - start),
695 hex_string (file_ofs),
696 filenames);
697 else
698 printf_filtered (" %18s %18s %10s %10s %s\n",
699 paddress (gdbarch, start),
700 paddress (gdbarch, end),
701 hex_string (end - start),
702 hex_string (file_ofs),
703 filenames);
704
705 filenames += 1 + strlen ((char *) filenames);
706 }
707
708 do_cleanups (cleanup);
709 }
710
711 /* Implement "info proc" for a corefile. */
712
713 static void
714 linux_core_info_proc (struct gdbarch *gdbarch, const char *args,
715 enum info_proc_what what)
716 {
717 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
718 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
719
720 if (exe_f)
721 {
722 const char *exe;
723
724 exe = bfd_core_file_failing_command (core_bfd);
725 if (exe != NULL)
726 printf_filtered ("exe = '%s'\n", exe);
727 else
728 warning (_("unable to find command name in core file"));
729 }
730
731 if (mappings_f)
732 linux_core_info_proc_mappings (gdbarch, args);
733
734 if (!exe_f && !mappings_f)
735 error (_("unable to handle request"));
736 }
737
738 typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size,
739 ULONGEST offset, ULONGEST inode,
740 int read, int write,
741 int exec, int modified,
742 const char *filename,
743 void *data);
744
745 /* List memory regions in the inferior for a corefile. */
746
747 static int
748 linux_find_memory_regions_full (struct gdbarch *gdbarch,
749 linux_find_memory_region_ftype *func,
750 void *obfd)
751 {
752 char mapsfilename[100];
753 char *data;
754
755 /* We need to know the real target PID to access /proc. */
756 if (current_inferior ()->fake_pid_p)
757 return 1;
758
759 xsnprintf (mapsfilename, sizeof mapsfilename,
760 "/proc/%d/smaps", current_inferior ()->pid);
761 data = target_fileio_read_stralloc (mapsfilename);
762 if (data == NULL)
763 {
764 /* Older Linux kernels did not support /proc/PID/smaps. */
765 xsnprintf (mapsfilename, sizeof mapsfilename,
766 "/proc/%d/maps", current_inferior ()->pid);
767 data = target_fileio_read_stralloc (mapsfilename);
768 }
769 if (data)
770 {
771 struct cleanup *cleanup = make_cleanup (xfree, data);
772 char *line;
773
774 line = strtok (data, "\n");
775 while (line)
776 {
777 ULONGEST addr, endaddr, offset, inode;
778 const char *permissions, *device, *filename;
779 size_t permissions_len, device_len;
780 int read, write, exec;
781 int modified = 0, has_anonymous = 0;
782
783 read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
784 &offset, &device, &device_len, &inode, &filename);
785
786 /* Decode permissions. */
787 read = (memchr (permissions, 'r', permissions_len) != 0);
788 write = (memchr (permissions, 'w', permissions_len) != 0);
789 exec = (memchr (permissions, 'x', permissions_len) != 0);
790
791 /* Try to detect if region was modified by parsing smaps counters. */
792 for (line = strtok (NULL, "\n");
793 line && line[0] >= 'A' && line[0] <= 'Z';
794 line = strtok (NULL, "\n"))
795 {
796 char keyword[64 + 1];
797
798 if (sscanf (line, "%64s", keyword) != 1)
799 {
800 warning (_("Error parsing {s,}maps file '%s'"), mapsfilename);
801 break;
802 }
803 if (strcmp (keyword, "Anonymous:") == 0)
804 has_anonymous = 1;
805 if (strcmp (keyword, "Shared_Dirty:") == 0
806 || strcmp (keyword, "Private_Dirty:") == 0
807 || strcmp (keyword, "Swap:") == 0
808 || strcmp (keyword, "Anonymous:") == 0)
809 {
810 unsigned long number;
811
812 if (sscanf (line, "%*s%lu", &number) != 1)
813 {
814 warning (_("Error parsing {s,}maps file '%s' number"),
815 mapsfilename);
816 break;
817 }
818 if (number != 0)
819 modified = 1;
820 }
821 }
822
823 /* Older Linux kernels did not support the "Anonymous:" counter.
824 If it is missing, we can't be sure - dump all the pages. */
825 if (!has_anonymous)
826 modified = 1;
827
828 /* Invoke the callback function to create the corefile segment. */
829 func (addr, endaddr - addr, offset, inode,
830 read, write, exec, modified, filename, obfd);
831 }
832
833 do_cleanups (cleanup);
834 return 0;
835 }
836
837 return 1;
838 }
839
840 /* A structure for passing information through
841 linux_find_memory_regions_full. */
842
843 struct linux_find_memory_regions_data
844 {
845 /* The original callback. */
846
847 find_memory_region_ftype func;
848
849 /* The original datum. */
850
851 void *obfd;
852 };
853
854 /* A callback for linux_find_memory_regions that converts between the
855 "full"-style callback and find_memory_region_ftype. */
856
857 static int
858 linux_find_memory_regions_thunk (ULONGEST vaddr, ULONGEST size,
859 ULONGEST offset, ULONGEST inode,
860 int read, int write, int exec, int modified,
861 const char *filename, void *arg)
862 {
863 struct linux_find_memory_regions_data *data = arg;
864
865 return data->func (vaddr, size, read, write, exec, modified, data->obfd);
866 }
867
868 /* A variant of linux_find_memory_regions_full that is suitable as the
869 gdbarch find_memory_regions method. */
870
871 static int
872 linux_find_memory_regions (struct gdbarch *gdbarch,
873 find_memory_region_ftype func, void *obfd)
874 {
875 struct linux_find_memory_regions_data data;
876
877 data.func = func;
878 data.obfd = obfd;
879
880 return linux_find_memory_regions_full (gdbarch,
881 linux_find_memory_regions_thunk,
882 &data);
883 }
884
885 /* Determine which signal stopped execution. */
886
887 static int
888 find_signalled_thread (struct thread_info *info, void *data)
889 {
890 if (info->suspend.stop_signal != GDB_SIGNAL_0
891 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
892 return 1;
893
894 return 0;
895 }
896
897 static enum gdb_signal
898 find_stop_signal (void)
899 {
900 struct thread_info *info =
901 iterate_over_threads (find_signalled_thread, NULL);
902
903 if (info)
904 return info->suspend.stop_signal;
905 else
906 return GDB_SIGNAL_0;
907 }
908
909 /* Generate corefile notes for SPU contexts. */
910
911 static char *
912 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
913 {
914 static const char *spu_files[] =
915 {
916 "object-id",
917 "mem",
918 "regs",
919 "fpcr",
920 "lslr",
921 "decr",
922 "decr_status",
923 "signal1",
924 "signal1_type",
925 "signal2",
926 "signal2_type",
927 "event_mask",
928 "event_status",
929 "mbox_info",
930 "ibox_info",
931 "wbox_info",
932 "dma_info",
933 "proxydma_info",
934 };
935
936 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
937 gdb_byte *spu_ids;
938 LONGEST i, j, size;
939
940 /* Determine list of SPU ids. */
941 size = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
942 NULL, &spu_ids);
943
944 /* Generate corefile notes for each SPU file. */
945 for (i = 0; i < size; i += 4)
946 {
947 int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order);
948
949 for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
950 {
951 char annex[32], note_name[32];
952 gdb_byte *spu_data;
953 LONGEST spu_len;
954
955 xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
956 spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
957 annex, &spu_data);
958 if (spu_len > 0)
959 {
960 xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
961 note_data = elfcore_write_note (obfd, note_data, note_size,
962 note_name, NT_SPU,
963 spu_data, spu_len);
964 xfree (spu_data);
965
966 if (!note_data)
967 {
968 xfree (spu_ids);
969 return NULL;
970 }
971 }
972 }
973 }
974
975 if (size > 0)
976 xfree (spu_ids);
977
978 return note_data;
979 }
980
981 /* This is used to pass information from
982 linux_make_mappings_corefile_notes through
983 linux_find_memory_regions_full. */
984
985 struct linux_make_mappings_data
986 {
987 /* Number of files mapped. */
988 ULONGEST file_count;
989
990 /* The obstack for the main part of the data. */
991 struct obstack *data_obstack;
992
993 /* The filename obstack. */
994 struct obstack *filename_obstack;
995
996 /* The architecture's "long" type. */
997 struct type *long_type;
998 };
999
1000 static linux_find_memory_region_ftype linux_make_mappings_callback;
1001
1002 /* A callback for linux_find_memory_regions_full that updates the
1003 mappings data for linux_make_mappings_corefile_notes. */
1004
1005 static int
1006 linux_make_mappings_callback (ULONGEST vaddr, ULONGEST size,
1007 ULONGEST offset, ULONGEST inode,
1008 int read, int write, int exec, int modified,
1009 const char *filename, void *data)
1010 {
1011 struct linux_make_mappings_data *map_data = data;
1012 gdb_byte buf[sizeof (ULONGEST)];
1013
1014 if (*filename == '\0' || inode == 0)
1015 return 0;
1016
1017 ++map_data->file_count;
1018
1019 pack_long (buf, map_data->long_type, vaddr);
1020 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1021 pack_long (buf, map_data->long_type, vaddr + size);
1022 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1023 pack_long (buf, map_data->long_type, offset);
1024 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1025
1026 obstack_grow_str0 (map_data->filename_obstack, filename);
1027
1028 return 0;
1029 }
1030
1031 /* Write the file mapping data to the core file, if possible. OBFD is
1032 the output BFD. NOTE_DATA is the current note data, and NOTE_SIZE
1033 is a pointer to the note size. Returns the new NOTE_DATA and
1034 updates NOTE_SIZE. */
1035
1036 static char *
1037 linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
1038 char *note_data, int *note_size)
1039 {
1040 struct cleanup *cleanup;
1041 struct obstack data_obstack, filename_obstack;
1042 struct linux_make_mappings_data mapping_data;
1043 struct type *long_type
1044 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 0, "long");
1045 gdb_byte buf[sizeof (ULONGEST)];
1046
1047 obstack_init (&data_obstack);
1048 cleanup = make_cleanup_obstack_free (&data_obstack);
1049 obstack_init (&filename_obstack);
1050 make_cleanup_obstack_free (&filename_obstack);
1051
1052 mapping_data.file_count = 0;
1053 mapping_data.data_obstack = &data_obstack;
1054 mapping_data.filename_obstack = &filename_obstack;
1055 mapping_data.long_type = long_type;
1056
1057 /* Reserve space for the count. */
1058 obstack_blank (&data_obstack, TYPE_LENGTH (long_type));
1059 /* We always write the page size as 1 since we have no good way to
1060 determine the correct value. */
1061 pack_long (buf, long_type, 1);
1062 obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type));
1063
1064 linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback,
1065 &mapping_data);
1066
1067 if (mapping_data.file_count != 0)
1068 {
1069 /* Write the count to the obstack. */
1070 pack_long ((gdb_byte *) obstack_base (&data_obstack),
1071 long_type, mapping_data.file_count);
1072
1073 /* Copy the filenames to the data obstack. */
1074 obstack_grow (&data_obstack, obstack_base (&filename_obstack),
1075 obstack_object_size (&filename_obstack));
1076
1077 note_data = elfcore_write_note (obfd, note_data, note_size,
1078 "CORE", NT_FILE,
1079 obstack_base (&data_obstack),
1080 obstack_object_size (&data_obstack));
1081 }
1082
1083 do_cleanups (cleanup);
1084 return note_data;
1085 }
1086
1087 /* Structure for passing information from
1088 linux_collect_thread_registers via an iterator to
1089 linux_collect_regset_section_cb. */
1090
1091 struct linux_collect_regset_section_cb_data
1092 {
1093 struct gdbarch *gdbarch;
1094 const struct regcache *regcache;
1095 bfd *obfd;
1096 char *note_data;
1097 int *note_size;
1098 unsigned long lwp;
1099 enum gdb_signal stop_signal;
1100 int abort_iteration;
1101 };
1102
1103 /* Callback for iterate_over_regset_sections that records a single
1104 regset in the corefile note section. */
1105
1106 static void
1107 linux_collect_regset_section_cb (const char *sect_name, int size,
1108 const char *human_name, void *cb_data)
1109 {
1110 const struct regset *regset;
1111 char *buf;
1112 struct linux_collect_regset_section_cb_data *data = cb_data;
1113
1114 if (data->abort_iteration)
1115 return;
1116
1117 regset = gdbarch_regset_from_core_section (data->gdbarch, sect_name, size);
1118 gdb_assert (regset && regset->collect_regset);
1119
1120 buf = xmalloc (size);
1121 regset->collect_regset (regset, data->regcache, -1, buf, size);
1122
1123 /* PRSTATUS still needs to be treated specially. */
1124 if (strcmp (sect_name, ".reg") == 0)
1125 data->note_data = (char *) elfcore_write_prstatus
1126 (data->obfd, data->note_data, data->note_size, data->lwp,
1127 gdb_signal_to_host (data->stop_signal), buf);
1128 else
1129 data->note_data = (char *) elfcore_write_register_note
1130 (data->obfd, data->note_data, data->note_size,
1131 sect_name, buf, size);
1132 xfree (buf);
1133
1134 if (data->note_data == NULL)
1135 data->abort_iteration = 1;
1136 }
1137
1138 /* Records the thread's register state for the corefile note
1139 section. */
1140
1141 static char *
1142 linux_collect_thread_registers (const struct regcache *regcache,
1143 ptid_t ptid, bfd *obfd,
1144 char *note_data, int *note_size,
1145 enum gdb_signal stop_signal)
1146 {
1147 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1148 struct linux_collect_regset_section_cb_data data;
1149
1150 data.gdbarch = gdbarch;
1151 data.regcache = regcache;
1152 data.obfd = obfd;
1153 data.note_data = note_data;
1154 data.note_size = note_size;
1155 data.stop_signal = stop_signal;
1156 data.abort_iteration = 0;
1157
1158 /* For remote targets the LWP may not be available, so use the TID. */
1159 data.lwp = ptid_get_lwp (ptid);
1160 if (!data.lwp)
1161 data.lwp = ptid_get_tid (ptid);
1162
1163 gdbarch_iterate_over_regset_sections (gdbarch,
1164 linux_collect_regset_section_cb,
1165 &data, regcache);
1166 return data.note_data;
1167 }
1168
1169 /* Fetch the siginfo data for the current thread, if it exists. If
1170 there is no data, or we could not read it, return NULL. Otherwise,
1171 return a newly malloc'd buffer holding the data and fill in *SIZE
1172 with the size of the data. The caller is responsible for freeing
1173 the data. */
1174
1175 static gdb_byte *
1176 linux_get_siginfo_data (struct gdbarch *gdbarch, LONGEST *size)
1177 {
1178 struct type *siginfo_type;
1179 gdb_byte *buf;
1180 LONGEST bytes_read;
1181 struct cleanup *cleanups;
1182
1183 if (!gdbarch_get_siginfo_type_p (gdbarch))
1184 return NULL;
1185
1186 siginfo_type = gdbarch_get_siginfo_type (gdbarch);
1187
1188 buf = xmalloc (TYPE_LENGTH (siginfo_type));
1189 cleanups = make_cleanup (xfree, buf);
1190
1191 bytes_read = target_read (&current_target, TARGET_OBJECT_SIGNAL_INFO, NULL,
1192 buf, 0, TYPE_LENGTH (siginfo_type));
1193 if (bytes_read == TYPE_LENGTH (siginfo_type))
1194 {
1195 discard_cleanups (cleanups);
1196 *size = bytes_read;
1197 }
1198 else
1199 {
1200 do_cleanups (cleanups);
1201 buf = NULL;
1202 }
1203
1204 return buf;
1205 }
1206
1207 struct linux_corefile_thread_data
1208 {
1209 struct gdbarch *gdbarch;
1210 int pid;
1211 bfd *obfd;
1212 char *note_data;
1213 int *note_size;
1214 enum gdb_signal stop_signal;
1215 linux_collect_thread_registers_ftype collect;
1216 };
1217
1218 /* Called by gdbthread.c once per thread. Records the thread's
1219 register state for the corefile note section. */
1220
1221 static int
1222 linux_corefile_thread_callback (struct thread_info *info, void *data)
1223 {
1224 struct linux_corefile_thread_data *args = data;
1225
1226 /* It can be current thread
1227 which cannot be removed by update_thread_list. */
1228 if (info->state == THREAD_EXITED)
1229 return 0;
1230
1231 if (ptid_get_pid (info->ptid) == args->pid)
1232 {
1233 struct cleanup *old_chain;
1234 struct regcache *regcache;
1235 gdb_byte *siginfo_data;
1236 LONGEST siginfo_size = 0;
1237
1238 regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
1239
1240 old_chain = save_inferior_ptid ();
1241 inferior_ptid = info->ptid;
1242 target_fetch_registers (regcache, -1);
1243 siginfo_data = linux_get_siginfo_data (args->gdbarch, &siginfo_size);
1244 do_cleanups (old_chain);
1245
1246 old_chain = make_cleanup (xfree, siginfo_data);
1247
1248 args->note_data = args->collect (regcache, info->ptid, args->obfd,
1249 args->note_data, args->note_size,
1250 args->stop_signal);
1251
1252 /* Don't return anything if we got no register information above,
1253 such a core file is useless. */
1254 if (args->note_data != NULL)
1255 if (siginfo_data != NULL)
1256 args->note_data = elfcore_write_note (args->obfd,
1257 args->note_data,
1258 args->note_size,
1259 "CORE", NT_SIGINFO,
1260 siginfo_data, siginfo_size);
1261
1262 do_cleanups (old_chain);
1263 }
1264
1265 return !args->note_data;
1266 }
1267
1268 /* Fill the PRPSINFO structure with information about the process being
1269 debugged. Returns 1 in case of success, 0 for failures. Please note that
1270 even if the structure cannot be entirely filled (e.g., GDB was unable to
1271 gather information about the process UID/GID), this function will still
1272 return 1 since some information was already recorded. It will only return
1273 0 iff nothing can be gathered. */
1274
1275 static int
1276 linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
1277 {
1278 /* The filename which we will use to obtain some info about the process.
1279 We will basically use this to store the `/proc/PID/FILENAME' file. */
1280 char filename[100];
1281 /* The full name of the program which generated the corefile. */
1282 char *fname;
1283 /* The basename of the executable. */
1284 const char *basename;
1285 /* The arguments of the program. */
1286 char *psargs;
1287 char *infargs;
1288 /* The contents of `/proc/PID/stat' and `/proc/PID/status' files. */
1289 char *proc_stat, *proc_status;
1290 /* Temporary buffer. */
1291 char *tmpstr;
1292 /* The valid states of a process, according to the Linux kernel. */
1293 const char valid_states[] = "RSDTZW";
1294 /* The program state. */
1295 const char *prog_state;
1296 /* The state of the process. */
1297 char pr_sname;
1298 /* The PID of the program which generated the corefile. */
1299 pid_t pid;
1300 /* Process flags. */
1301 unsigned int pr_flag;
1302 /* Process nice value. */
1303 long pr_nice;
1304 /* The number of fields read by `sscanf'. */
1305 int n_fields = 0;
1306 /* Cleanups. */
1307 struct cleanup *c;
1308 int i;
1309
1310 gdb_assert (p != NULL);
1311
1312 /* Obtaining PID and filename. */
1313 pid = ptid_get_pid (inferior_ptid);
1314 xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
1315 fname = target_fileio_read_stralloc (filename);
1316
1317 if (fname == NULL || *fname == '\0')
1318 {
1319 /* No program name was read, so we won't be able to retrieve more
1320 information about the process. */
1321 xfree (fname);
1322 return 0;
1323 }
1324
1325 c = make_cleanup (xfree, fname);
1326 memset (p, 0, sizeof (*p));
1327
1328 /* Defining the PID. */
1329 p->pr_pid = pid;
1330
1331 /* Copying the program name. Only the basename matters. */
1332 basename = lbasename (fname);
1333 strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
1334 p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
1335
1336 infargs = get_inferior_args ();
1337
1338 psargs = xstrdup (fname);
1339 if (infargs != NULL)
1340 psargs = reconcat (psargs, psargs, " ", infargs, NULL);
1341
1342 make_cleanup (xfree, psargs);
1343
1344 strncpy (p->pr_psargs, psargs, sizeof (p->pr_psargs));
1345 p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
1346
1347 xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
1348 proc_stat = target_fileio_read_stralloc (filename);
1349 make_cleanup (xfree, proc_stat);
1350
1351 if (proc_stat == NULL || *proc_stat == '\0')
1352 {
1353 /* Despite being unable to read more information about the
1354 process, we return 1 here because at least we have its
1355 command line, PID and arguments. */
1356 do_cleanups (c);
1357 return 1;
1358 }
1359
1360 /* Ok, we have the stats. It's time to do a little parsing of the
1361 contents of the buffer, so that we end up reading what we want.
1362
1363 The following parsing mechanism is strongly based on the
1364 information generated by the `fs/proc/array.c' file, present in
1365 the Linux kernel tree. More details about how the information is
1366 displayed can be obtained by seeing the manpage of proc(5),
1367 specifically under the entry of `/proc/[pid]/stat'. */
1368
1369 /* Getting rid of the PID, since we already have it. */
1370 while (isdigit (*proc_stat))
1371 ++proc_stat;
1372
1373 proc_stat = skip_spaces (proc_stat);
1374
1375 /* ps command also relies on no trailing fields ever contain ')'. */
1376 proc_stat = strrchr (proc_stat, ')');
1377 if (proc_stat == NULL)
1378 {
1379 do_cleanups (c);
1380 return 1;
1381 }
1382 proc_stat++;
1383
1384 proc_stat = skip_spaces (proc_stat);
1385
1386 n_fields = sscanf (proc_stat,
1387 "%c" /* Process state. */
1388 "%d%d%d" /* Parent PID, group ID, session ID. */
1389 "%*d%*d" /* tty_nr, tpgid (not used). */
1390 "%u" /* Flags. */
1391 "%*s%*s%*s%*s" /* minflt, cminflt, majflt,
1392 cmajflt (not used). */
1393 "%*s%*s%*s%*s" /* utime, stime, cutime,
1394 cstime (not used). */
1395 "%*s" /* Priority (not used). */
1396 "%ld", /* Nice. */
1397 &pr_sname,
1398 &p->pr_ppid, &p->pr_pgrp, &p->pr_sid,
1399 &pr_flag,
1400 &pr_nice);
1401
1402 if (n_fields != 6)
1403 {
1404 /* Again, we couldn't read the complementary information about
1405 the process state. However, we already have minimal
1406 information, so we just return 1 here. */
1407 do_cleanups (c);
1408 return 1;
1409 }
1410
1411 /* Filling the structure fields. */
1412 prog_state = strchr (valid_states, pr_sname);
1413 if (prog_state != NULL)
1414 p->pr_state = prog_state - valid_states;
1415 else
1416 {
1417 /* Zero means "Running". */
1418 p->pr_state = 0;
1419 }
1420
1421 p->pr_sname = p->pr_state > 5 ? '.' : pr_sname;
1422 p->pr_zomb = p->pr_sname == 'Z';
1423 p->pr_nice = pr_nice;
1424 p->pr_flag = pr_flag;
1425
1426 /* Finally, obtaining the UID and GID. For that, we read and parse the
1427 contents of the `/proc/PID/status' file. */
1428 xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
1429 proc_status = target_fileio_read_stralloc (filename);
1430 make_cleanup (xfree, proc_status);
1431
1432 if (proc_status == NULL || *proc_status == '\0')
1433 {
1434 /* Returning 1 since we already have a bunch of information. */
1435 do_cleanups (c);
1436 return 1;
1437 }
1438
1439 /* Extracting the UID. */
1440 tmpstr = strstr (proc_status, "Uid:");
1441 if (tmpstr != NULL)
1442 {
1443 /* Advancing the pointer to the beginning of the UID. */
1444 tmpstr += sizeof ("Uid:");
1445 while (*tmpstr != '\0' && !isdigit (*tmpstr))
1446 ++tmpstr;
1447
1448 if (isdigit (*tmpstr))
1449 p->pr_uid = strtol (tmpstr, &tmpstr, 10);
1450 }
1451
1452 /* Extracting the GID. */
1453 tmpstr = strstr (proc_status, "Gid:");
1454 if (tmpstr != NULL)
1455 {
1456 /* Advancing the pointer to the beginning of the GID. */
1457 tmpstr += sizeof ("Gid:");
1458 while (*tmpstr != '\0' && !isdigit (*tmpstr))
1459 ++tmpstr;
1460
1461 if (isdigit (*tmpstr))
1462 p->pr_gid = strtol (tmpstr, &tmpstr, 10);
1463 }
1464
1465 do_cleanups (c);
1466
1467 return 1;
1468 }
1469
1470 /* Fills the "to_make_corefile_note" target vector. Builds the note
1471 section for a corefile, and returns it in a malloc buffer. */
1472
1473 char *
1474 linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size,
1475 linux_collect_thread_registers_ftype collect)
1476 {
1477 struct linux_corefile_thread_data thread_args;
1478 struct elf_internal_linux_prpsinfo prpsinfo;
1479 char *note_data = NULL;
1480 gdb_byte *auxv;
1481 int auxv_len;
1482 volatile struct gdb_exception e;
1483
1484 if (linux_fill_prpsinfo (&prpsinfo))
1485 {
1486 if (gdbarch_elfcore_write_linux_prpsinfo_p (gdbarch))
1487 {
1488 note_data = gdbarch_elfcore_write_linux_prpsinfo (gdbarch, obfd,
1489 note_data, note_size,
1490 &prpsinfo);
1491 }
1492 else
1493 {
1494 if (gdbarch_ptr_bit (gdbarch) == 64)
1495 note_data = elfcore_write_linux_prpsinfo64 (obfd,
1496 note_data, note_size,
1497 &prpsinfo);
1498 else
1499 note_data = elfcore_write_linux_prpsinfo32 (obfd,
1500 note_data, note_size,
1501 &prpsinfo);
1502 }
1503 }
1504
1505 /* Thread register information. */
1506 TRY_CATCH (e, RETURN_MASK_ERROR)
1507 {
1508 update_thread_list ();
1509 }
1510 if (e.reason < 0)
1511 exception_print (gdb_stderr, e);
1512 thread_args.gdbarch = gdbarch;
1513 thread_args.pid = ptid_get_pid (inferior_ptid);
1514 thread_args.obfd = obfd;
1515 thread_args.note_data = note_data;
1516 thread_args.note_size = note_size;
1517 thread_args.stop_signal = find_stop_signal ();
1518 thread_args.collect = collect;
1519 iterate_over_threads (linux_corefile_thread_callback, &thread_args);
1520 note_data = thread_args.note_data;
1521 if (!note_data)
1522 return NULL;
1523
1524 /* Auxillary vector. */
1525 auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
1526 NULL, &auxv);
1527 if (auxv_len > 0)
1528 {
1529 note_data = elfcore_write_note (obfd, note_data, note_size,
1530 "CORE", NT_AUXV, auxv, auxv_len);
1531 xfree (auxv);
1532
1533 if (!note_data)
1534 return NULL;
1535 }
1536
1537 /* SPU information. */
1538 note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
1539 if (!note_data)
1540 return NULL;
1541
1542 /* File mappings. */
1543 note_data = linux_make_mappings_corefile_notes (gdbarch, obfd,
1544 note_data, note_size);
1545
1546 return note_data;
1547 }
1548
1549 static char *
1550 linux_make_corefile_notes_1 (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
1551 {
1552 /* FIXME: uweigand/2011-10-06: Once all GNU/Linux architectures have been
1553 converted to gdbarch_core_regset_sections, we no longer need to fall back
1554 to the target method at this point. */
1555
1556 if (!gdbarch_iterate_over_regset_sections_p (gdbarch))
1557 return target_make_corefile_notes (obfd, note_size);
1558 else
1559 return linux_make_corefile_notes (gdbarch, obfd, note_size,
1560 linux_collect_thread_registers);
1561 }
1562
1563 /* Implementation of `gdbarch_gdb_signal_from_target', as defined in
1564 gdbarch.h. This function is not static because it is exported to
1565 other -tdep files. */
1566
1567 enum gdb_signal
1568 linux_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
1569 {
1570 switch (signal)
1571 {
1572 case 0:
1573 return GDB_SIGNAL_0;
1574
1575 case LINUX_SIGHUP:
1576 return GDB_SIGNAL_HUP;
1577
1578 case LINUX_SIGINT:
1579 return GDB_SIGNAL_INT;
1580
1581 case LINUX_SIGQUIT:
1582 return GDB_SIGNAL_QUIT;
1583
1584 case LINUX_SIGILL:
1585 return GDB_SIGNAL_ILL;
1586
1587 case LINUX_SIGTRAP:
1588 return GDB_SIGNAL_TRAP;
1589
1590 case LINUX_SIGABRT:
1591 return GDB_SIGNAL_ABRT;
1592
1593 case LINUX_SIGBUS:
1594 return GDB_SIGNAL_BUS;
1595
1596 case LINUX_SIGFPE:
1597 return GDB_SIGNAL_FPE;
1598
1599 case LINUX_SIGKILL:
1600 return GDB_SIGNAL_KILL;
1601
1602 case LINUX_SIGUSR1:
1603 return GDB_SIGNAL_USR1;
1604
1605 case LINUX_SIGSEGV:
1606 return GDB_SIGNAL_SEGV;
1607
1608 case LINUX_SIGUSR2:
1609 return GDB_SIGNAL_USR2;
1610
1611 case LINUX_SIGPIPE:
1612 return GDB_SIGNAL_PIPE;
1613
1614 case LINUX_SIGALRM:
1615 return GDB_SIGNAL_ALRM;
1616
1617 case LINUX_SIGTERM:
1618 return GDB_SIGNAL_TERM;
1619
1620 case LINUX_SIGCHLD:
1621 return GDB_SIGNAL_CHLD;
1622
1623 case LINUX_SIGCONT:
1624 return GDB_SIGNAL_CONT;
1625
1626 case LINUX_SIGSTOP:
1627 return GDB_SIGNAL_STOP;
1628
1629 case LINUX_SIGTSTP:
1630 return GDB_SIGNAL_TSTP;
1631
1632 case LINUX_SIGTTIN:
1633 return GDB_SIGNAL_TTIN;
1634
1635 case LINUX_SIGTTOU:
1636 return GDB_SIGNAL_TTOU;
1637
1638 case LINUX_SIGURG:
1639 return GDB_SIGNAL_URG;
1640
1641 case LINUX_SIGXCPU:
1642 return GDB_SIGNAL_XCPU;
1643
1644 case LINUX_SIGXFSZ:
1645 return GDB_SIGNAL_XFSZ;
1646
1647 case LINUX_SIGVTALRM:
1648 return GDB_SIGNAL_VTALRM;
1649
1650 case LINUX_SIGPROF:
1651 return GDB_SIGNAL_PROF;
1652
1653 case LINUX_SIGWINCH:
1654 return GDB_SIGNAL_WINCH;
1655
1656 /* No way to differentiate between SIGIO and SIGPOLL.
1657 Therefore, we just handle the first one. */
1658 case LINUX_SIGIO:
1659 return GDB_SIGNAL_IO;
1660
1661 case LINUX_SIGPWR:
1662 return GDB_SIGNAL_PWR;
1663
1664 case LINUX_SIGSYS:
1665 return GDB_SIGNAL_SYS;
1666
1667 /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
1668 therefore we have to handle them here. */
1669 case LINUX_SIGRTMIN:
1670 return GDB_SIGNAL_REALTIME_32;
1671
1672 case LINUX_SIGRTMAX:
1673 return GDB_SIGNAL_REALTIME_64;
1674 }
1675
1676 if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1)
1677 {
1678 int offset = signal - LINUX_SIGRTMIN + 1;
1679
1680 return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset);
1681 }
1682
1683 return GDB_SIGNAL_UNKNOWN;
1684 }
1685
1686 /* Implementation of `gdbarch_gdb_signal_to_target', as defined in
1687 gdbarch.h. This function is not static because it is exported to
1688 other -tdep files. */
1689
1690 int
1691 linux_gdb_signal_to_target (struct gdbarch *gdbarch,
1692 enum gdb_signal signal)
1693 {
1694 switch (signal)
1695 {
1696 case GDB_SIGNAL_0:
1697 return 0;
1698
1699 case GDB_SIGNAL_HUP:
1700 return LINUX_SIGHUP;
1701
1702 case GDB_SIGNAL_INT:
1703 return LINUX_SIGINT;
1704
1705 case GDB_SIGNAL_QUIT:
1706 return LINUX_SIGQUIT;
1707
1708 case GDB_SIGNAL_ILL:
1709 return LINUX_SIGILL;
1710
1711 case GDB_SIGNAL_TRAP:
1712 return LINUX_SIGTRAP;
1713
1714 case GDB_SIGNAL_ABRT:
1715 return LINUX_SIGABRT;
1716
1717 case GDB_SIGNAL_FPE:
1718 return LINUX_SIGFPE;
1719
1720 case GDB_SIGNAL_KILL:
1721 return LINUX_SIGKILL;
1722
1723 case GDB_SIGNAL_BUS:
1724 return LINUX_SIGBUS;
1725
1726 case GDB_SIGNAL_SEGV:
1727 return LINUX_SIGSEGV;
1728
1729 case GDB_SIGNAL_SYS:
1730 return LINUX_SIGSYS;
1731
1732 case GDB_SIGNAL_PIPE:
1733 return LINUX_SIGPIPE;
1734
1735 case GDB_SIGNAL_ALRM:
1736 return LINUX_SIGALRM;
1737
1738 case GDB_SIGNAL_TERM:
1739 return LINUX_SIGTERM;
1740
1741 case GDB_SIGNAL_URG:
1742 return LINUX_SIGURG;
1743
1744 case GDB_SIGNAL_STOP:
1745 return LINUX_SIGSTOP;
1746
1747 case GDB_SIGNAL_TSTP:
1748 return LINUX_SIGTSTP;
1749
1750 case GDB_SIGNAL_CONT:
1751 return LINUX_SIGCONT;
1752
1753 case GDB_SIGNAL_CHLD:
1754 return LINUX_SIGCHLD;
1755
1756 case GDB_SIGNAL_TTIN:
1757 return LINUX_SIGTTIN;
1758
1759 case GDB_SIGNAL_TTOU:
1760 return LINUX_SIGTTOU;
1761
1762 case GDB_SIGNAL_IO:
1763 return LINUX_SIGIO;
1764
1765 case GDB_SIGNAL_XCPU:
1766 return LINUX_SIGXCPU;
1767
1768 case GDB_SIGNAL_XFSZ:
1769 return LINUX_SIGXFSZ;
1770
1771 case GDB_SIGNAL_VTALRM:
1772 return LINUX_SIGVTALRM;
1773
1774 case GDB_SIGNAL_PROF:
1775 return LINUX_SIGPROF;
1776
1777 case GDB_SIGNAL_WINCH:
1778 return LINUX_SIGWINCH;
1779
1780 case GDB_SIGNAL_USR1:
1781 return LINUX_SIGUSR1;
1782
1783 case GDB_SIGNAL_USR2:
1784 return LINUX_SIGUSR2;
1785
1786 case GDB_SIGNAL_PWR:
1787 return LINUX_SIGPWR;
1788
1789 case GDB_SIGNAL_POLL:
1790 return LINUX_SIGPOLL;
1791
1792 /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
1793 therefore we have to handle it here. */
1794 case GDB_SIGNAL_REALTIME_32:
1795 return LINUX_SIGRTMIN;
1796
1797 /* Same comment applies to _64. */
1798 case GDB_SIGNAL_REALTIME_64:
1799 return LINUX_SIGRTMAX;
1800 }
1801
1802 /* GDB_SIGNAL_REALTIME_33 to _64 are continuous. */
1803 if (signal >= GDB_SIGNAL_REALTIME_33
1804 && signal <= GDB_SIGNAL_REALTIME_63)
1805 {
1806 int offset = signal - GDB_SIGNAL_REALTIME_33;
1807
1808 return LINUX_SIGRTMIN + 1 + offset;
1809 }
1810
1811 return -1;
1812 }
1813
1814 /* To be called from the various GDB_OSABI_LINUX handlers for the
1815 various GNU/Linux architectures and machine types. */
1816
1817 void
1818 linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1819 {
1820 set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
1821 set_gdbarch_info_proc (gdbarch, linux_info_proc);
1822 set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc);
1823 set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
1824 set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes_1);
1825 set_gdbarch_has_shared_address_space (gdbarch,
1826 linux_has_shared_address_space);
1827 set_gdbarch_gdb_signal_from_target (gdbarch,
1828 linux_gdb_signal_from_target);
1829 set_gdbarch_gdb_signal_to_target (gdbarch,
1830 linux_gdb_signal_to_target);
1831 }
1832
1833 /* Provide a prototype to silence -Wmissing-prototypes. */
1834 extern initialize_file_ftype _initialize_linux_tdep;
1835
1836 void
1837 _initialize_linux_tdep (void)
1838 {
1839 linux_gdbarch_data_handle =
1840 gdbarch_data_register_post_init (init_linux_gdbarch_data);
1841 }
This page took 0.10503 seconds and 4 git commands to generate.