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