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