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