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