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