GDB (xrefs)
/tmp/gdb-8.1/gdb/linux-tdep.c
Go to the documentation of this file.
1 /* Target-dependent code for GNU/Linux, architecture independent.
2 
3  Copyright (C) 2009-2018 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 #include "observer.h"
36 #include "objfiles.h"
37 #include "infcall.h"
38 #include "gdbcmd.h"
39 #include "gdb_regex.h"
40 #include "common/enum-flags.h"
41 #include "common/gdb_optional.h"
42 
43 #include <ctype.h>
44 
45 /* This enum represents the values that the user can choose when
46  informing the Linux kernel about which memory mappings will be
47  dumped in a corefile. They are described in the file
48  Documentation/filesystems/proc.txt, inside the Linux kernel
49  tree. */
50 
52  {
60  };
61 DEF_ENUM_FLAGS_TYPE (enum filter_flag, filter_flags);
62 
63 /* This struct is used to map flags found in the "VmFlags:" field (in
64  the /proc/<PID>/smaps file). */
65 
67  {
68  /* Zero if this structure has not been initialized yet. It
69  probably means that the Linux kernel being used does not emit
70  the "VmFlags:" field on "/proc/PID/smaps". */
71 
72  unsigned int initialized_p : 1;
73 
74  /* Memory mapped I/O area (VM_IO, "io"). */
75 
76  unsigned int io_page : 1;
77 
78  /* Area uses huge TLB pages (VM_HUGETLB, "ht"). */
79 
80  unsigned int uses_huge_tlb : 1;
81 
82  /* Do not include this memory region on the coredump (VM_DONTDUMP, "dd"). */
83 
84  unsigned int exclude_coredump : 1;
85 
86  /* Is this a MAP_SHARED mapping (VM_SHARED, "sh"). */
87 
88  unsigned int shared_mapping : 1;
89  };
90 
91 /* Whether to take the /proc/PID/coredump_filter into account when
92  generating a corefile. */
93 
94 static int use_coredump_filter = 1;
95 
96 /* Whether the value of smaps_vmflags->exclude_coredump should be
97  ignored, including mappings marked with the VM_DONTDUMP flag in
98  the dump. */
99 static int dump_excluded_mappings = 0;
100 
101 /* This enum represents the signals' numbers on a generic architecture
102  running the Linux kernel. The definition of "generic" comes from
103  the file <include/uapi/asm-generic/signal.h>, from the Linux kernel
104  tree, which is the "de facto" implementation of signal numbers to
105  be used by new architecture ports.
106 
107  For those architectures which have differences between the generic
108  standard (e.g., Alpha), we define the different signals (and *only*
109  those) in the specific target-dependent file (e.g.,
110  alpha-linux-tdep.c, for Alpha). Please refer to the architecture's
111  tdep file for more information.
112 
113  ARM deserves a special mention here. On the file
114  <arch/arm/include/uapi/asm/signal.h>, it defines only one different
115  (and ARM-only) signal, which is SIGSWI, with the same number as
116  SIGRTMIN. This signal is used only for a very specific target,
117  called ArthurOS (from RISCOS). Therefore, we do not handle it on
118  the ARM-tdep file, and we can safely use the generic signal handler
119  here for ARM targets.
120 
121  As stated above, this enum is derived from
122  <include/uapi/asm-generic/signal.h>, from the Linux kernel
123  tree. */
124 
125 enum
126  {
161 
164  };
165 
167 
169  {
171  };
172 
173 static void *
175 {
177 }
178 
179 static struct linux_gdbarch_data *
181 {
182  return ((struct linux_gdbarch_data *)
184 }
185 
186 /* Per-inferior data key. */
187 static const struct inferior_data *linux_inferior_data;
188 
189 /* Linux-specific cached data. This is used by GDB for caching
190  purposes for each inferior. This helps reduce the overhead of
191  transfering data from a remote target to the local host. */
193 {
194  /* Cache of the inferior's vsyscall/vDSO mapping range. Only valid
195  if VSYSCALL_RANGE_P is positive. This is cached because getting
196  at this info requires an auxv lookup (which is itself cached),
197  and looking through the inferior's mappings (which change
198  throughout execution and therefore cannot be cached). */
200 
201  /* Zero if we haven't tried looking up the vsyscall's range before
202  yet. Positive if we tried looking it up, and found it. Negative
203  if we tried looking it up but failed. */
205 };
206 
207 /* Frees whatever allocated space there is to be freed and sets INF's
208  linux cache data pointer to NULL. */
209 
210 static void
212 {
213  struct linux_info *info;
214 
215  info = (struct linux_info *) inferior_data (inf, linux_inferior_data);
216  if (info != NULL)
217  {
218  xfree (info);
219  set_inferior_data (inf, linux_inferior_data, NULL);
220  }
221 }
222 
223 /* Handles the cleanup of the linux cache for inferior INF. ARG is
224  ignored. Callback for the inferior_appeared and inferior_exit
225  events. */
226 
227 static void
229 {
231 }
232 
233 /* Fetch the linux cache info for INF. This function always returns a
234  valid INFO pointer. */
235 
236 static struct linux_info *
238 {
239  struct linux_info *info;
240  struct inferior *inf = current_inferior ();
241 
242  info = (struct linux_info *) inferior_data (inf, linux_inferior_data);
243  if (info == NULL)
244  {
245  info = XCNEW (struct linux_info);
246  set_inferior_data (inf, linux_inferior_data, info);
247  }
248 
249  return info;
250 }
251 
252 /* See linux-tdep.h. */
253 
254 struct type *
256  linux_siginfo_extra_fields extra_fields)
257 {
259  struct type *int_type, *uint_type, *long_type, *void_ptr_type, *short_type;
260  struct type *uid_type, *pid_type;
261  struct type *sigval_type, *clock_type;
262  struct type *siginfo_type, *sifields_type;
263  struct type *type;
264 
266  if (linux_gdbarch_data->siginfo_type != NULL)
268 
270  0, "int");
272  1, "unsigned int");
274  0, "long");
276  0, "short");
277  void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
278 
279  /* sival_t */
280  sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
281  TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
282  append_composite_type_field (sigval_type, "sival_int", int_type);
283  append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
284 
285  /* __pid_t */
286  pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
287  TYPE_LENGTH (int_type) * TARGET_CHAR_BIT, "__pid_t");
288  TYPE_TARGET_TYPE (pid_type) = int_type;
289  TYPE_TARGET_STUB (pid_type) = 1;
290 
291  /* __uid_t */
292  uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
293  TYPE_LENGTH (uint_type) * TARGET_CHAR_BIT, "__uid_t");
294  TYPE_TARGET_TYPE (uid_type) = uint_type;
295  TYPE_TARGET_STUB (uid_type) = 1;
296 
297  /* __clock_t */
298  clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
299  TYPE_LENGTH (long_type) * TARGET_CHAR_BIT,
300  "__clock_t");
301  TYPE_TARGET_TYPE (clock_type) = long_type;
302  TYPE_TARGET_STUB (clock_type) = 1;
303 
304  /* _sifields */
305  sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
306 
307  {
308  const int si_max_size = 128;
309  int si_pad_size;
310  int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
311 
312  /* _pad */
313  if (gdbarch_ptr_bit (gdbarch) == 64)
314  si_pad_size = (si_max_size / size_of_int) - 4;
315  else
316  si_pad_size = (si_max_size / size_of_int) - 3;
317  append_composite_type_field (sifields_type, "_pad",
318  init_vector_type (int_type, si_pad_size));
319  }
320 
321  /* _kill */
323  append_composite_type_field (type, "si_pid", pid_type);
324  append_composite_type_field (type, "si_uid", uid_type);
325  append_composite_type_field (sifields_type, "_kill", type);
326 
327  /* _timer */
329  append_composite_type_field (type, "si_tid", int_type);
330  append_composite_type_field (type, "si_overrun", int_type);
331  append_composite_type_field (type, "si_sigval", sigval_type);
332  append_composite_type_field (sifields_type, "_timer", type);
333 
334  /* _rt */
336  append_composite_type_field (type, "si_pid", pid_type);
337  append_composite_type_field (type, "si_uid", uid_type);
338  append_composite_type_field (type, "si_sigval", sigval_type);
339  append_composite_type_field (sifields_type, "_rt", type);
340 
341  /* _sigchld */
343  append_composite_type_field (type, "si_pid", pid_type);
344  append_composite_type_field (type, "si_uid", uid_type);
345  append_composite_type_field (type, "si_status", int_type);
346  append_composite_type_field (type, "si_utime", clock_type);
347  append_composite_type_field (type, "si_stime", clock_type);
348  append_composite_type_field (sifields_type, "_sigchld", type);
349 
350  /* _sigfault */
352  append_composite_type_field (type, "si_addr", void_ptr_type);
353 
354  /* Additional bound fields for _sigfault in case they were requested. */
355  if ((extra_fields & LINUX_SIGINFO_FIELD_ADDR_BND) != 0)
356  {
357  struct type *sigfault_bnd_fields;
358 
359  append_composite_type_field (type, "_addr_lsb", short_type);
360  sigfault_bnd_fields = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
361  append_composite_type_field (sigfault_bnd_fields, "_lower", void_ptr_type);
362  append_composite_type_field (sigfault_bnd_fields, "_upper", void_ptr_type);
363  append_composite_type_field (type, "_addr_bnd", sigfault_bnd_fields);
364  }
365  append_composite_type_field (sifields_type, "_sigfault", type);
366 
367  /* _sigpoll */
369  append_composite_type_field (type, "si_band", long_type);
370  append_composite_type_field (type, "si_fd", int_type);
371  append_composite_type_field (sifields_type, "_sigpoll", type);
372 
373  /* struct siginfo */
374  siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
375  TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
376  append_composite_type_field (siginfo_type, "si_signo", int_type);
377  append_composite_type_field (siginfo_type, "si_errno", int_type);
378  append_composite_type_field (siginfo_type, "si_code", int_type);
380  "_sifields", sifields_type,
381  TYPE_LENGTH (long_type));
382 
383  linux_gdbarch_data->siginfo_type = siginfo_type;
384 
385  return siginfo_type;
386 }
387 
388 /* This function is suitable for architectures that don't
389  extend/override the standard siginfo structure. */
390 
391 static struct type *
393 {
395 }
396 
397 /* Return true if the target is running on uClinux instead of normal
398  Linux kernel. */
399 
400 int
402 {
404 
405  return (target_auxv_search (&current_target, AT_NULL, &dummy) > 0
406  && target_auxv_search (&current_target, AT_PAGESZ, &dummy) == 0);
407 }
408 
409 static int
411 {
412  return linux_is_uclinux ();
413 }
414 
415 /* This is how we want PTIDs from core files to be printed. */
416 
417 static const char *
419 {
420  static char buf[80];
421 
422  if (ptid_get_lwp (ptid) != 0)
423  {
424  snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
425  return buf;
426  }
427 
428  return normal_pid_to_str (ptid);
429 }
430 
431 /* Service function for corefiles and info proc. */
432 
433 static void
434 read_mapping (const char *line,
435  ULONGEST *addr, ULONGEST *endaddr,
436  const char **permissions, size_t *permissions_len,
437  ULONGEST *offset,
438  const char **device, size_t *device_len,
439  ULONGEST *inode,
440  const char **filename)
441 {
442  const char *p = line;
443 
444  *addr = strtoulst (p, &p, 16);
445  if (*p == '-')
446  p++;
447  *endaddr = strtoulst (p, &p, 16);
448 
449  p = skip_spaces (p);
450  *permissions = p;
451  while (*p && !isspace (*p))
452  p++;
453  *permissions_len = p - *permissions;
454 
455  *offset = strtoulst (p, &p, 16);
456 
457  p = skip_spaces (p);
458  *device = p;
459  while (*p && !isspace (*p))
460  p++;
461  *device_len = p - *device;
462 
463  *inode = strtoulst (p, &p, 10);
464 
465  p = skip_spaces (p);
466  *filename = p;
467 }
468 
469 /* Helper function to decode the "VmFlags" field in /proc/PID/smaps.
470 
471  This function was based on the documentation found on
472  <Documentation/filesystems/proc.txt>, on the Linux kernel.
473 
474  Linux kernels before commit
475  834f82e2aa9a8ede94b17b656329f850c1471514 (3.10) do not have this
476  field on smaps. */
477 
478 static void
479 decode_vmflags (char *p, struct smaps_vmflags *v)
480 {
481  char *saveptr = NULL;
482  const char *s;
483 
484  v->initialized_p = 1;
485  p = skip_to_space (p);
486  p = skip_spaces (p);
487 
488  for (s = strtok_r (p, " ", &saveptr);
489  s != NULL;
490  s = strtok_r (NULL, " ", &saveptr))
491  {
492  if (strcmp (s, "io") == 0)
493  v->io_page = 1;
494  else if (strcmp (s, "ht") == 0)
495  v->uses_huge_tlb = 1;
496  else if (strcmp (s, "dd") == 0)
497  v->exclude_coredump = 1;
498  else if (strcmp (s, "sh") == 0)
499  v->shared_mapping = 1;
500  }
501 }
502 
503 /* Regexes used by mapping_is_anonymous_p. Put in a structure because
504  they're initialized lazily. */
505 
507 {
508  /* Matches "/dev/zero" filenames (with or without the "(deleted)"
509  string in the end). We know for sure, based on the Linux kernel
510  code, that memory mappings whose associated filename is
511  "/dev/zero" are guaranteed to be MAP_ANONYMOUS. */
513  {"^/dev/zero\\( (deleted)\\)\\?$", REG_NOSUB,
514  _("Could not compile regex to match /dev/zero filename")};
515 
516  /* Matches "/SYSV%08x" filenames (with or without the "(deleted)"
517  string in the end). These filenames refer to shared memory
518  (shmem), and memory mappings associated with them are
519  MAP_ANONYMOUS as well. */
521  {"^/\\?SYSV[0-9a-fA-F]\\{8\\}\\( (deleted)\\)\\?$", REG_NOSUB,
522  _("Could not compile regex to match shmem filenames")};
523 
524  /* A heuristic we use to try to mimic the Linux kernel's 'n_link ==
525  0' code, which is responsible to decide if it is dealing with a
526  'MAP_SHARED | MAP_ANONYMOUS' mapping. In other words, if
527  FILE_DELETED matches, it does not necessarily mean that we are
528  dealing with an anonymous shared mapping. However, there is no
529  easy way to detect this currently, so this is the best
530  approximation we have.
531 
532  As a result, GDB will dump readonly pages of deleted executables
533  when using the default value of coredump_filter (0x33), while the
534  Linux kernel will not dump those pages. But we can live with
535  that. */
537  {" (deleted)$", REG_NOSUB,
538  _("Could not compile regex to match '<file> (deleted)'")};
539 };
540 
541 /* Return 1 if the memory mapping is anonymous, 0 otherwise.
542 
543  FILENAME is the name of the file present in the first line of the
544  memory mapping, in the "/proc/PID/smaps" output. For example, if
545  the first line is:
546 
547  7fd0ca877000-7fd0d0da0000 r--p 00000000 fd:02 2100770 /path/to/file
548 
549  Then FILENAME will be "/path/to/file". */
550 
551 static int
552 mapping_is_anonymous_p (const char *filename)
553 {
554  static gdb::optional<mapping_regexes> regexes;
555  static int init_regex_p = 0;
556 
557  if (!init_regex_p)
558  {
559  /* Let's be pessimistic and assume there will be an error while
560  compiling the regex'es. */
561  init_regex_p = -1;
562 
563  regexes.emplace ();
564 
565  /* If we reached this point, then everything succeeded. */
566  init_regex_p = 1;
567  }
568 
569  if (init_regex_p == -1)
570  {
571  const char deleted[] = " (deleted)";
572  size_t del_len = sizeof (deleted) - 1;
573  size_t filename_len = strlen (filename);
574 
575  /* There was an error while compiling the regex'es above. In
576  order to try to give some reliable information to the caller,
577  we just try to find the string " (deleted)" in the filename.
578  If we managed to find it, then we assume the mapping is
579  anonymous. */
580  return (filename_len >= del_len
581  && strcmp (filename + filename_len - del_len, deleted) == 0);
582  }
583 
584  if (*filename == '\0'
585  || regexes->dev_zero.exec (filename, 0, NULL, 0) == 0
586  || regexes->shmem_file.exec (filename, 0, NULL, 0) == 0
587  || regexes->file_deleted.exec (filename, 0, NULL, 0) == 0)
588  return 1;
589 
590  return 0;
591 }
592 
593 /* Return 0 if the memory mapping (which is related to FILTERFLAGS, V,
594  MAYBE_PRIVATE_P, and MAPPING_ANONYMOUS_P) should not be dumped, or
595  greater than 0 if it should.
596 
597  In a nutshell, this is the logic that we follow in order to decide
598  if a mapping should be dumped or not.
599 
600  - If the mapping is associated to a file whose name ends with
601  " (deleted)", or if the file is "/dev/zero", or if it is
602  "/SYSV%08x" (shared memory), or if there is no file associated
603  with it, or if the AnonHugePages: or the Anonymous: fields in the
604  /proc/PID/smaps have contents, then GDB considers this mapping to
605  be anonymous. Otherwise, GDB considers this mapping to be a
606  file-backed mapping (because there will be a file associated with
607  it).
608 
609  It is worth mentioning that, from all those checks described
610  above, the most fragile is the one to see if the file name ends
611  with " (deleted)". This does not necessarily mean that the
612  mapping is anonymous, because the deleted file associated with
613  the mapping may have been a hard link to another file, for
614  example. The Linux kernel checks to see if "i_nlink == 0", but
615  GDB cannot easily (and normally) do this check (iff running as
616  root, it could find the mapping in /proc/PID/map_files/ and
617  determine whether there still are other hard links to the
618  inode/file). Therefore, we made a compromise here, and we assume
619  that if the file name ends with " (deleted)", then the mapping is
620  indeed anonymous. FWIW, this is something the Linux kernel could
621  do better: expose this information in a more direct way.
622 
623  - If we see the flag "sh" in the "VmFlags:" field (in
624  /proc/PID/smaps), then certainly the memory mapping is shared
625  (VM_SHARED). If we have access to the VmFlags, and we don't see
626  the "sh" there, then certainly the mapping is private. However,
627  Linux kernels before commit
628  834f82e2aa9a8ede94b17b656329f850c1471514 (3.10) do not have the
629  "VmFlags:" field; in that case, we use another heuristic: if we
630  see 'p' in the permission flags, then we assume that the mapping
631  is private, even though the presence of the 's' flag there would
632  mean VM_MAYSHARE, which means the mapping could still be private.
633  This should work OK enough, however. */
634 
635 static int
636 dump_mapping_p (filter_flags filterflags, const struct smaps_vmflags *v,
637  int maybe_private_p, int mapping_anon_p, int mapping_file_p,
638  const char *filename)
639 {
640  /* Initially, we trust in what we received from our caller. This
641  value may not be very precise (i.e., it was probably gathered
642  from the permission line in the /proc/PID/smaps list, which
643  actually refers to VM_MAYSHARE, and not VM_SHARED), but it is
644  what we have until we take a look at the "VmFlags:" field
645  (assuming that the version of the Linux kernel being used
646  supports it, of course). */
647  int private_p = maybe_private_p;
648 
649  /* We always dump vDSO and vsyscall mappings, because it's likely that
650  there'll be no file to read the contents from at core load time.
651  The kernel does the same. */
652  if (strcmp ("[vdso]", filename) == 0
653  || strcmp ("[vsyscall]", filename) == 0)
654  return 1;
655 
656  if (v->initialized_p)
657  {
658  /* We never dump I/O mappings. */
659  if (v->io_page)
660  return 0;
661 
662  /* Check if we should exclude this mapping. */
664  return 0;
665 
666  /* Update our notion of whether this mapping is shared or
667  private based on a trustworthy value. */
668  private_p = !v->shared_mapping;
669 
670  /* HugeTLB checking. */
671  if (v->uses_huge_tlb)
672  {
673  if ((private_p && (filterflags & COREFILTER_HUGETLB_PRIVATE))
674  || (!private_p && (filterflags & COREFILTER_HUGETLB_SHARED)))
675  return 1;
676 
677  return 0;
678  }
679  }
680 
681  if (private_p)
682  {
683  if (mapping_anon_p && mapping_file_p)
684  {
685  /* This is a special situation. It can happen when we see a
686  mapping that is file-backed, but that contains anonymous
687  pages. */
688  return ((filterflags & COREFILTER_ANON_PRIVATE) != 0
689  || (filterflags & COREFILTER_MAPPED_PRIVATE) != 0);
690  }
691  else if (mapping_anon_p)
692  return (filterflags & COREFILTER_ANON_PRIVATE) != 0;
693  else
694  return (filterflags & COREFILTER_MAPPED_PRIVATE) != 0;
695  }
696  else
697  {
698  if (mapping_anon_p && mapping_file_p)
699  {
700  /* This is a special situation. It can happen when we see a
701  mapping that is file-backed, but that contains anonymous
702  pages. */
703  return ((filterflags & COREFILTER_ANON_SHARED) != 0
704  || (filterflags & COREFILTER_MAPPED_SHARED) != 0);
705  }
706  else if (mapping_anon_p)
707  return (filterflags & COREFILTER_ANON_SHARED) != 0;
708  else
709  return (filterflags & COREFILTER_MAPPED_SHARED) != 0;
710  }
711 }
712 
713 /* Implement the "info proc" command. */
714 
715 static void
716 linux_info_proc (struct gdbarch *gdbarch, const char *args,
717  enum info_proc_what what)
718 {
719  /* A long is used for pid instead of an int to avoid a loss of precision
720  compiler warning from the output of strtoul. */
721  long pid;
722  int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
723  int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
724  int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
725  int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
726  int status_f = (what == IP_STATUS || what == IP_ALL);
727  int stat_f = (what == IP_STAT || what == IP_ALL);
728  char filename[100];
729  char *data;
730  int target_errno;
731 
732  if (args && isdigit (args[0]))
733  {
734  char *tem;
735 
736  pid = strtoul (args, &tem, 10);
737  args = tem;
738  }
739  else
740  {
742  error (_("No current process: you must name one."));
743  if (current_inferior ()->fake_pid_p)
744  error (_("Can't determine the current process's PID: you must name one."));
745 
746  pid = current_inferior ()->pid;
747  }
748 
749  args = skip_spaces (args);
750  if (args && args[0])
751  error (_("Too many parameters: %s"), args);
752 
753  printf_filtered (_("process %ld\n"), pid);
754  if (cmdline_f)
755  {
756  xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
758  = target_fileio_read_stralloc (NULL, filename);
759  if (cmdline)
760  printf_filtered ("cmdline = '%s'\n", cmdline.get ());
761  else
762  warning (_("unable to open /proc file '%s'"), filename);
763  }
764  if (cwd_f)
765  {
766  xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
767  data = target_fileio_readlink (NULL, filename, &target_errno);
768  if (data)
769  {
770  struct cleanup *cleanup = make_cleanup (xfree, data);
771  printf_filtered ("cwd = '%s'\n", data);
773  }
774  else
775  warning (_("unable to read link '%s'"), filename);
776  }
777  if (exe_f)
778  {
779  xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
780  data = target_fileio_readlink (NULL, filename, &target_errno);
781  if (data)
782  {
783  struct cleanup *cleanup = make_cleanup (xfree, data);
784  printf_filtered ("exe = '%s'\n", data);
786  }
787  else
788  warning (_("unable to read link '%s'"), filename);
789  }
790  if (mappings_f)
791  {
792  xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
794  = target_fileio_read_stralloc (NULL, filename);
795  if (map != NULL)
796  {
797  char *line;
798 
799  printf_filtered (_("Mapped address spaces:\n\n"));
800  if (gdbarch_addr_bit (gdbarch) == 32)
801  {
802  printf_filtered ("\t%10s %10s %10s %10s %s\n",
803  "Start Addr",
804  " End Addr",
805  " Size", " Offset", "objfile");
806  }
807  else
808  {
809  printf_filtered (" %18s %18s %10s %10s %s\n",
810  "Start Addr",
811  " End Addr",
812  " Size", " Offset", "objfile");
813  }
814 
815  for (line = strtok (map.get (), "\n");
816  line;
817  line = strtok (NULL, "\n"))
818  {
819  ULONGEST addr, endaddr, offset, inode;
820  const char *permissions, *device, *filename;
821  size_t permissions_len, device_len;
822 
823  read_mapping (line, &addr, &endaddr,
824  &permissions, &permissions_len,
825  &offset, &device, &device_len,
826  &inode, &filename);
827 
828  if (gdbarch_addr_bit (gdbarch) == 32)
829  {
830  printf_filtered ("\t%10s %10s %10s %10s %s\n",
831  paddress (gdbarch, addr),
832  paddress (gdbarch, endaddr),
833  hex_string (endaddr - addr),
834  hex_string (offset),
835  *filename? filename : "");
836  }
837  else
838  {
839  printf_filtered (" %18s %18s %10s %10s %s\n",
840  paddress (gdbarch, addr),
841  paddress (gdbarch, endaddr),
842  hex_string (endaddr - addr),
843  hex_string (offset),
844  *filename? filename : "");
845  }
846  }
847  }
848  else
849  warning (_("unable to open /proc file '%s'"), filename);
850  }
851  if (status_f)
852  {
853  xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
855  = target_fileio_read_stralloc (NULL, filename);
856  if (status)
857  puts_filtered (status.get ());
858  else
859  warning (_("unable to open /proc file '%s'"), filename);
860  }
861  if (stat_f)
862  {
863  xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
865  = target_fileio_read_stralloc (NULL, filename);
866  if (statstr)
867  {
868  const char *p = statstr.get ();
869 
870  printf_filtered (_("Process: %s\n"),
871  pulongest (strtoulst (p, &p, 10)));
872 
873  p = skip_spaces (p);
874  if (*p == '(')
875  {
876  /* ps command also relies on no trailing fields
877  ever contain ')'. */
878  const char *ep = strrchr (p, ')');
879  if (ep != NULL)
880  {
881  printf_filtered ("Exec file: %.*s\n",
882  (int) (ep - p - 1), p + 1);
883  p = ep + 1;
884  }
885  }
886 
887  p = skip_spaces (p);
888  if (*p)
889  printf_filtered (_("State: %c\n"), *p++);
890 
891  if (*p)
892  printf_filtered (_("Parent process: %s\n"),
893  pulongest (strtoulst (p, &p, 10)));
894  if (*p)
895  printf_filtered (_("Process group: %s\n"),
896  pulongest (strtoulst (p, &p, 10)));
897  if (*p)
898  printf_filtered (_("Session id: %s\n"),
899  pulongest (strtoulst (p, &p, 10)));
900  if (*p)
901  printf_filtered (_("TTY: %s\n"),
902  pulongest (strtoulst (p, &p, 10)));
903  if (*p)
904  printf_filtered (_("TTY owner process group: %s\n"),
905  pulongest (strtoulst (p, &p, 10)));
906 
907  if (*p)
908  printf_filtered (_("Flags: %s\n"),
909  hex_string (strtoulst (p, &p, 10)));
910  if (*p)
911  printf_filtered (_("Minor faults (no memory page): %s\n"),
912  pulongest (strtoulst (p, &p, 10)));
913  if (*p)
914  printf_filtered (_("Minor faults, children: %s\n"),
915  pulongest (strtoulst (p, &p, 10)));
916  if (*p)
917  printf_filtered (_("Major faults (memory page faults): %s\n"),
918  pulongest (strtoulst (p, &p, 10)));
919  if (*p)
920  printf_filtered (_("Major faults, children: %s\n"),
921  pulongest (strtoulst (p, &p, 10)));
922  if (*p)
923  printf_filtered (_("utime: %s\n"),
924  pulongest (strtoulst (p, &p, 10)));
925  if (*p)
926  printf_filtered (_("stime: %s\n"),
927  pulongest (strtoulst (p, &p, 10)));
928  if (*p)
929  printf_filtered (_("utime, children: %s\n"),
930  pulongest (strtoulst (p, &p, 10)));
931  if (*p)
932  printf_filtered (_("stime, children: %s\n"),
933  pulongest (strtoulst (p, &p, 10)));
934  if (*p)
935  printf_filtered (_("jiffies remaining in current "
936  "time slice: %s\n"),
937  pulongest (strtoulst (p, &p, 10)));
938  if (*p)
939  printf_filtered (_("'nice' value: %s\n"),
940  pulongest (strtoulst (p, &p, 10)));
941  if (*p)
942  printf_filtered (_("jiffies until next timeout: %s\n"),
943  pulongest (strtoulst (p, &p, 10)));
944  if (*p)
945  printf_filtered (_("jiffies until next SIGALRM: %s\n"),
946  pulongest (strtoulst (p, &p, 10)));
947  if (*p)
948  printf_filtered (_("start time (jiffies since "
949  "system boot): %s\n"),
950  pulongest (strtoulst (p, &p, 10)));
951  if (*p)
952  printf_filtered (_("Virtual memory size: %s\n"),
953  pulongest (strtoulst (p, &p, 10)));
954  if (*p)
955  printf_filtered (_("Resident set size: %s\n"),
956  pulongest (strtoulst (p, &p, 10)));
957  if (*p)
958  printf_filtered (_("rlim: %s\n"),
959  pulongest (strtoulst (p, &p, 10)));
960  if (*p)
961  printf_filtered (_("Start of text: %s\n"),
962  hex_string (strtoulst (p, &p, 10)));
963  if (*p)
964  printf_filtered (_("End of text: %s\n"),
965  hex_string (strtoulst (p, &p, 10)));
966  if (*p)
967  printf_filtered (_("Start of stack: %s\n"),
968  hex_string (strtoulst (p, &p, 10)));
969 #if 0 /* Don't know how architecture-dependent the rest is...
970  Anyway the signal bitmap info is available from "status". */
971  if (*p)
972  printf_filtered (_("Kernel stack pointer: %s\n"),
973  hex_string (strtoulst (p, &p, 10)));
974  if (*p)
975  printf_filtered (_("Kernel instr pointer: %s\n"),
976  hex_string (strtoulst (p, &p, 10)));
977  if (*p)
978  printf_filtered (_("Pending signals bitmap: %s\n"),
979  hex_string (strtoulst (p, &p, 10)));
980  if (*p)
981  printf_filtered (_("Blocked signals bitmap: %s\n"),
982  hex_string (strtoulst (p, &p, 10)));
983  if (*p)
984  printf_filtered (_("Ignored signals bitmap: %s\n"),
985  hex_string (strtoulst (p, &p, 10)));
986  if (*p)
987  printf_filtered (_("Catched signals bitmap: %s\n"),
988  hex_string (strtoulst (p, &p, 10)));
989  if (*p)
990  printf_filtered (_("wchan (system call): %s\n"),
991  hex_string (strtoulst (p, &p, 10)));
992 #endif
993  }
994  else
995  warning (_("unable to open /proc file '%s'"), filename);
996  }
997 }
998 
999 /* Implement "info proc mappings" for a corefile. */
1000 
1001 static void
1002 linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args)
1003 {
1004  asection *section;
1005  ULONGEST count, page_size;
1006  unsigned char *descdata, *filenames, *descend;
1007  size_t note_size;
1008  unsigned int addr_size_bits, addr_size;
1010  /* We assume this for reading 64-bit core files. */
1011  gdb_static_assert (sizeof (ULONGEST) >= 8);
1012 
1013  section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file");
1014  if (section == NULL)
1015  {
1016  warning (_("unable to find mappings in core file"));
1017  return;
1018  }
1019 
1020  addr_size_bits = gdbarch_addr_bit (core_gdbarch);
1021  addr_size = addr_size_bits / 8;
1022  note_size = bfd_get_section_size (section);
1023 
1024  if (note_size < 2 * addr_size)
1025  error (_("malformed core note - too short for header"));
1026 
1027  gdb::def_vector<unsigned char> contents (note_size);
1028  if (!bfd_get_section_contents (core_bfd, section, contents.data (),
1029  0, note_size))
1030  error (_("could not get core note contents"));
1031 
1032  descdata = contents.data ();
1033  descend = descdata + note_size;
1034 
1035  if (descdata[note_size - 1] != '\0')
1036  error (_("malformed note - does not end with \\0"));
1037 
1038  count = bfd_get (addr_size_bits, core_bfd, descdata);
1039  descdata += addr_size;
1040 
1041  page_size = bfd_get (addr_size_bits, core_bfd, descdata);
1042  descdata += addr_size;
1043 
1044  if (note_size < 2 * addr_size + count * 3 * addr_size)
1045  error (_("malformed note - too short for supplied file count"));
1046 
1047  printf_filtered (_("Mapped address spaces:\n\n"));
1048  if (gdbarch_addr_bit (gdbarch) == 32)
1049  {
1050  printf_filtered ("\t%10s %10s %10s %10s %s\n",
1051  "Start Addr",
1052  " End Addr",
1053  " Size", " Offset", "objfile");
1054  }
1055  else
1056  {
1057  printf_filtered (" %18s %18s %10s %10s %s\n",
1058  "Start Addr",
1059  " End Addr",
1060  " Size", " Offset", "objfile");
1061  }
1062 
1063  filenames = descdata + count * 3 * addr_size;
1064  while (--count > 0)
1065  {
1066  ULONGEST start, end, file_ofs;
1067 
1068  if (filenames == descend)
1069  error (_("malformed note - filenames end too early"));
1070 
1071  start = bfd_get (addr_size_bits, core_bfd, descdata);
1072  descdata += addr_size;
1073  end = bfd_get (addr_size_bits, core_bfd, descdata);
1074  descdata += addr_size;
1075  file_ofs = bfd_get (addr_size_bits, core_bfd, descdata);
1076  descdata += addr_size;
1077 
1078  file_ofs *= page_size;
1079 
1080  if (gdbarch_addr_bit (gdbarch) == 32)
1081  printf_filtered ("\t%10s %10s %10s %10s %s\n",
1082  paddress (gdbarch, start),
1083  paddress (gdbarch, end),
1084  hex_string (end - start),
1085  hex_string (file_ofs),
1086  filenames);
1087  else
1088  printf_filtered (" %18s %18s %10s %10s %s\n",
1089  paddress (gdbarch, start),
1090  paddress (gdbarch, end),
1091  hex_string (end - start),
1092  hex_string (file_ofs),
1093  filenames);
1094 
1095  filenames += 1 + strlen ((char *) filenames);
1096  }
1097 }
1098 
1099 /* Implement "info proc" for a corefile. */
1100 
1101 static void
1102 linux_core_info_proc (struct gdbarch *gdbarch, const char *args,
1103  enum info_proc_what what)
1104 {
1105  int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
1106  int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
1107 
1108  if (exe_f)
1109  {
1110  const char *exe;
1111 
1112  exe = bfd_core_file_failing_command (core_bfd);
1113  if (exe != NULL)
1114  printf_filtered ("exe = '%s'\n", exe);
1115  else
1116  warning (_("unable to find command name in core file"));
1117  }
1118 
1119  if (mappings_f)
1121 
1122  if (!exe_f && !mappings_f)
1123  error (_("unable to handle request"));
1124 }
1125 
1126 /* Read siginfo data from the core, if possible. Returns -1 on
1127  failure. Otherwise, returns the number of bytes read. READBUF,
1128  OFFSET, and LEN are all as specified by the to_xfer_partial
1129  interface. */
1130 
1131 static LONGEST
1133  ULONGEST offset, ULONGEST len)
1134 {
1135  thread_section_name section_name (".note.linuxcore.siginfo", inferior_ptid);
1136  asection *section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
1137  if (section == NULL)
1138  return -1;
1139 
1140  if (!bfd_get_section_contents (core_bfd, section, readbuf, offset, len))
1141  return -1;
1142 
1143  return len;
1144 }
1145 
1147  ULONGEST offset, ULONGEST inode,
1148  int read, int write,
1149  int exec, int modified,
1150  const char *filename,
1151  void *data);
1152 
1153 /* List memory regions in the inferior for a corefile. */
1154 
1155 static int
1158  void *obfd)
1159 {
1160  char mapsfilename[100];
1161  char coredumpfilter_name[100];
1162  pid_t pid;
1163  /* Default dump behavior of coredump_filter (0x33), according to
1164  Documentation/filesystems/proc.txt from the Linux kernel
1165  tree. */
1166  filter_flags filterflags = (COREFILTER_ANON_PRIVATE
1170 
1171  /* We need to know the real target PID to access /proc. */
1172  if (current_inferior ()->fake_pid_p)
1173  return 1;
1174 
1175  pid = current_inferior ()->pid;
1176 
1177  if (use_coredump_filter)
1178  {
1179  xsnprintf (coredumpfilter_name, sizeof (coredumpfilter_name),
1180  "/proc/%d/coredump_filter", pid);
1181  gdb::unique_xmalloc_ptr<char> coredumpfilterdata
1182  = target_fileio_read_stralloc (NULL, coredumpfilter_name);
1183  if (coredumpfilterdata != NULL)
1184  {
1185  unsigned int flags;
1186 
1187  sscanf (coredumpfilterdata.get (), "%x", &flags);
1188  filterflags = (enum filter_flag) flags;
1189  }
1190  }
1191 
1192  xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/smaps", pid);
1194  = target_fileio_read_stralloc (NULL, mapsfilename);
1195  if (data == NULL)
1196  {
1197  /* Older Linux kernels did not support /proc/PID/smaps. */
1198  xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/maps", pid);
1199  data = target_fileio_read_stralloc (NULL, mapsfilename);
1200  }
1201 
1202  if (data != NULL)
1203  {
1204  char *line, *t;
1205 
1206  line = strtok_r (data.get (), "\n", &t);
1207  while (line != NULL)
1208  {
1209  ULONGEST addr, endaddr, offset, inode;
1210  const char *permissions, *device, *filename;
1211  struct smaps_vmflags v;
1212  size_t permissions_len, device_len;
1213  int read, write, exec, priv;
1214  int has_anonymous = 0;
1215  int should_dump_p = 0;
1216  int mapping_anon_p;
1217  int mapping_file_p;
1218 
1219  memset (&v, 0, sizeof (v));
1220  read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
1221  &offset, &device, &device_len, &inode, &filename);
1222  mapping_anon_p = mapping_is_anonymous_p (filename);
1223  /* If the mapping is not anonymous, then we can consider it
1224  to be file-backed. These two states (anonymous or
1225  file-backed) seem to be exclusive, but they can actually
1226  coexist. For example, if a file-backed mapping has
1227  "Anonymous:" pages (see more below), then the Linux
1228  kernel will dump this mapping when the user specified
1229  that she only wants anonymous mappings in the corefile
1230  (*even* when she explicitly disabled the dumping of
1231  file-backed mappings). */
1232  mapping_file_p = !mapping_anon_p;
1233 
1234  /* Decode permissions. */
1235  read = (memchr (permissions, 'r', permissions_len) != 0);
1236  write = (memchr (permissions, 'w', permissions_len) != 0);
1237  exec = (memchr (permissions, 'x', permissions_len) != 0);
1238  /* 'private' here actually means VM_MAYSHARE, and not
1239  VM_SHARED. In order to know if a mapping is really
1240  private or not, we must check the flag "sh" in the
1241  VmFlags field. This is done by decode_vmflags. However,
1242  if we are using a Linux kernel released before the commit
1243  834f82e2aa9a8ede94b17b656329f850c1471514 (3.10), we will
1244  not have the VmFlags there. In this case, there is
1245  really no way to know if we are dealing with VM_SHARED,
1246  so we just assume that VM_MAYSHARE is enough. */
1247  priv = memchr (permissions, 'p', permissions_len) != 0;
1248 
1249  /* Try to detect if region should be dumped by parsing smaps
1250  counters. */
1251  for (line = strtok_r (NULL, "\n", &t);
1252  line != NULL && line[0] >= 'A' && line[0] <= 'Z';
1253  line = strtok_r (NULL, "\n", &t))
1254  {
1255  char keyword[64 + 1];
1256 
1257  if (sscanf (line, "%64s", keyword) != 1)
1258  {
1259  warning (_("Error parsing {s,}maps file '%s'"), mapsfilename);
1260  break;
1261  }
1262 
1263  if (strcmp (keyword, "Anonymous:") == 0)
1264  {
1265  /* Older Linux kernels did not support the
1266  "Anonymous:" counter. Check it here. */
1267  has_anonymous = 1;
1268  }
1269  else if (strcmp (keyword, "VmFlags:") == 0)
1270  decode_vmflags (line, &v);
1271 
1272  if (strcmp (keyword, "AnonHugePages:") == 0
1273  || strcmp (keyword, "Anonymous:") == 0)
1274  {
1275  unsigned long number;
1276 
1277  if (sscanf (line, "%*s%lu", &number) != 1)
1278  {
1279  warning (_("Error parsing {s,}maps file '%s' number"),
1280  mapsfilename);
1281  break;
1282  }
1283  if (number > 0)
1284  {
1285  /* Even if we are dealing with a file-backed
1286  mapping, if it contains anonymous pages we
1287  consider it to be *also* an anonymous
1288  mapping, because this is what the Linux
1289  kernel does:
1290 
1291  // Dump segments that have been written to.
1292  if (vma->anon_vma && FILTER(ANON_PRIVATE))
1293  goto whole;
1294 
1295  Note that if the mapping is already marked as
1296  file-backed (i.e., mapping_file_p is
1297  non-zero), then this is a special case, and
1298  this mapping will be dumped either when the
1299  user wants to dump file-backed *or* anonymous
1300  mappings. */
1301  mapping_anon_p = 1;
1302  }
1303  }
1304  }
1305 
1306  if (has_anonymous)
1307  should_dump_p = dump_mapping_p (filterflags, &v, priv,
1308  mapping_anon_p, mapping_file_p,
1309  filename);
1310  else
1311  {
1312  /* Older Linux kernels did not support the "Anonymous:" counter.
1313  If it is missing, we can't be sure - dump all the pages. */
1314  should_dump_p = 1;
1315  }
1316 
1317  /* Invoke the callback function to create the corefile segment. */
1318  if (should_dump_p)
1319  func (addr, endaddr - addr, offset, inode,
1320  read, write, exec, 1, /* MODIFIED is true because we
1321  want to dump the mapping. */
1322  filename, obfd);
1323  }
1324 
1325  return 0;
1326  }
1327 
1328  return 1;
1329 }
1330 
1331 /* A structure for passing information through
1332  linux_find_memory_regions_full. */
1333 
1335 {
1336  /* The original callback. */
1337 
1339 
1340  /* The original datum. */
1341 
1342  void *obfd;
1343 };
1344 
1345 /* A callback for linux_find_memory_regions that converts between the
1346  "full"-style callback and find_memory_region_ftype. */
1347 
1348 static int
1350  ULONGEST offset, ULONGEST inode,
1351  int read, int write, int exec, int modified,
1352  const char *filename, void *arg)
1353 {
1354  struct linux_find_memory_regions_data *data
1355  = (struct linux_find_memory_regions_data *) arg;
1356 
1357  return data->func (vaddr, size, read, write, exec, modified, data->obfd);
1358 }
1359 
1360 /* A variant of linux_find_memory_regions_full that is suitable as the
1361  gdbarch find_memory_regions method. */
1362 
1363 static int
1366 {
1367  struct linux_find_memory_regions_data data;
1368 
1369  data.func = func;
1370  data.obfd = obfd;
1371 
1374  &data);
1375 }
1376 
1377 /* Determine which signal stopped execution. */
1378 
1379 static int
1380 find_signalled_thread (struct thread_info *info, void *data)
1381 {
1382  if (info->suspend.stop_signal != GDB_SIGNAL_0
1383  && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
1384  return 1;
1385 
1386  return 0;
1387 }
1388 
1389 /* Generate corefile notes for SPU contexts. */
1390 
1391 static char *
1392 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
1393 {
1394  static const char *spu_files[] =
1395  {
1396  "object-id",
1397  "mem",
1398  "regs",
1399  "fpcr",
1400  "lslr",
1401  "decr",
1402  "decr_status",
1403  "signal1",
1404  "signal1_type",
1405  "signal2",
1406  "signal2_type",
1407  "event_mask",
1408  "event_status",
1409  "mbox_info",
1410  "ibox_info",
1411  "wbox_info",
1412  "dma_info",
1413  "proxydma_info",
1414  };
1415 
1416  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
1417  gdb_byte *spu_ids;
1418  LONGEST i, j, size;
1419 
1420  /* Determine list of SPU ids. */
1422  NULL, &spu_ids);
1423 
1424  /* Generate corefile notes for each SPU file. */
1425  for (i = 0; i < size; i += 4)
1426  {
1427  int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order);
1428 
1429  for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
1430  {
1431  char annex[32], note_name[32];
1432  gdb_byte *spu_data;
1433  LONGEST spu_len;
1434 
1435  xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
1437  annex, &spu_data);
1438  if (spu_len > 0)
1439  {
1440  xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
1441  note_data = elfcore_write_note (obfd, note_data, note_size,
1442  note_name, NT_SPU,
1443  spu_data, spu_len);
1444  xfree (spu_data);
1445 
1446  if (!note_data)
1447  {
1448  xfree (spu_ids);
1449  return NULL;
1450  }
1451  }
1452  }
1453  }
1454 
1455  if (size > 0)
1456  xfree (spu_ids);
1457 
1458  return note_data;
1459 }
1460 
1461 /* This is used to pass information from
1462  linux_make_mappings_corefile_notes through
1463  linux_find_memory_regions_full. */
1464 
1466 {
1467  /* Number of files mapped. */
1469 
1470  /* The obstack for the main part of the data. */
1471  struct obstack *data_obstack;
1472 
1473  /* The filename obstack. */
1474  struct obstack *filename_obstack;
1475 
1476  /* The architecture's "long" type. */
1477  struct type *long_type;
1478 };
1479 
1481 
1482 /* A callback for linux_find_memory_regions_full that updates the
1483  mappings data for linux_make_mappings_corefile_notes. */
1484 
1485 static int
1487  ULONGEST offset, ULONGEST inode,
1488  int read, int write, int exec, int modified,
1489  const char *filename, void *data)
1490 {
1491  struct linux_make_mappings_data *map_data
1492  = (struct linux_make_mappings_data *) data;
1493  gdb_byte buf[sizeof (ULONGEST)];
1494 
1495  if (*filename == '\0' || inode == 0)
1496  return 0;
1497 
1498  ++map_data->file_count;
1499 
1500  pack_long (buf, map_data->long_type, vaddr);
1501  obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1502  pack_long (buf, map_data->long_type, vaddr + size);
1503  obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1504  pack_long (buf, map_data->long_type, offset);
1505  obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1506 
1507  obstack_grow_str0 (map_data->filename_obstack, filename);
1508 
1509  return 0;
1510 }
1511 
1512 /* Write the file mapping data to the core file, if possible. OBFD is
1513  the output BFD. NOTE_DATA is the current note data, and NOTE_SIZE
1514  is a pointer to the note size. Returns the new NOTE_DATA and
1515  updates NOTE_SIZE. */
1516 
1517 static char *
1519  char *note_data, int *note_size)
1520 {
1521  struct linux_make_mappings_data mapping_data;
1522  struct type *long_type
1524  gdb_byte buf[sizeof (ULONGEST)];
1525 
1526  auto_obstack data_obstack, filename_obstack;
1527 
1528  mapping_data.file_count = 0;
1529  mapping_data.data_obstack = &data_obstack;
1530  mapping_data.filename_obstack = &filename_obstack;
1531  mapping_data.long_type = long_type;
1532 
1533  /* Reserve space for the count. */
1534  obstack_blank (&data_obstack, TYPE_LENGTH (long_type));
1535  /* We always write the page size as 1 since we have no good way to
1536  determine the correct value. */
1537  pack_long (buf, long_type, 1);
1538  obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type));
1539 
1541  &mapping_data);
1542 
1543  if (mapping_data.file_count != 0)
1544  {
1545  /* Write the count to the obstack. */
1546  pack_long ((gdb_byte *) obstack_base (&data_obstack),
1547  long_type, mapping_data.file_count);
1548 
1549  /* Copy the filenames to the data obstack. */
1550  obstack_grow (&data_obstack, obstack_base (&filename_obstack),
1551  obstack_object_size (&filename_obstack));
1552 
1553  note_data = elfcore_write_note (obfd, note_data, note_size,
1554  "CORE", NT_FILE,
1555  obstack_base (&data_obstack),
1556  obstack_object_size (&data_obstack));
1557  }
1558 
1559  return note_data;
1560 }
1561 
1562 /* Structure for passing information from
1563  linux_collect_thread_registers via an iterator to
1564  linux_collect_regset_section_cb. */
1565 
1567 {
1568  struct gdbarch *gdbarch;
1569  const struct regcache *regcache;
1570  bfd *obfd;
1571  char *note_data;
1573  unsigned long lwp;
1574  enum gdb_signal stop_signal;
1576 };
1577 
1578 /* Callback for iterate_over_regset_sections that records a single
1579  regset in the corefile note section. */
1580 
1581 static void
1582 linux_collect_regset_section_cb (const char *sect_name, int size,
1583  const struct regset *regset,
1584  const char *human_name, void *cb_data)
1585 {
1586  char *buf;
1588  = (struct linux_collect_regset_section_cb_data *) cb_data;
1589 
1590  if (data->abort_iteration)
1591  return;
1592 
1594 
1595  buf = (char *) xmalloc (size);
1596  regset->collect_regset (regset, data->regcache, -1, buf, size);
1597 
1598  /* PRSTATUS still needs to be treated specially. */
1599  if (strcmp (sect_name, ".reg") == 0)
1600  data->note_data = (char *) elfcore_write_prstatus
1601  (data->obfd, data->note_data, data->note_size, data->lwp,
1602  gdb_signal_to_host (data->stop_signal), buf);
1603  else
1604  data->note_data = (char *) elfcore_write_register_note
1605  (data->obfd, data->note_data, data->note_size,
1606  sect_name, buf, size);
1607  xfree (buf);
1608 
1609  if (data->note_data == NULL)
1610  data->abort_iteration = 1;
1611 }
1612 
1613 /* Records the thread's register state for the corefile note
1614  section. */
1615 
1616 static char *
1618  ptid_t ptid, bfd *obfd,
1619  char *note_data, int *note_size,
1620  enum gdb_signal stop_signal)
1621 {
1622  struct gdbarch *gdbarch = regcache->arch ();
1624 
1625  data.gdbarch = gdbarch;
1626  data.regcache = regcache;
1627  data.obfd = obfd;
1628  data.note_data = note_data;
1629  data.note_size = note_size;
1630  data.stop_signal = stop_signal;
1631  data.abort_iteration = 0;
1632 
1633  /* For remote targets the LWP may not be available, so use the TID. */
1634  data.lwp = ptid_get_lwp (ptid);
1635  if (!data.lwp)
1636  data.lwp = ptid_get_tid (ptid);
1637 
1640  &data, regcache);
1641  return data.note_data;
1642 }
1643 
1644 /* Fetch the siginfo data for the specified thread, if it exists. If
1645  there is no data, or we could not read it, return an empty
1646  buffer. */
1647 
1648 static gdb::byte_vector
1650 {
1651  struct type *siginfo_type;
1652  LONGEST bytes_read;
1653 
1655  return gdb::byte_vector ();
1656 
1657  scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
1658  inferior_ptid = thread->ptid;
1659 
1660  siginfo_type = gdbarch_get_siginfo_type (gdbarch);
1661 
1662  gdb::byte_vector buf (TYPE_LENGTH (siginfo_type));
1663 
1665  buf.data (), 0, TYPE_LENGTH (siginfo_type));
1666  if (bytes_read != TYPE_LENGTH (siginfo_type))
1667  buf.clear ();
1668 
1669  return buf;
1670 }
1671 
1673 {
1674  struct gdbarch *gdbarch;
1675  bfd *obfd;
1676  char *note_data;
1678  enum gdb_signal stop_signal;
1679 };
1680 
1681 /* Records the thread's register state for the corefile note
1682  section. */
1683 
1684 static void
1686  struct linux_corefile_thread_data *args)
1687 {
1688  struct regcache *regcache;
1689 
1690  regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
1691 
1693  gdb::byte_vector siginfo_data = linux_get_siginfo_data (info, args->gdbarch);
1694 
1696  (regcache, info->ptid, args->obfd, args->note_data,
1697  args->note_size, args->stop_signal);
1698 
1699  /* Don't return anything if we got no register information above,
1700  such a core file is useless. */
1701  if (args->note_data != NULL)
1702  if (!siginfo_data.empty ())
1703  args->note_data = elfcore_write_note (args->obfd,
1704  args->note_data,
1705  args->note_size,
1706  "CORE", NT_SIGINFO,
1707  siginfo_data.data (),
1708  siginfo_data.size ());
1709 }
1710 
1711 /* Fill the PRPSINFO structure with information about the process being
1712  debugged. Returns 1 in case of success, 0 for failures. Please note that
1713  even if the structure cannot be entirely filled (e.g., GDB was unable to
1714  gather information about the process UID/GID), this function will still
1715  return 1 since some information was already recorded. It will only return
1716  0 iff nothing can be gathered. */
1717 
1718 static int
1719 linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
1720 {
1721  /* The filename which we will use to obtain some info about the process.
1722  We will basically use this to store the `/proc/PID/FILENAME' file. */
1723  char filename[100];
1724  /* The basename of the executable. */
1725  const char *basename;
1726  char *infargs;
1727  /* Temporary buffer. */
1728  char *tmpstr;
1729  /* The valid states of a process, according to the Linux kernel. */
1730  const char valid_states[] = "RSDTZW";
1731  /* The program state. */
1732  const char *prog_state;
1733  /* The state of the process. */
1734  char pr_sname;
1735  /* The PID of the program which generated the corefile. */
1736  pid_t pid;
1737  /* Process flags. */
1738  unsigned int pr_flag;
1739  /* Process nice value. */
1740  long pr_nice;
1741  /* The number of fields read by `sscanf'. */
1742  int n_fields = 0;
1743 
1744  gdb_assert (p != NULL);
1745 
1746  /* Obtaining PID and filename. */
1748  xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
1749  /* The full name of the program which generated the corefile. */
1751  = target_fileio_read_stralloc (NULL, filename);
1752 
1753  if (fname == NULL || fname.get ()[0] == '\0')
1754  {
1755  /* No program name was read, so we won't be able to retrieve more
1756  information about the process. */
1757  return 0;
1758  }
1759 
1760  memset (p, 0, sizeof (*p));
1761 
1762  /* Defining the PID. */
1763  p->pr_pid = pid;
1764 
1765  /* Copying the program name. Only the basename matters. */
1766  basename = lbasename (fname.get ());
1767  strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
1768  p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
1769 
1770  infargs = get_inferior_args ();
1771 
1772  /* The arguments of the program. */
1773  std::string psargs = fname.get ();
1774  if (infargs != NULL)
1775  psargs = psargs + " " + infargs;
1776 
1777  strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs));
1778  p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
1779 
1780  xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
1781  /* The contents of `/proc/PID/stat'. */
1782  gdb::unique_xmalloc_ptr<char> proc_stat_contents
1783  = target_fileio_read_stralloc (NULL, filename);
1784  char *proc_stat = proc_stat_contents.get ();
1785 
1786  if (proc_stat == NULL || *proc_stat == '\0')
1787  {
1788  /* Despite being unable to read more information about the
1789  process, we return 1 here because at least we have its
1790  command line, PID and arguments. */
1791  return 1;
1792  }
1793 
1794  /* Ok, we have the stats. It's time to do a little parsing of the
1795  contents of the buffer, so that we end up reading what we want.
1796 
1797  The following parsing mechanism is strongly based on the
1798  information generated by the `fs/proc/array.c' file, present in
1799  the Linux kernel tree. More details about how the information is
1800  displayed can be obtained by seeing the manpage of proc(5),
1801  specifically under the entry of `/proc/[pid]/stat'. */
1802 
1803  /* Getting rid of the PID, since we already have it. */
1804  while (isdigit (*proc_stat))
1805  ++proc_stat;
1806 
1807  proc_stat = skip_spaces (proc_stat);
1808 
1809  /* ps command also relies on no trailing fields ever contain ')'. */
1810  proc_stat = strrchr (proc_stat, ')');
1811  if (proc_stat == NULL)
1812  return 1;
1813  proc_stat++;
1814 
1815  proc_stat = skip_spaces (proc_stat);
1816 
1817  n_fields = sscanf (proc_stat,
1818  "%c" /* Process state. */
1819  "%d%d%d" /* Parent PID, group ID, session ID. */
1820  "%*d%*d" /* tty_nr, tpgid (not used). */
1821  "%u" /* Flags. */
1822  "%*s%*s%*s%*s" /* minflt, cminflt, majflt,
1823  cmajflt (not used). */
1824  "%*s%*s%*s%*s" /* utime, stime, cutime,
1825  cstime (not used). */
1826  "%*s" /* Priority (not used). */
1827  "%ld", /* Nice. */
1828  &pr_sname,
1829  &p->pr_ppid, &p->pr_pgrp, &p->pr_sid,
1830  &pr_flag,
1831  &pr_nice);
1832 
1833  if (n_fields != 6)
1834  {
1835  /* Again, we couldn't read the complementary information about
1836  the process state. However, we already have minimal
1837  information, so we just return 1 here. */
1838  return 1;
1839  }
1840 
1841  /* Filling the structure fields. */
1842  prog_state = strchr (valid_states, pr_sname);
1843  if (prog_state != NULL)
1844  p->pr_state = prog_state - valid_states;
1845  else
1846  {
1847  /* Zero means "Running". */
1848  p->pr_state = 0;
1849  }
1850 
1851  p->pr_sname = p->pr_state > 5 ? '.' : pr_sname;
1852  p->pr_zomb = p->pr_sname == 'Z';
1853  p->pr_nice = pr_nice;
1854  p->pr_flag = pr_flag;
1855 
1856  /* Finally, obtaining the UID and GID. For that, we read and parse the
1857  contents of the `/proc/PID/status' file. */
1858  xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
1859  /* The contents of `/proc/PID/status'. */
1860  gdb::unique_xmalloc_ptr<char> proc_status_contents
1861  = target_fileio_read_stralloc (NULL, filename);
1862  char *proc_status = proc_status_contents.get ();
1863 
1864  if (proc_status == NULL || *proc_status == '\0')
1865  {
1866  /* Returning 1 since we already have a bunch of information. */
1867  return 1;
1868  }
1869 
1870  /* Extracting the UID. */
1871  tmpstr = strstr (proc_status, "Uid:");
1872  if (tmpstr != NULL)
1873  {
1874  /* Advancing the pointer to the beginning of the UID. */
1875  tmpstr += sizeof ("Uid:");
1876  while (*tmpstr != '\0' && !isdigit (*tmpstr))
1877  ++tmpstr;
1878 
1879  if (isdigit (*tmpstr))
1880  p->pr_uid = strtol (tmpstr, &tmpstr, 10);
1881  }
1882 
1883  /* Extracting the GID. */
1884  tmpstr = strstr (proc_status, "Gid:");
1885  if (tmpstr != NULL)
1886  {
1887  /* Advancing the pointer to the beginning of the GID. */
1888  tmpstr += sizeof ("Gid:");
1889  while (*tmpstr != '\0' && !isdigit (*tmpstr))
1890  ++tmpstr;
1891 
1892  if (isdigit (*tmpstr))
1893  p->pr_gid = strtol (tmpstr, &tmpstr, 10);
1894  }
1895 
1896  return 1;
1897 }
1898 
1899 /* Build the note section for a corefile, and return it in a malloc
1900  buffer. */
1901 
1902 static char *
1903 linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
1904 {
1905  struct linux_corefile_thread_data thread_args;
1906  struct elf_internal_linux_prpsinfo prpsinfo;
1907  char *note_data = NULL;
1908  gdb_byte *auxv;
1909  int auxv_len;
1910  struct thread_info *curr_thr, *signalled_thr, *thr;
1911 
1913  return NULL;
1914 
1915  if (linux_fill_prpsinfo (&prpsinfo))
1916  {
1917  if (gdbarch_ptr_bit (gdbarch) == 64)
1918  note_data = elfcore_write_linux_prpsinfo64 (obfd,
1919  note_data, note_size,
1920  &prpsinfo);
1921  else
1922  note_data = elfcore_write_linux_prpsinfo32 (obfd,
1923  note_data, note_size,
1924  &prpsinfo);
1925  }
1926 
1927  /* Thread register information. */
1928  TRY
1929  {
1930  update_thread_list ();
1931  }
1933  {
1935  }
1936  END_CATCH
1937 
1938  /* Like the kernel, prefer dumping the signalled thread first.
1939  "First thread" is what tools use to infer the signalled thread.
1940  In case there's more than one signalled thread, prefer the
1941  current thread, if it is signalled. */
1942  curr_thr = inferior_thread ();
1943  if (curr_thr->suspend.stop_signal != GDB_SIGNAL_0)
1944  signalled_thr = curr_thr;
1945  else
1946  {
1947  signalled_thr = iterate_over_threads (find_signalled_thread, NULL);
1948  if (signalled_thr == NULL)
1949  signalled_thr = curr_thr;
1950  }
1951 
1952  thread_args.gdbarch = gdbarch;
1953  thread_args.obfd = obfd;
1954  thread_args.note_data = note_data;
1955  thread_args.note_size = note_size;
1956  thread_args.stop_signal = signalled_thr->suspend.stop_signal;
1957 
1958  linux_corefile_thread (signalled_thr, &thread_args);
1960  {
1961  if (thr == signalled_thr)
1962  continue;
1963  if (ptid_get_pid (thr->ptid) != ptid_get_pid (inferior_ptid))
1964  continue;
1965 
1966  linux_corefile_thread (thr, &thread_args);
1967  }
1968 
1969  note_data = thread_args.note_data;
1970  if (!note_data)
1971  return NULL;
1972 
1973  /* Auxillary vector. */
1975  NULL, &auxv);
1976  if (auxv_len > 0)
1977  {
1978  note_data = elfcore_write_note (obfd, note_data, note_size,
1979  "CORE", NT_AUXV, auxv, auxv_len);
1980  xfree (auxv);
1981 
1982  if (!note_data)
1983  return NULL;
1984  }
1985 
1986  /* SPU information. */
1987  note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
1988  if (!note_data)
1989  return NULL;
1990 
1991  /* File mappings. */
1992  note_data = linux_make_mappings_corefile_notes (gdbarch, obfd,
1993  note_data, note_size);
1994 
1995  return note_data;
1996 }
1997 
1998 /* Implementation of `gdbarch_gdb_signal_from_target', as defined in
1999  gdbarch.h. This function is not static because it is exported to
2000  other -tdep files. */
2001 
2002 enum gdb_signal
2004 {
2005  switch (signal)
2006  {
2007  case 0:
2008  return GDB_SIGNAL_0;
2009 
2010  case LINUX_SIGHUP:
2011  return GDB_SIGNAL_HUP;
2012 
2013  case LINUX_SIGINT:
2014  return GDB_SIGNAL_INT;
2015 
2016  case LINUX_SIGQUIT:
2017  return GDB_SIGNAL_QUIT;
2018 
2019  case LINUX_SIGILL:
2020  return GDB_SIGNAL_ILL;
2021 
2022  case LINUX_SIGTRAP:
2023  return GDB_SIGNAL_TRAP;
2024 
2025  case LINUX_SIGABRT:
2026  return GDB_SIGNAL_ABRT;
2027 
2028  case LINUX_SIGBUS:
2029  return GDB_SIGNAL_BUS;
2030 
2031  case LINUX_SIGFPE:
2032  return GDB_SIGNAL_FPE;
2033 
2034  case LINUX_SIGKILL:
2035  return GDB_SIGNAL_KILL;
2036 
2037  case LINUX_SIGUSR1:
2038  return GDB_SIGNAL_USR1;
2039 
2040  case LINUX_SIGSEGV:
2041  return GDB_SIGNAL_SEGV;
2042 
2043  case LINUX_SIGUSR2:
2044  return GDB_SIGNAL_USR2;
2045 
2046  case LINUX_SIGPIPE:
2047  return GDB_SIGNAL_PIPE;
2048 
2049  case LINUX_SIGALRM:
2050  return GDB_SIGNAL_ALRM;
2051 
2052  case LINUX_SIGTERM:
2053  return GDB_SIGNAL_TERM;
2054 
2055  case LINUX_SIGCHLD:
2056  return GDB_SIGNAL_CHLD;
2057 
2058  case LINUX_SIGCONT:
2059  return GDB_SIGNAL_CONT;
2060 
2061  case LINUX_SIGSTOP:
2062  return GDB_SIGNAL_STOP;
2063 
2064  case LINUX_SIGTSTP:
2065  return GDB_SIGNAL_TSTP;
2066 
2067  case LINUX_SIGTTIN:
2068  return GDB_SIGNAL_TTIN;
2069 
2070  case LINUX_SIGTTOU:
2071  return GDB_SIGNAL_TTOU;
2072 
2073  case LINUX_SIGURG:
2074  return GDB_SIGNAL_URG;
2075 
2076  case LINUX_SIGXCPU:
2077  return GDB_SIGNAL_XCPU;
2078 
2079  case LINUX_SIGXFSZ:
2080  return GDB_SIGNAL_XFSZ;
2081 
2082  case LINUX_SIGVTALRM:
2083  return GDB_SIGNAL_VTALRM;
2084 
2085  case LINUX_SIGPROF:
2086  return GDB_SIGNAL_PROF;
2087 
2088  case LINUX_SIGWINCH:
2089  return GDB_SIGNAL_WINCH;
2090 
2091  /* No way to differentiate between SIGIO and SIGPOLL.
2092  Therefore, we just handle the first one. */
2093  case LINUX_SIGIO:
2094  return GDB_SIGNAL_IO;
2095 
2096  case LINUX_SIGPWR:
2097  return GDB_SIGNAL_PWR;
2098 
2099  case LINUX_SIGSYS:
2100  return GDB_SIGNAL_SYS;
2101 
2102  /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
2103  therefore we have to handle them here. */
2104  case LINUX_SIGRTMIN:
2105  return GDB_SIGNAL_REALTIME_32;
2106 
2107  case LINUX_SIGRTMAX:
2108  return GDB_SIGNAL_REALTIME_64;
2109  }
2110 
2111  if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1)
2112  {
2113  int offset = signal - LINUX_SIGRTMIN + 1;
2114 
2115  return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset);
2116  }
2117 
2118  return GDB_SIGNAL_UNKNOWN;
2119 }
2120 
2121 /* Implementation of `gdbarch_gdb_signal_to_target', as defined in
2122  gdbarch.h. This function is not static because it is exported to
2123  other -tdep files. */
2124 
2125 int
2127  enum gdb_signal signal)
2128 {
2129  switch (signal)
2130  {
2131  case GDB_SIGNAL_0:
2132  return 0;
2133 
2134  case GDB_SIGNAL_HUP:
2135  return LINUX_SIGHUP;
2136 
2137  case GDB_SIGNAL_INT:
2138  return LINUX_SIGINT;
2139 
2140  case GDB_SIGNAL_QUIT:
2141  return LINUX_SIGQUIT;
2142 
2143  case GDB_SIGNAL_ILL:
2144  return LINUX_SIGILL;
2145 
2146  case GDB_SIGNAL_TRAP:
2147  return LINUX_SIGTRAP;
2148 
2149  case GDB_SIGNAL_ABRT:
2150  return LINUX_SIGABRT;
2151 
2152  case GDB_SIGNAL_FPE:
2153  return LINUX_SIGFPE;
2154 
2155  case GDB_SIGNAL_KILL:
2156  return LINUX_SIGKILL;
2157 
2158  case GDB_SIGNAL_BUS:
2159  return LINUX_SIGBUS;
2160 
2161  case GDB_SIGNAL_SEGV:
2162  return LINUX_SIGSEGV;
2163 
2164  case GDB_SIGNAL_SYS:
2165  return LINUX_SIGSYS;
2166 
2167  case GDB_SIGNAL_PIPE:
2168  return LINUX_SIGPIPE;
2169 
2170  case GDB_SIGNAL_ALRM:
2171  return LINUX_SIGALRM;
2172 
2173  case GDB_SIGNAL_TERM:
2174  return LINUX_SIGTERM;
2175 
2176  case GDB_SIGNAL_URG:
2177  return LINUX_SIGURG;
2178 
2179  case GDB_SIGNAL_STOP:
2180  return LINUX_SIGSTOP;
2181 
2182  case GDB_SIGNAL_TSTP:
2183  return LINUX_SIGTSTP;
2184 
2185  case GDB_SIGNAL_CONT:
2186  return LINUX_SIGCONT;
2187 
2188  case GDB_SIGNAL_CHLD:
2189  return LINUX_SIGCHLD;
2190 
2191  case GDB_SIGNAL_TTIN:
2192  return LINUX_SIGTTIN;
2193 
2194  case GDB_SIGNAL_TTOU:
2195  return LINUX_SIGTTOU;
2196 
2197  case GDB_SIGNAL_IO:
2198  return LINUX_SIGIO;
2199 
2200  case GDB_SIGNAL_XCPU:
2201  return LINUX_SIGXCPU;
2202 
2203  case GDB_SIGNAL_XFSZ:
2204  return LINUX_SIGXFSZ;
2205 
2206  case GDB_SIGNAL_VTALRM:
2207  return LINUX_SIGVTALRM;
2208 
2209  case GDB_SIGNAL_PROF:
2210  return LINUX_SIGPROF;
2211 
2212  case GDB_SIGNAL_WINCH:
2213  return LINUX_SIGWINCH;
2214 
2215  case GDB_SIGNAL_USR1:
2216  return LINUX_SIGUSR1;
2217 
2218  case GDB_SIGNAL_USR2:
2219  return LINUX_SIGUSR2;
2220 
2221  case GDB_SIGNAL_PWR:
2222  return LINUX_SIGPWR;
2223 
2224  case GDB_SIGNAL_POLL:
2225  return LINUX_SIGPOLL;
2226 
2227  /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
2228  therefore we have to handle it here. */
2229  case GDB_SIGNAL_REALTIME_32:
2230  return LINUX_SIGRTMIN;
2231 
2232  /* Same comment applies to _64. */
2233  case GDB_SIGNAL_REALTIME_64:
2234  return LINUX_SIGRTMAX;
2235  }
2236 
2237  /* GDB_SIGNAL_REALTIME_33 to _64 are continuous. */
2238  if (signal >= GDB_SIGNAL_REALTIME_33
2239  && signal <= GDB_SIGNAL_REALTIME_63)
2240  {
2241  int offset = signal - GDB_SIGNAL_REALTIME_33;
2242 
2243  return LINUX_SIGRTMIN + 1 + offset;
2244  }
2245 
2246  return -1;
2247 }
2248 
2249 /* Helper for linux_vsyscall_range that does the real work of finding
2250  the vsyscall's address range. */
2251 
2252 static int
2254 {
2255  char filename[100];
2256  long pid;
2257 
2258  if (target_auxv_search (&current_target, AT_SYSINFO_EHDR, &range->start) <= 0)
2259  return 0;
2260 
2261  /* It doesn't make sense to access the host's /proc when debugging a
2262  core file. Instead, look for the PT_LOAD segment that matches
2263  the vDSO. */
2264  if (!target_has_execution)
2265  {
2266  Elf_Internal_Phdr *phdrs;
2267  long phdrs_size;
2268  int num_phdrs, i;
2269 
2270  phdrs_size = bfd_get_elf_phdr_upper_bound (core_bfd);
2271  if (phdrs_size == -1)
2272  return 0;
2273 
2274  phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
2275  num_phdrs = bfd_get_elf_phdrs (core_bfd, phdrs);
2276  if (num_phdrs == -1)
2277  return 0;
2278 
2279  for (i = 0; i < num_phdrs; i++)
2280  if (phdrs[i].p_type == PT_LOAD
2281  && phdrs[i].p_vaddr == range->start)
2282  {
2283  range->length = phdrs[i].p_memsz;
2284  return 1;
2285  }
2286 
2287  return 0;
2288  }
2289 
2290  /* We need to know the real target PID to access /proc. */
2291  if (current_inferior ()->fake_pid_p)
2292  return 0;
2293 
2294  pid = current_inferior ()->pid;
2295 
2296  /* Note that reading /proc/PID/task/PID/maps (1) is much faster than
2297  reading /proc/PID/maps (2). The later identifies thread stacks
2298  in the output, which requires scanning every thread in the thread
2299  group to check whether a VMA is actually a thread's stack. With
2300  Linux 4.4 on an Intel i7-4810MQ @ 2.80GHz, with an inferior with
2301  a few thousand threads, (1) takes a few miliseconds, while (2)
2302  takes several seconds. Also note that "smaps", what we read for
2303  determining core dump mappings, is even slower than "maps". */
2304  xsnprintf (filename, sizeof filename, "/proc/%ld/task/%ld/maps", pid, pid);
2306  = target_fileio_read_stralloc (NULL, filename);
2307  if (data != NULL)
2308  {
2309  char *line;
2310  char *saveptr = NULL;
2311 
2312  for (line = strtok_r (data.get (), "\n", &saveptr);
2313  line != NULL;
2314  line = strtok_r (NULL, "\n", &saveptr))
2315  {
2316  ULONGEST addr, endaddr;
2317  const char *p = line;
2318 
2319  addr = strtoulst (p, &p, 16);
2320  if (addr == range->start)
2321  {
2322  if (*p == '-')
2323  p++;
2324  endaddr = strtoulst (p, &p, 16);
2325  range->length = endaddr - addr;
2326  return 1;
2327  }
2328  }
2329  }
2330  else
2331  warning (_("unable to open /proc file '%s'"), filename);
2332 
2333  return 0;
2334 }
2335 
2336 /* Implementation of the "vsyscall_range" gdbarch hook. Handles
2337  caching, and defers the real work to linux_vsyscall_range_raw. */
2338 
2339 static int
2341 {
2342  struct linux_info *info = get_linux_inferior_data ();
2343 
2344  if (info->vsyscall_range_p == 0)
2345  {
2347  info->vsyscall_range_p = 1;
2348  else
2349  info->vsyscall_range_p = -1;
2350  }
2351 
2352  if (info->vsyscall_range_p < 0)
2353  return 0;
2354 
2355  *range = info->vsyscall_range;
2356  return 1;
2357 }
2358 
2359 /* Symbols for linux_infcall_mmap's ARG_FLAGS; their Linux MAP_* system
2360  definitions would be dependent on compilation host. */
2361 #define GDB_MMAP_MAP_PRIVATE 0x02 /* Changes are private. */
2362 #define GDB_MMAP_MAP_ANONYMOUS 0x20 /* Don't use a file. */
2363 
2364 /* See gdbarch.sh 'infcall_mmap'. */
2365 
2366 static CORE_ADDR
2368 {
2369  struct objfile *objf;
2370  /* Do there still exist any Linux systems without "mmap64"?
2371  "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32. */
2372  struct value *mmap_val = find_function_in_inferior ("mmap64", &objf);
2373  struct value *addr_val;
2374  struct gdbarch *gdbarch = get_objfile_arch (objf);
2375  CORE_ADDR retval;
2376  enum
2377  {
2378  ARG_ADDR, ARG_LENGTH, ARG_PROT, ARG_FLAGS, ARG_FD, ARG_OFFSET, ARG_LAST
2379  };
2380  struct value *arg[ARG_LAST];
2381 
2382  arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2383  0);
2384  /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2385  arg[ARG_LENGTH] = value_from_ulongest
2386  (builtin_type (gdbarch)->builtin_unsigned_long, size);
2388  | GDB_MMAP_PROT_EXEC))
2389  == 0);
2390  arg[ARG_PROT] = value_from_longest (builtin_type (gdbarch)->builtin_int, prot);
2391  arg[ARG_FLAGS] = value_from_longest (builtin_type (gdbarch)->builtin_int,
2394  arg[ARG_FD] = value_from_longest (builtin_type (gdbarch)->builtin_int, -1);
2395  arg[ARG_OFFSET] = value_from_longest (builtin_type (gdbarch)->builtin_int64,
2396  0);
2397  addr_val = call_function_by_hand (mmap_val, NULL, ARG_LAST, arg);
2398  retval = value_as_address (addr_val);
2399  if (retval == (CORE_ADDR) -1)
2400  error (_("Failed inferior mmap call for %s bytes, errno is changed."),
2401  pulongest (size));
2402  return retval;
2403 }
2404 
2405 /* See gdbarch.sh 'infcall_munmap'. */
2406 
2407 static void
2409 {
2410  struct objfile *objf;
2411  struct value *munmap_val = find_function_in_inferior ("munmap", &objf);
2412  struct value *retval_val;
2413  struct gdbarch *gdbarch = get_objfile_arch (objf);
2414  LONGEST retval;
2415  enum
2416  {
2417  ARG_ADDR, ARG_LENGTH, ARG_LAST
2418  };
2419  struct value *arg[ARG_LAST];
2420 
2421  arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2422  addr);
2423  /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2424  arg[ARG_LENGTH] = value_from_ulongest
2425  (builtin_type (gdbarch)->builtin_unsigned_long, size);
2426  retval_val = call_function_by_hand (munmap_val, NULL, ARG_LAST, arg);
2427  retval = value_as_long (retval_val);
2428  if (retval != 0)
2429  warning (_("Failed inferior munmap call at %s for %s bytes, "
2430  "errno is changed."),
2431  hex_string (addr), pulongest (size));
2432 }
2433 
2434 /* See linux-tdep.h. */
2435 
2436 CORE_ADDR
2438 {
2439  CORE_ADDR addr;
2440  int bp_len;
2441 
2442  /* Determine entry point from target auxiliary vector. This avoids
2443  the need for symbols. Also, when debugging a stand-alone SPU
2444  executable, entry_point_address () will point to an SPU
2445  local-store address and is thus not usable as displaced stepping
2446  location. The auxiliary vector gets us the PowerPC-side entry
2447  point address instead. */
2448  if (target_auxv_search (&current_target, AT_ENTRY, &addr) <= 0)
2450  _("Cannot find AT_ENTRY auxiliary vector entry."));
2451 
2452  /* Make certain that the address points at real code, and not a
2453  function descriptor. */
2455  &current_target);
2456 
2457  /* Inferior calls also use the entry point as a breakpoint location.
2458  We don't want displaced stepping to interfere with those
2459  breakpoints, so leave space. */
2460  gdbarch_breakpoint_from_pc (gdbarch, &addr, &bp_len);
2461  addr += bp_len * 2;
2462 
2463  return addr;
2464 }
2465 
2466 /* Display whether the gcore command is using the
2467  /proc/PID/coredump_filter file. */
2468 
2469 static void
2470 show_use_coredump_filter (struct ui_file *file, int from_tty,
2471  struct cmd_list_element *c, const char *value)
2472 {
2473  fprintf_filtered (file, _("Use of /proc/PID/coredump_filter file to generate"
2474  " corefiles is %s.\n"), value);
2475 }
2476 
2477 /* Display whether the gcore command is dumping mappings marked with
2478  the VM_DONTDUMP flag. */
2479 
2480 static void
2481 show_dump_excluded_mappings (struct ui_file *file, int from_tty,
2482  struct cmd_list_element *c, const char *value)
2483 {
2484  fprintf_filtered (file, _("Dumping of mappings marked with the VM_DONTDUMP"
2485  " flag is %s.\n"), value);
2486 }
2487 
2488 /* To be called from the various GDB_OSABI_LINUX handlers for the
2489  various GNU/Linux architectures and machine types. */
2490 
2491 void
2493 {
2510 }
2511 
2512 void
2514 {
2517 
2518  /* Set a cache per-inferior. */
2520  = register_inferior_data_with_cleanup (NULL, linux_inferior_data_cleanup);
2521  /* Observers used to invalidate the cache when needed. */
2524 
2525  add_setshow_boolean_cmd ("use-coredump-filter", class_files,
2526  &use_coredump_filter, _("\
2527 Set whether gcore should consider /proc/PID/coredump_filter."),
2528  _("\
2529 Show whether gcore should consider /proc/PID/coredump_filter."),
2530  _("\
2531 Use this command to set whether gcore should consider the contents\n\
2532 of /proc/PID/coredump_filter when generating the corefile. For more information\n\
2533 about this file, refer to the manpage of core(5)."),
2535  &setlist, &showlist);
2536 
2537  add_setshow_boolean_cmd ("dump-excluded-mappings", class_files,
2539 Set whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2540  _("\
2541 Show whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2542  _("\
2543 Use this command to set whether gcore should dump mappings marked with the\n\
2544 VM_DONTDUMP flag (\"dd\" in /proc/PID/smaps) when generating the corefile. For\n\
2545 more information about this file, refer to the manpage of proc(5) and core(5)."),
2547  &setlist, &showlist);
2548 }
struct gdbarch * target_gdbarch(void)
Definition: gdbarch.c:5467
const char * string
Definition: signals.c:50
ssize_t read(int fd, void *buf, size_t count)
Definition: expect-read1.c:26
static void show_use_coredump_filter(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: linux-tdep.c:2470
unsigned int exclude_coredump
Definition: linux-tdep.c:84
static void * init_linux_gdbarch_data(struct gdbarch *gdbarch)
Definition: linux-tdep.c:174
struct type * arch_type(struct gdbarch *gdbarch, enum type_code code, int bit, const char *name)
Definition: gdbtypes.c:4941
int linux_is_uclinux(void)
Definition: linux-tdep.c:401
void set_gdbarch_core_pid_to_str(struct gdbarch *gdbarch, gdbarch_core_pid_to_str_ftype core_pid_to_str)
Definition: gdbarch.c:3767
int vsyscall_range_p
Definition: linux-tdep.c:204
void set_gdbarch_gdb_signal_to_target(struct gdbarch *gdbarch, gdbarch_gdb_signal_to_target_ftype gdb_signal_to_target)
Definition: gdbarch.c:4209
bfd_vma CORE_ADDR
Definition: common-types.h:41
static int linux_vsyscall_range_raw(struct gdbarch *gdbarch, struct mem_range *range)
Definition: linux-tdep.c:2253
int ptid_get_pid(const ptid_t &ptid)
Definition: ptid.c:47
static linux_find_memory_region_ftype linux_make_mappings_callback
Definition: linux-tdep.c:1480
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
Definition: gnu-nat.c:1824
void xfree(void *)
char * get_inferior_args(void)
Definition: infcmd.c:161
void set_gdbarch_infcall_mmap(struct gdbarch *gdbarch, gdbarch_infcall_mmap_ftype infcall_mmap)
Definition: gdbarch.c:4972
char * target_fileio_readlink(struct inferior *inf, const char *filename, int *target_errno)
Definition: target.c:2967
LONGEST value_as_long(struct value *val)
Definition: value.c:2749
struct type * linux_get_siginfo_type_with_fields(struct gdbarch *gdbarch, linux_siginfo_extra_fields extra_fields)
Definition: linux-tdep.c:255
void(* func)(char *)
int gdbarch_int_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1579
if(!(yy_init))
Definition: ada-lex.c:1075
struct gdbarch * gdbarch
Definition: linux-tdep.c:1674
void warning(const char *fmt,...)
Definition: errors.c:26
regcache(gdbarch *gdbarch)
Definition: regcache.h:235
#define TYPE_NAME(thistype)
Definition: gdbtypes.h:1224
void set_gdbarch_get_siginfo_type(struct gdbarch *gdbarch, gdbarch_get_siginfo_type_ftype get_siginfo_type)
Definition: gdbarch.c:4233
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1831
static void linux_core_info_proc_mappings(struct gdbarch *gdbarch, const char *args)
Definition: linux-tdep.c:1002
LONGEST target_read_alloc(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte **buf_p)
Definition: target.c:1918
static int linux_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
Definition: linux-tdep.c:2340
std::vector< T, gdb::default_init_allocator< T > > def_vector
Definition: def-vector.h:32
LONGEST length
Definition: value.c:68
void * memset(T *s, int c, size_t n)=delete
int pid
Definition: inferior.h:328
struct thread_info * inferior_thread(void)
Definition: thread.c:90
#define GDB_MMAP_MAP_PRIVATE
Definition: linux-tdep.c:2361
void set_gdbarch_gdb_signal_from_target(struct gdbarch *gdbarch, gdbarch_gdb_signal_from_target_ftype gdb_signal_from_target)
Definition: gdbarch.c:4185
void linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
Definition: linux-tdep.c:2492
static void linux_core_info_proc(struct gdbarch *gdbarch, const char *args, enum info_proc_what what)
Definition: linux-tdep.c:1102
void set_gdbarch_find_memory_regions(struct gdbarch *gdbarch, gdbarch_find_memory_regions_ftype find_memory_regions)
Definition: gdbarch.c:3695
int gdbarch_long_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1596
struct observer * observer_attach_inferior_exit(observer_inferior_exit_ftype *f)
void target_fetch_registers(struct regcache *regcache, int regno)
Definition: target.c:3437
char * skip_spaces(char *chp)
Definition: common-utils.c:337
struct obstack * filename_obstack
Definition: linux-tdep.c:1474
#define _(String)
Definition: gdb_locale.h:35
enum gdb_signal stop_signal
Definition: gdbthread.h:158
void set_gdbarch_core_xfer_siginfo(struct gdbarch *gdbarch, gdbarch_core_xfer_siginfo_ftype core_xfer_siginfo)
Definition: gdbarch.c:3815
unsigned int uses_huge_tlb
Definition: linux-tdep.c:80
#define END_CATCH
static void linux_infcall_munmap(CORE_ADDR addr, CORE_ADDR size)
Definition: linux-tdep.c:2408
void printf_filtered(const char *format,...)
Definition: utils.c:2045
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE)
Definition: gdbarch.h:1709
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: utils.c:2745
struct type * arch_integer_type(struct gdbarch *gdbarch, int bit, int unsigned_p, const char *name)
Definition: gdbtypes.c:4962
static char * linux_make_mappings_corefile_notes(struct gdbarch *gdbarch, bfd *obfd, char *note_data, int *note_size)
Definition: linux-tdep.c:1518
find_memory_region_ftype func
Definition: linux-tdep.c:1338
static int linux_has_shared_address_space(struct gdbarch *gdbarch)
Definition: linux-tdep.c:410
static void invalidate_linux_cache_inf(struct inferior *inf)
Definition: linux-tdep.c:211
struct type * long_type
Definition: linux-tdep.c:1477
scoped_restore_tmpl< T > make_scoped_restore(T *var)
Definition: regset.h:34
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
const char * normal_pid_to_str(ptid_t ptid)
Definition: target.c:3234
#define TRY
static struct linux_gdbarch_data * get_linux_gdbarch_data(struct gdbarch *gdbarch)
Definition: linux-tdep.c:180
static char * linux_make_corefile_notes(struct gdbarch *gdbarch, bfd *obfd, int *note_size)
Definition: linux-tdep.c:1903
struct thread_info * iterate_over_threads(thread_callback_func, void *)
Definition: thread.c:551
#define GDB_MMAP_MAP_ANONYMOUS
Definition: linux-tdep.c:2362
struct cmd_list_element * setlist
Definition: cli-cmds.c:111
static int mapping_is_anonymous_p(const char *filename)
Definition: linux-tdep.c:552
unsigned int initialized_p
Definition: linux-tdep.c:72
void append_composite_type_field(struct type *t, const char *name, struct type *field)
Definition: gdbtypes.c:5208
int gdbarch_iterate_over_regset_sections_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3630
#define CATCH(EXCEPTION, MASK)
thread_suspend_state suspend
Definition: gdbthread.h:295
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
struct target_ops current_target
enum gdb_signal linux_gdb_signal_from_target(struct gdbarch *gdbarch, int signal)
Definition: linux-tdep.c:2003
static CORE_ADDR linux_infcall_mmap(CORE_ADDR size, unsigned prot)
Definition: linux-tdep.c:2367
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
struct value * find_function_in_inferior(const char *name, struct objfile **objf_p)
Definition: valops.c:127
static const struct inferior_data * linux_inferior_data
Definition: linux-tdep.c:187
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
Definition: defs.h:577
Definition: defs.h:420
long ptid_get_tid(const ptid_t &ptid)
Definition: ptid.c:63
Definition: ptid.h:35
CORE_ADDR gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: gdbarch.c:3191
Definition: defs.h:417
void set_gdbarch_infcall_munmap(struct gdbarch *gdbarch, gdbarch_infcall_munmap_ftype infcall_munmap)
Definition: gdbarch.c:4989
int target_auxv_search(struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
Definition: auxv.c:375
struct cmd_list_element * showlist
Definition: cli-cmds.c:119
void exception_print(struct ui_file *file, struct gdb_exception e)
Definition: exceptions.c:109
void puts_filtered(const char *string)
Definition: utils.c:2085
static struct type * linux_get_siginfo_type(struct gdbarch *gdbarch)
Definition: linux-tdep.c:392
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
Definition: cleanups.c:116
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
Definition: objfiles.c:445
#define TARGET_CHAR_BIT
Definition: host-defs.h:29
static void linux_inferior_data_cleanup(struct inferior *inf, void *arg)
Definition: linux-tdep.c:228
Definition: gdbtypes.h:749
int gdb_signal_to_host(enum gdb_signal)
Definition: signals.c:639
struct type * init_vector_type(struct type *elt_type, int n)
Definition: gdbtypes.c:1334
#define TYPE_TARGET_STUB(t)
Definition: gdbtypes.h:225
#define GDB_MMAP_PROT_READ
Definition: arch-utils.h:243
Definition: gnu-nat.c:174
compiled_regex dev_zero
Definition: linux-tdep.c:513
static const char * type
Definition: language.c:113
#define GDB_MMAP_PROT_WRITE
Definition: arch-utils.h:244
static void linux_info_proc(struct gdbarch *gdbarch, const char *args, enum info_proc_what what)
Definition: linux-tdep.c:716
struct value * value_from_longest(struct type *type, LONGEST num)
Definition: value.c:3534
unsigned dummy
Definition: go32-nat.c:1073
struct mem_range vsyscall_range
Definition: linux-tdep.c:199
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
Definition: gnu-nat.c:1822
static void decode_vmflags(char *p, struct smaps_vmflags *v)
Definition: linux-tdep.c:479
static int linux_find_memory_regions(struct gdbarch *gdbarch, find_memory_region_ftype func, void *obfd)
Definition: linux-tdep.c:1364
const char * skip_to_space(const char *chp)
Definition: common-utils.c:361
int gdbarch_addr_bit(struct gdbarch *gdbarch)
Definition: gdbarch.c:1848
ptid_t ptid
Definition: gdbthread.h:219
void set_gdbarch_make_corefile_notes(struct gdbarch *gdbarch, gdbarch_make_corefile_notes_ftype make_corefile_notes)
Definition: gdbarch.c:3671
struct obstack * data_obstack
Definition: linux-tdep.c:1471
#define target_has_execution
Definition: target.h:1756
Definition: value.c:62
static void linux_collect_regset_section_cb(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
Definition: linux-tdep.c:1582
ULONGEST strtoulst(const char *num, const char **trailer, int base)
Definition: common-utils.c:266
#define GDB_MMAP_PROT_EXEC
Definition: arch-utils.h:245
const char * c_str() const
Definition: gdbcore.h:258
info_proc_what
Definition: defs.h:399
void set_gdbarch_has_shared_address_space(struct gdbarch *gdbarch, gdbarch_has_shared_address_space_ftype has_shared_address_space)
Definition: gdbarch.c:4646
static int linux_fill_prpsinfo(struct elf_internal_linux_prpsinfo *p)
Definition: linux-tdep.c:1719
static char * linux_collect_thread_registers(const struct regcache *regcache, ptid_t ptid, bfd *obfd, char *note_data, int *note_size, enum gdb_signal stop_signal)
Definition: linux-tdep.c:1617
struct observer * observer_attach_inferior_appeared(observer_inferior_appeared_ftype *f)
int linux_find_memory_region_ftype(ULONGEST vaddr, ULONGEST size, ULONGEST offset, ULONGEST inode, int read, int write, int exec, int modified, const char *filename, void *data)
Definition: linux-tdep.c:1146
void * xmalloc(YYSIZE_T)
DEF_ENUM_FLAGS_TYPE(enum filter_flag, filter_flags)
long ptid_get_lwp(const ptid_t &ptid)
Definition: ptid.c:55
CORE_ADDR linux_displaced_step_location(struct gdbarch *gdbarch)
Definition: linux-tdep.c:2437
void _initialize_linux_tdep(void)
Definition: linux-tdep.c:2513
void append_composite_type_field_aligned(struct type *t, const char *name, struct type *field, int alignment)
Definition: gdbtypes.c:5168
#define gdb_assert(expr)
Definition: gdb_assert.h:32
static int find_signalled_thread(struct thread_info *info, void *data)
Definition: linux-tdep.c:1380
Definition: value.c:169
static char * linux_spu_make_corefile_notes(bfd *obfd, char *note_data, int *note_size)
Definition: linux-tdep.c:1392
static void read_mapping(const char *line, ULONGEST *addr, ULONGEST *endaddr, const char **permissions, size_t *permissions_len, ULONGEST *offset, const char **device, size_t *device_len, ULONGEST *inode, const char **filename)
Definition: linux-tdep.c:434
void set_gdbarch_core_info_proc(struct gdbarch *gdbarch, gdbarch_core_info_proc_ftype core_info_proc)
Definition: gdbarch.c:4812
#define gdb_static_assert(expr)
Definition: gdb_assert.h:25
bfd_byte gdb_byte
Definition: common-types.h:38
struct gdbarch * gdbarch_from_bfd(bfd *abfd)
Definition: arch-utils.c:577
struct value * value_from_pointer(struct type *type, CORE_ADDR addr)
Definition: value.c:3560
compiled_regex file_deleted
Definition: linux-tdep.c:537
T & emplace(Args &&... args)
Definition: gdb_optional.h:152
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
static int linux_find_memory_regions_thunk(ULONGEST vaddr, ULONGEST size, ULONGEST offset, ULONGEST inode, int read, int write, int exec, int modified, const char *filename, void *arg)
Definition: linux-tdep.c:1349
int linux_gdb_signal_to_target(struct gdbarch *gdbarch, enum gdb_signal signal)
Definition: linux-tdep.c:2126
#define ALL_NON_EXITED_THREADS(T)
Definition: gdbthread.h:490
#define gdb_stderr
Definition: utils.h:344
#define XCNEW(T)
Definition: poison.h:121
void update_thread_list(void)
Definition: thread.c:2000
Definition: defs.h:411
gdb::unique_xmalloc_ptr< char > target_fileio_read_stralloc(struct inferior *inf, const char *filename)
Definition: target.c:3082
int xsnprintf(char *str, size_t size, const char *format,...)
Definition: common-utils.c:134
struct type * siginfo_type
Definition: linux-tdep.c:170
void set_gdbarch_info_proc(struct gdbarch *gdbarch, gdbarch_info_proc_ftype info_proc)
Definition: gdbarch.c:4788
const gdb_byte * gdbarch_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
Definition: gdbarch.c:2844
int gdbarch_get_siginfo_type_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:4216
enum gdb_signal stop_signal
Definition: linux-tdep.c:1678
ptid_t inferior_ptid
Definition: infcmd.c:94
static int dump_excluded_mappings
Definition: linux-tdep.c:99
const struct regcache * regcache
Definition: linux-tdep.c:1569
int offset
Definition: agent.c:65
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
Definition: cli-decode.c:569
gdbarch * arch() const
Definition: regcache.c:221
static gdb::byte_vector linux_get_siginfo_data(thread_info *thread, struct gdbarch *gdbarch)
Definition: linux-tdep.c:1649
void ** data
Definition: gdbarch.c:148
gdb::def_vector< gdb_byte > byte_vector
Definition: byte-vector.h:58
struct inferior * current_inferior(void)
Definition: inferior.c:58
unsigned long long ULONGEST
Definition: common-types.h:53
struct value * call_function_by_hand(struct value *function, type *default_return_type, int nargs, struct value **args)
Definition: infcall.c:690
static int linux_find_memory_regions_full(struct gdbarch *gdbarch, linux_find_memory_region_ftype *func, void *obfd)
Definition: linux-tdep.c:1156
#define obstack_grow_str0(OBSTACK, STRING)
Definition: gdb_obstack.h:48
static int dump_mapping_p(filter_flags filterflags, const struct smaps_vmflags *v, int maybe_private_p, int mapping_anon_p, int mapping_file_p, const char *filename)
Definition: linux-tdep.c:636
LONGEST target_read(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *buf, ULONGEST offset, LONGEST len)
Definition: target.c:1562
struct value * value_from_ulongest(struct type *type, ULONGEST num)
Definition: value.c:3546
CORE_ADDR value_as_address(struct value *val)
Definition: value.c:2762
static struct linux_info * get_linux_inferior_data(void)
Definition: linux-tdep.c:237
static int use_coredump_filter
Definition: linux-tdep.c:94
static void linux_corefile_thread(struct thread_info *info, struct linux_corefile_thread_data *args)
Definition: linux-tdep.c:1685
bfd * core_bfd
Definition: corefile.c:54
compiled_regex shmem_file
Definition: linux-tdep.c:521
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
filter_flag
Definition: linux-tdep.c:51
#define HOST_CHAR_BIT
Definition: host-defs.h:40
unsigned int io_page
Definition: linux-tdep.c:76
Definition: defs.h:423
static const char * linux_core_pid_to_str(struct gdbarch *gdbarch, ptid_t ptid)
Definition: linux-tdep.c:418
int(* find_memory_region_ftype)(CORE_ADDR addr, unsigned long size, int read, int write, int exec, int modified, void *data)
Definition: defs.h:371
void pack_long(gdb_byte *buf, struct type *type, LONGEST num)
Definition: value.c:3450
static void show_dump_excluded_mappings(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
Definition: linux-tdep.c:2481
struct type * gdbarch_get_siginfo_type(struct gdbarch *gdbarch)
Definition: gdbarch.c:4223
static LONGEST linux_core_xfer_siginfo(struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
Definition: linux-tdep.c:1132
bool fake_pid_p
Definition: inferior.h:330
void error(const char *fmt,...)
Definition: errors.c:38
size_t size
Definition: go32-nat.c:242
unsigned int shared_mapping
Definition: linux-tdep.c:88
struct gdbarch_data * gdbarch_data_register_post_init(gdbarch_data_post_init_ftype *post_init)
Definition: gdbarch.c:5136
struct type * lookup_pointer_type(struct type *type)
Definition: gdbtypes.c:381
void throw_error(enum errors error, const char *fmt,...)
long long LONGEST
Definition: common-types.h:52
struct type * arch_composite_type(struct gdbarch *gdbarch, const char *name, enum type_code code)
Definition: gdbtypes.c:5132
void do_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:174
void set_gdbarch_vsyscall_range(struct gdbarch *gdbarch, gdbarch_vsyscall_range_ftype vsyscall_range)
Definition: gdbarch.c:4955
struct regcache * get_thread_arch_regcache(ptid_t ptid, struct gdbarch *gdbarch)
Definition: regcache.c:423
static struct gdbarch_data * linux_gdbarch_data_handle
Definition: linux-tdep.c:166
static struct gdbarch * core_gdbarch
Definition: corelow.c:67
void gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
Definition: gdbarch.c:3637
int exec(const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) const
Definition: gdb_regex.c:45
collect_regset_ftype * collect_regset
Definition: regset.h:45