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