* breakpoint.c (catch_syscall_split_args): Use skip_spaces.
[external/binutils.git] / gdb / linux-tdep.c
1 /* Target-dependent code for GNU/Linux, architecture independent.
2
3    Copyright (C) 2009-2013 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 "cli/cli-utils.h"
36
37 #include <ctype.h>
38
39 static struct gdbarch_data *linux_gdbarch_data_handle;
40
41 struct linux_gdbarch_data
42   {
43     struct type *siginfo_type;
44   };
45
46 static void *
47 init_linux_gdbarch_data (struct gdbarch *gdbarch)
48 {
49   return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct linux_gdbarch_data);
50 }
51
52 static struct linux_gdbarch_data *
53 get_linux_gdbarch_data (struct gdbarch *gdbarch)
54 {
55   return gdbarch_data (gdbarch, linux_gdbarch_data_handle);
56 }
57
58 /* This function is suitable for architectures that don't
59    extend/override the standard siginfo structure.  */
60
61 struct type *
62 linux_get_siginfo_type (struct gdbarch *gdbarch)
63 {
64   struct linux_gdbarch_data *linux_gdbarch_data;
65   struct type *int_type, *uint_type, *long_type, *void_ptr_type;
66   struct type *uid_type, *pid_type;
67   struct type *sigval_type, *clock_type;
68   struct type *siginfo_type, *sifields_type;
69   struct type *type;
70
71   linux_gdbarch_data = get_linux_gdbarch_data (gdbarch);
72   if (linux_gdbarch_data->siginfo_type != NULL)
73     return linux_gdbarch_data->siginfo_type;
74
75   int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
76                                 0, "int");
77   uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
78                                  1, "unsigned int");
79   long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
80                                  0, "long");
81   void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
82
83   /* sival_t */
84   sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
85   TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
86   append_composite_type_field (sigval_type, "sival_int", int_type);
87   append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
88
89   /* __pid_t */
90   pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
91                         TYPE_LENGTH (int_type), "__pid_t");
92   TYPE_TARGET_TYPE (pid_type) = int_type;
93   TYPE_TARGET_STUB (pid_type) = 1;
94
95   /* __uid_t */
96   uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
97                         TYPE_LENGTH (uint_type), "__uid_t");
98   TYPE_TARGET_TYPE (uid_type) = uint_type;
99   TYPE_TARGET_STUB (uid_type) = 1;
100
101   /* __clock_t */
102   clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
103                           TYPE_LENGTH (long_type), "__clock_t");
104   TYPE_TARGET_TYPE (clock_type) = long_type;
105   TYPE_TARGET_STUB (clock_type) = 1;
106
107   /* _sifields */
108   sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
109
110   {
111     const int si_max_size = 128;
112     int si_pad_size;
113     int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
114
115     /* _pad */
116     if (gdbarch_ptr_bit (gdbarch) == 64)
117       si_pad_size = (si_max_size / size_of_int) - 4;
118     else
119       si_pad_size = (si_max_size / size_of_int) - 3;
120     append_composite_type_field (sifields_type, "_pad",
121                                  init_vector_type (int_type, si_pad_size));
122   }
123
124   /* _kill */
125   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
126   append_composite_type_field (type, "si_pid", pid_type);
127   append_composite_type_field (type, "si_uid", uid_type);
128   append_composite_type_field (sifields_type, "_kill", type);
129
130   /* _timer */
131   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
132   append_composite_type_field (type, "si_tid", int_type);
133   append_composite_type_field (type, "si_overrun", int_type);
134   append_composite_type_field (type, "si_sigval", sigval_type);
135   append_composite_type_field (sifields_type, "_timer", type);
136
137   /* _rt */
138   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
139   append_composite_type_field (type, "si_pid", pid_type);
140   append_composite_type_field (type, "si_uid", uid_type);
141   append_composite_type_field (type, "si_sigval", sigval_type);
142   append_composite_type_field (sifields_type, "_rt", type);
143
144   /* _sigchld */
145   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
146   append_composite_type_field (type, "si_pid", pid_type);
147   append_composite_type_field (type, "si_uid", uid_type);
148   append_composite_type_field (type, "si_status", int_type);
149   append_composite_type_field (type, "si_utime", clock_type);
150   append_composite_type_field (type, "si_stime", clock_type);
151   append_composite_type_field (sifields_type, "_sigchld", type);
152
153   /* _sigfault */
154   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
155   append_composite_type_field (type, "si_addr", void_ptr_type);
156   append_composite_type_field (sifields_type, "_sigfault", type);
157
158   /* _sigpoll */
159   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
160   append_composite_type_field (type, "si_band", long_type);
161   append_composite_type_field (type, "si_fd", int_type);
162   append_composite_type_field (sifields_type, "_sigpoll", type);
163
164   /* struct siginfo */
165   siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
166   TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
167   append_composite_type_field (siginfo_type, "si_signo", int_type);
168   append_composite_type_field (siginfo_type, "si_errno", int_type);
169   append_composite_type_field (siginfo_type, "si_code", int_type);
170   append_composite_type_field_aligned (siginfo_type,
171                                        "_sifields", sifields_type,
172                                        TYPE_LENGTH (long_type));
173
174   linux_gdbarch_data->siginfo_type = siginfo_type;
175
176   return siginfo_type;
177 }
178
179 static int
180 linux_has_shared_address_space (struct gdbarch *gdbarch)
181 {
182   /* Determine whether we are running on uClinux or normal Linux
183      kernel.  */
184   CORE_ADDR dummy;
185   int target_is_uclinux;
186
187   target_is_uclinux
188     = (target_auxv_search (&current_target, AT_NULL, &dummy) > 0
189        && target_auxv_search (&current_target, AT_PAGESZ, &dummy) == 0);
190
191   return target_is_uclinux;
192 }
193
194 /* This is how we want PTIDs from core files to be printed.  */
195
196 static char *
197 linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
198 {
199   static char buf[80];
200
201   if (ptid_get_lwp (ptid) != 0)
202     {
203       snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
204       return buf;
205     }
206
207   return normal_pid_to_str (ptid);
208 }
209
210 /* Service function for corefiles and info proc.  */
211
212 static void
213 read_mapping (const char *line,
214               ULONGEST *addr, ULONGEST *endaddr,
215               const char **permissions, size_t *permissions_len,
216               ULONGEST *offset,
217               const char **device, size_t *device_len,
218               ULONGEST *inode,
219               const char **filename)
220 {
221   const char *p = line;
222
223   *addr = strtoulst (p, &p, 16);
224   if (*p == '-')
225     p++;
226   *endaddr = strtoulst (p, &p, 16);
227
228   p = skip_spaces_const (p);
229   *permissions = p;
230   while (*p && !isspace (*p))
231     p++;
232   *permissions_len = p - *permissions;
233
234   *offset = strtoulst (p, &p, 16);
235
236   p = skip_spaces_const (p);
237   *device = p;
238   while (*p && !isspace (*p))
239     p++;
240   *device_len = p - *device;
241
242   *inode = strtoulst (p, &p, 10);
243
244   p = skip_spaces_const (p);
245   *filename = p;
246 }
247
248 /* Implement the "info proc" command.  */
249
250 static void
251 linux_info_proc (struct gdbarch *gdbarch, char *args,
252                  enum info_proc_what what)
253 {
254   /* A long is used for pid instead of an int to avoid a loss of precision
255      compiler warning from the output of strtoul.  */
256   long pid;
257   int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
258   int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
259   int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
260   int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
261   int status_f = (what == IP_STATUS || what == IP_ALL);
262   int stat_f = (what == IP_STAT || what == IP_ALL);
263   char filename[100];
264   gdb_byte *data;
265   int target_errno;
266
267   if (args && isdigit (args[0]))
268     pid = strtoul (args, &args, 10);
269   else
270     {
271       if (!target_has_execution)
272         error (_("No current process: you must name one."));
273       if (current_inferior ()->fake_pid_p)
274         error (_("Can't determine the current process's PID: you must name one."));
275
276       pid = current_inferior ()->pid;
277     }
278
279   args = skip_spaces (args);
280   if (args && args[0])
281     error (_("Too many parameters: %s"), args);
282
283   printf_filtered (_("process %ld\n"), pid);
284   if (cmdline_f)
285     {
286       xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
287       data = target_fileio_read_stralloc (filename);
288       if (data)
289         {
290           struct cleanup *cleanup = make_cleanup (xfree, data);
291           printf_filtered ("cmdline = '%s'\n", data);
292           do_cleanups (cleanup);
293         }
294       else
295         warning (_("unable to open /proc file '%s'"), filename);
296     }
297   if (cwd_f)
298     {
299       xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
300       data = target_fileio_readlink (filename, &target_errno);
301       if (data)
302         {
303           struct cleanup *cleanup = make_cleanup (xfree, data);
304           printf_filtered ("cwd = '%s'\n", data);
305           do_cleanups (cleanup);
306         }
307       else
308         warning (_("unable to read link '%s'"), filename);
309     }
310   if (exe_f)
311     {
312       xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
313       data = target_fileio_readlink (filename, &target_errno);
314       if (data)
315         {
316           struct cleanup *cleanup = make_cleanup (xfree, data);
317           printf_filtered ("exe = '%s'\n", data);
318           do_cleanups (cleanup);
319         }
320       else
321         warning (_("unable to read link '%s'"), filename);
322     }
323   if (mappings_f)
324     {
325       xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
326       data = target_fileio_read_stralloc (filename);
327       if (data)
328         {
329           struct cleanup *cleanup = make_cleanup (xfree, data);
330           char *line;
331
332           printf_filtered (_("Mapped address spaces:\n\n"));
333           if (gdbarch_addr_bit (gdbarch) == 32)
334             {
335               printf_filtered ("\t%10s %10s %10s %10s %s\n",
336                            "Start Addr",
337                            "  End Addr",
338                            "      Size", "    Offset", "objfile");
339             }
340           else
341             {
342               printf_filtered ("  %18s %18s %10s %10s %s\n",
343                            "Start Addr",
344                            "  End Addr",
345                            "      Size", "    Offset", "objfile");
346             }
347
348           for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n"))
349             {
350               ULONGEST addr, endaddr, offset, inode;
351               const char *permissions, *device, *filename;
352               size_t permissions_len, device_len;
353
354               read_mapping (line, &addr, &endaddr,
355                             &permissions, &permissions_len,
356                             &offset, &device, &device_len,
357                             &inode, &filename);
358
359               if (gdbarch_addr_bit (gdbarch) == 32)
360                 {
361                   printf_filtered ("\t%10s %10s %10s %10s %s\n",
362                                    paddress (gdbarch, addr),
363                                    paddress (gdbarch, endaddr),
364                                    hex_string (endaddr - addr),
365                                    hex_string (offset),
366                                    *filename? filename : "");
367                 }
368               else
369                 {
370                   printf_filtered ("  %18s %18s %10s %10s %s\n",
371                                    paddress (gdbarch, addr),
372                                    paddress (gdbarch, endaddr),
373                                    hex_string (endaddr - addr),
374                                    hex_string (offset),
375                                    *filename? filename : "");
376                 }
377             }
378
379           do_cleanups (cleanup);
380         }
381       else
382         warning (_("unable to open /proc file '%s'"), filename);
383     }
384   if (status_f)
385     {
386       xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
387       data = target_fileio_read_stralloc (filename);
388       if (data)
389         {
390           struct cleanup *cleanup = make_cleanup (xfree, data);
391           puts_filtered (data);
392           do_cleanups (cleanup);
393         }
394       else
395         warning (_("unable to open /proc file '%s'"), filename);
396     }
397   if (stat_f)
398     {
399       xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
400       data = target_fileio_read_stralloc (filename);
401       if (data)
402         {
403           struct cleanup *cleanup = make_cleanup (xfree, data);
404           const char *p = data;
405
406           printf_filtered (_("Process: %s\n"),
407                            pulongest (strtoulst (p, &p, 10)));
408
409           p = skip_spaces_const (p);
410           if (*p == '(')
411             {
412               const char *ep = strchr (p, ')');
413               if (ep != NULL)
414                 {
415                   printf_filtered ("Exec file: %.*s\n",
416                                    (int) (ep - p - 1), p + 1);
417                   p = ep + 1;
418                 }
419             }
420
421           p = skip_spaces_const (p);
422           if (*p)
423             printf_filtered (_("State: %c\n"), *p++);
424
425           if (*p)
426             printf_filtered (_("Parent process: %s\n"),
427                              pulongest (strtoulst (p, &p, 10)));
428           if (*p)
429             printf_filtered (_("Process group: %s\n"),
430                              pulongest (strtoulst (p, &p, 10)));
431           if (*p)
432             printf_filtered (_("Session id: %s\n"),
433                              pulongest (strtoulst (p, &p, 10)));
434           if (*p)
435             printf_filtered (_("TTY: %s\n"),
436                              pulongest (strtoulst (p, &p, 10)));
437           if (*p)
438             printf_filtered (_("TTY owner process group: %s\n"),
439                              pulongest (strtoulst (p, &p, 10)));
440
441           if (*p)
442             printf_filtered (_("Flags: %s\n"),
443                              hex_string (strtoulst (p, &p, 10)));
444           if (*p)
445             printf_filtered (_("Minor faults (no memory page): %s\n"),
446                              pulongest (strtoulst (p, &p, 10)));
447           if (*p)
448             printf_filtered (_("Minor faults, children: %s\n"),
449                              pulongest (strtoulst (p, &p, 10)));
450           if (*p)
451             printf_filtered (_("Major faults (memory page faults): %s\n"),
452                              pulongest (strtoulst (p, &p, 10)));
453           if (*p)
454             printf_filtered (_("Major faults, children: %s\n"),
455                              pulongest (strtoulst (p, &p, 10)));
456           if (*p)
457             printf_filtered (_("utime: %s\n"),
458                              pulongest (strtoulst (p, &p, 10)));
459           if (*p)
460             printf_filtered (_("stime: %s\n"),
461                              pulongest (strtoulst (p, &p, 10)));
462           if (*p)
463             printf_filtered (_("utime, children: %s\n"),
464                              pulongest (strtoulst (p, &p, 10)));
465           if (*p)
466             printf_filtered (_("stime, children: %s\n"),
467                              pulongest (strtoulst (p, &p, 10)));
468           if (*p)
469             printf_filtered (_("jiffies remaining in current "
470                                "time slice: %s\n"),
471                              pulongest (strtoulst (p, &p, 10)));
472           if (*p)
473             printf_filtered (_("'nice' value: %s\n"),
474                              pulongest (strtoulst (p, &p, 10)));
475           if (*p)
476             printf_filtered (_("jiffies until next timeout: %s\n"),
477                              pulongest (strtoulst (p, &p, 10)));
478           if (*p)
479             printf_filtered (_("jiffies until next SIGALRM: %s\n"),
480                              pulongest (strtoulst (p, &p, 10)));
481           if (*p)
482             printf_filtered (_("start time (jiffies since "
483                                "system boot): %s\n"),
484                              pulongest (strtoulst (p, &p, 10)));
485           if (*p)
486             printf_filtered (_("Virtual memory size: %s\n"),
487                              pulongest (strtoulst (p, &p, 10)));
488           if (*p)
489             printf_filtered (_("Resident set size: %s\n"),
490                              pulongest (strtoulst (p, &p, 10)));
491           if (*p)
492             printf_filtered (_("rlim: %s\n"),
493                              pulongest (strtoulst (p, &p, 10)));
494           if (*p)
495             printf_filtered (_("Start of text: %s\n"),
496                              hex_string (strtoulst (p, &p, 10)));
497           if (*p)
498             printf_filtered (_("End of text: %s\n"),
499                              hex_string (strtoulst (p, &p, 10)));
500           if (*p)
501             printf_filtered (_("Start of stack: %s\n"),
502                              hex_string (strtoulst (p, &p, 10)));
503 #if 0   /* Don't know how architecture-dependent the rest is...
504            Anyway the signal bitmap info is available from "status".  */
505           if (*p)
506             printf_filtered (_("Kernel stack pointer: %s\n"),
507                              hex_string (strtoulst (p, &p, 10)));
508           if (*p)
509             printf_filtered (_("Kernel instr pointer: %s\n"),
510                              hex_string (strtoulst (p, &p, 10)));
511           if (*p)
512             printf_filtered (_("Pending signals bitmap: %s\n"),
513                              hex_string (strtoulst (p, &p, 10)));
514           if (*p)
515             printf_filtered (_("Blocked signals bitmap: %s\n"),
516                              hex_string (strtoulst (p, &p, 10)));
517           if (*p)
518             printf_filtered (_("Ignored signals bitmap: %s\n"),
519                              hex_string (strtoulst (p, &p, 10)));
520           if (*p)
521             printf_filtered (_("Catched signals bitmap: %s\n"),
522                              hex_string (strtoulst (p, &p, 10)));
523           if (*p)
524             printf_filtered (_("wchan (system call): %s\n"),
525                              hex_string (strtoulst (p, &p, 10)));
526 #endif
527           do_cleanups (cleanup);
528         }
529       else
530         warning (_("unable to open /proc file '%s'"), filename);
531     }
532 }
533
534 /* Implement "info proc mappings" for a corefile.  */
535
536 static void
537 linux_core_info_proc_mappings (struct gdbarch *gdbarch, char *args)
538 {
539   asection *section;
540   ULONGEST count, page_size;
541   unsigned char *descdata, *filenames, *descend, *contents;
542   size_t note_size;
543   unsigned int addr_size_bits, addr_size;
544   struct cleanup *cleanup;
545   struct gdbarch *core_gdbarch = gdbarch_from_bfd (core_bfd);
546   /* We assume this for reading 64-bit core files.  */
547   gdb_static_assert (sizeof (ULONGEST) >= 8);
548
549   section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file");
550   if (section == NULL)
551     {
552       warning (_("unable to find mappings in core file"));
553       return;
554     }
555
556   addr_size_bits = gdbarch_addr_bit (core_gdbarch);
557   addr_size = addr_size_bits / 8;
558   note_size = bfd_get_section_size (section);
559
560   if (note_size < 2 * addr_size)
561     error (_("malformed core note - too short for header"));
562
563   contents = xmalloc (note_size);
564   cleanup = make_cleanup (xfree, contents);
565   if (!bfd_get_section_contents (core_bfd, section, contents, 0, note_size))
566     error (_("could not get core note contents"));
567
568   descdata = contents;
569   descend = descdata + note_size;
570
571   if (descdata[note_size - 1] != '\0')
572     error (_("malformed note - does not end with \\0"));
573
574   count = bfd_get (addr_size_bits, core_bfd, descdata);
575   descdata += addr_size;
576
577   page_size = bfd_get (addr_size_bits, core_bfd, descdata);
578   descdata += addr_size;
579
580   if (note_size < 2 * addr_size + count * 3 * addr_size)
581     error (_("malformed note - too short for supplied file count"));
582
583   printf_filtered (_("Mapped address spaces:\n\n"));
584   if (gdbarch_addr_bit (gdbarch) == 32)
585     {
586       printf_filtered ("\t%10s %10s %10s %10s %s\n",
587                        "Start Addr",
588                        "  End Addr",
589                        "      Size", "    Offset", "objfile");
590     }
591   else
592     {
593       printf_filtered ("  %18s %18s %10s %10s %s\n",
594                        "Start Addr",
595                        "  End Addr",
596                        "      Size", "    Offset", "objfile");
597     }
598
599   filenames = descdata + count * 3 * addr_size;
600   while (--count > 0)
601     {
602       ULONGEST start, end, file_ofs;
603
604       if (filenames == descend)
605         error (_("malformed note - filenames end too early"));
606
607       start = bfd_get (addr_size_bits, core_bfd, descdata);
608       descdata += addr_size;
609       end = bfd_get (addr_size_bits, core_bfd, descdata);
610       descdata += addr_size;
611       file_ofs = bfd_get (addr_size_bits, core_bfd, descdata);
612       descdata += addr_size;
613
614       file_ofs *= page_size;
615
616       if (gdbarch_addr_bit (gdbarch) == 32)
617         printf_filtered ("\t%10s %10s %10s %10s %s\n",
618                          paddress (gdbarch, start),
619                          paddress (gdbarch, end),
620                          hex_string (end - start),
621                          hex_string (file_ofs),
622                          filenames);
623       else
624         printf_filtered ("  %18s %18s %10s %10s %s\n",
625                          paddress (gdbarch, start),
626                          paddress (gdbarch, end),
627                          hex_string (end - start),
628                          hex_string (file_ofs),
629                          filenames);
630
631       filenames += 1 + strlen ((char *) filenames);
632     }
633
634   do_cleanups (cleanup);
635 }
636
637 /* Implement "info proc" for a corefile.  */
638
639 static void
640 linux_core_info_proc (struct gdbarch *gdbarch, char *args,
641                       enum info_proc_what what)
642 {
643   int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
644   int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
645
646   if (exe_f)
647     {
648       const char *exe;
649
650       exe = bfd_core_file_failing_command (core_bfd);
651       if (exe != NULL)
652         printf_filtered ("exe = '%s'\n", exe);
653       else
654         warning (_("unable to find command name in core file"));
655     }
656
657   if (mappings_f)
658     linux_core_info_proc_mappings (gdbarch, args);
659
660   if (!exe_f && !mappings_f)
661     error (_("unable to handle request"));
662 }
663
664 typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size,
665                                             ULONGEST offset, ULONGEST inode,
666                                             int read, int write,
667                                             int exec, int modified,
668                                             const char *filename,
669                                             void *data);
670
671 /* List memory regions in the inferior for a corefile.  */
672
673 static int
674 linux_find_memory_regions_full (struct gdbarch *gdbarch,
675                                 linux_find_memory_region_ftype *func,
676                                 void *obfd)
677 {
678   char filename[100];
679   gdb_byte *data;
680
681   /* We need to know the real target PID to access /proc.  */
682   if (current_inferior ()->fake_pid_p)
683     return 1;
684
685   xsnprintf (filename, sizeof filename,
686              "/proc/%d/smaps", current_inferior ()->pid);
687   data = target_fileio_read_stralloc (filename);
688   if (data == NULL)
689     {
690       /* Older Linux kernels did not support /proc/PID/smaps.  */
691       xsnprintf (filename, sizeof filename,
692                  "/proc/%d/maps", current_inferior ()->pid);
693       data = target_fileio_read_stralloc (filename);
694     }
695   if (data)
696     {
697       struct cleanup *cleanup = make_cleanup (xfree, data);
698       char *line;
699
700       line = strtok (data, "\n");
701       while (line)
702         {
703           ULONGEST addr, endaddr, offset, inode;
704           const char *permissions, *device, *filename;
705           size_t permissions_len, device_len;
706           int read, write, exec;
707           int modified = 0, has_anonymous = 0;
708
709           read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
710                         &offset, &device, &device_len, &inode, &filename);
711
712           /* Decode permissions.  */
713           read = (memchr (permissions, 'r', permissions_len) != 0);
714           write = (memchr (permissions, 'w', permissions_len) != 0);
715           exec = (memchr (permissions, 'x', permissions_len) != 0);
716
717           /* Try to detect if region was modified by parsing smaps counters.  */
718           for (line = strtok (NULL, "\n");
719                line && line[0] >= 'A' && line[0] <= 'Z';
720                line = strtok (NULL, "\n"))
721             {
722               char keyword[64 + 1];
723               unsigned long number;
724
725               if (sscanf (line, "%64s%lu kB\n", keyword, &number) != 2)
726                 {
727                   warning (_("Error parsing {s,}maps file '%s'"), filename);
728                   break;
729                 }
730               if (strcmp (keyword, "Anonymous:") == 0)
731                 has_anonymous = 1;
732               if (number != 0 && (strcmp (keyword, "Shared_Dirty:") == 0
733                                   || strcmp (keyword, "Private_Dirty:") == 0
734                                   || strcmp (keyword, "Swap:") == 0
735                                   || strcmp (keyword, "Anonymous:") == 0))
736                 modified = 1;
737             }
738
739           /* Older Linux kernels did not support the "Anonymous:" counter.
740              If it is missing, we can't be sure - dump all the pages.  */
741           if (!has_anonymous)
742             modified = 1;
743
744           /* Invoke the callback function to create the corefile segment.  */
745           func (addr, endaddr - addr, offset, inode,
746                 read, write, exec, modified, filename, obfd);
747         }
748
749       do_cleanups (cleanup);
750       return 0;
751     }
752
753   return 1;
754 }
755
756 /* A structure for passing information through
757    linux_find_memory_regions_full.  */
758
759 struct linux_find_memory_regions_data
760 {
761   /* The original callback.  */
762
763   find_memory_region_ftype func;
764
765   /* The original datum.  */
766
767   void *obfd;
768 };
769
770 /* A callback for linux_find_memory_regions that converts between the
771    "full"-style callback and find_memory_region_ftype.  */
772
773 static int
774 linux_find_memory_regions_thunk (ULONGEST vaddr, ULONGEST size,
775                                  ULONGEST offset, ULONGEST inode,
776                                  int read, int write, int exec, int modified,
777                                  const char *filename, void *arg)
778 {
779   struct linux_find_memory_regions_data *data = arg;
780
781   return data->func (vaddr, size, read, write, exec, modified, data->obfd);
782 }
783
784 /* A variant of linux_find_memory_regions_full that is suitable as the
785    gdbarch find_memory_regions method.  */
786
787 static int
788 linux_find_memory_regions (struct gdbarch *gdbarch,
789                            find_memory_region_ftype func, void *obfd)
790 {
791   struct linux_find_memory_regions_data data;
792
793   data.func = func;
794   data.obfd = obfd;
795
796   return linux_find_memory_regions_full (gdbarch,
797                                          linux_find_memory_regions_thunk,
798                                          &data);
799 }
800
801 /* Determine which signal stopped execution.  */
802
803 static int
804 find_signalled_thread (struct thread_info *info, void *data)
805 {
806   if (info->suspend.stop_signal != GDB_SIGNAL_0
807       && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
808     return 1;
809
810   return 0;
811 }
812
813 static enum gdb_signal
814 find_stop_signal (void)
815 {
816   struct thread_info *info =
817     iterate_over_threads (find_signalled_thread, NULL);
818
819   if (info)
820     return info->suspend.stop_signal;
821   else
822     return GDB_SIGNAL_0;
823 }
824
825 /* Generate corefile notes for SPU contexts.  */
826
827 static char *
828 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
829 {
830   static const char *spu_files[] =
831     {
832       "object-id",
833       "mem",
834       "regs",
835       "fpcr",
836       "lslr",
837       "decr",
838       "decr_status",
839       "signal1",
840       "signal1_type",
841       "signal2",
842       "signal2_type",
843       "event_mask",
844       "event_status",
845       "mbox_info",
846       "ibox_info",
847       "wbox_info",
848       "dma_info",
849       "proxydma_info",
850    };
851
852   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
853   gdb_byte *spu_ids;
854   LONGEST i, j, size;
855
856   /* Determine list of SPU ids.  */
857   size = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
858                             NULL, &spu_ids);
859
860   /* Generate corefile notes for each SPU file.  */
861   for (i = 0; i < size; i += 4)
862     {
863       int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order);
864
865       for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
866         {
867           char annex[32], note_name[32];
868           gdb_byte *spu_data;
869           LONGEST spu_len;
870
871           xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
872           spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
873                                        annex, &spu_data);
874           if (spu_len > 0)
875             {
876               xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
877               note_data = elfcore_write_note (obfd, note_data, note_size,
878                                               note_name, NT_SPU,
879                                               spu_data, spu_len);
880               xfree (spu_data);
881
882               if (!note_data)
883                 {
884                   xfree (spu_ids);
885                   return NULL;
886                 }
887             }
888         }
889     }
890
891   if (size > 0)
892     xfree (spu_ids);
893
894   return note_data;
895 }
896
897 /* This is used to pass information from
898    linux_make_mappings_corefile_notes through
899    linux_find_memory_regions_full.  */
900
901 struct linux_make_mappings_data
902 {
903   /* Number of files mapped.  */
904   ULONGEST file_count;
905
906   /* The obstack for the main part of the data.  */
907   struct obstack *data_obstack;
908
909   /* The filename obstack.  */
910   struct obstack *filename_obstack;
911
912   /* The architecture's "long" type.  */
913   struct type *long_type;
914 };
915
916 static linux_find_memory_region_ftype linux_make_mappings_callback;
917
918 /* A callback for linux_find_memory_regions_full that updates the
919    mappings data for linux_make_mappings_corefile_notes.  */
920
921 static int
922 linux_make_mappings_callback (ULONGEST vaddr, ULONGEST size,
923                               ULONGEST offset, ULONGEST inode,
924                               int read, int write, int exec, int modified,
925                               const char *filename, void *data)
926 {
927   struct linux_make_mappings_data *map_data = data;
928   gdb_byte buf[sizeof (ULONGEST)];
929
930   if (*filename == '\0' || inode == 0)
931     return 0;
932
933   ++map_data->file_count;
934
935   pack_long (buf, map_data->long_type, vaddr);
936   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
937   pack_long (buf, map_data->long_type, vaddr + size);
938   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
939   pack_long (buf, map_data->long_type, offset);
940   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
941
942   obstack_grow_str0 (map_data->filename_obstack, filename);
943
944   return 0;
945 }
946
947 /* Write the file mapping data to the core file, if possible.  OBFD is
948    the output BFD.  NOTE_DATA is the current note data, and NOTE_SIZE
949    is a pointer to the note size.  Returns the new NOTE_DATA and
950    updates NOTE_SIZE.  */
951
952 static char *
953 linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
954                                     char *note_data, int *note_size)
955 {
956   struct cleanup *cleanup;
957   struct obstack data_obstack, filename_obstack;
958   struct linux_make_mappings_data mapping_data;
959   struct type *long_type
960     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 0, "long");
961   gdb_byte buf[sizeof (ULONGEST)];
962
963   obstack_init (&data_obstack);
964   cleanup = make_cleanup_obstack_free (&data_obstack);
965   obstack_init (&filename_obstack);
966   make_cleanup_obstack_free (&filename_obstack);
967
968   mapping_data.file_count = 0;
969   mapping_data.data_obstack = &data_obstack;
970   mapping_data.filename_obstack = &filename_obstack;
971   mapping_data.long_type = long_type;
972
973   /* Reserve space for the count.  */
974   obstack_blank (&data_obstack, TYPE_LENGTH (long_type));
975   /* We always write the page size as 1 since we have no good way to
976      determine the correct value.  */
977   pack_long (buf, long_type, 1);
978   obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type));
979
980   linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback,
981                                   &mapping_data);
982
983   if (mapping_data.file_count != 0)
984     {
985       /* Write the count to the obstack.  */
986       pack_long (obstack_base (&data_obstack), long_type,
987                  mapping_data.file_count);
988
989       /* Copy the filenames to the data obstack.  */
990       obstack_grow (&data_obstack, obstack_base (&filename_obstack),
991                     obstack_object_size (&filename_obstack));
992
993       note_data = elfcore_write_note (obfd, note_data, note_size,
994                                       "CORE", NT_FILE,
995                                       obstack_base (&data_obstack),
996                                       obstack_object_size (&data_obstack));
997     }
998
999   do_cleanups (cleanup);
1000   return note_data;
1001 }
1002
1003 /* Records the thread's register state for the corefile note
1004    section.  */
1005
1006 static char *
1007 linux_collect_thread_registers (const struct regcache *regcache,
1008                                 ptid_t ptid, bfd *obfd,
1009                                 char *note_data, int *note_size,
1010                                 enum gdb_signal stop_signal)
1011 {
1012   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1013   struct core_regset_section *sect_list;
1014   unsigned long lwp;
1015
1016   sect_list = gdbarch_core_regset_sections (gdbarch);
1017   gdb_assert (sect_list);
1018
1019   /* For remote targets the LWP may not be available, so use the TID.  */
1020   lwp = ptid_get_lwp (ptid);
1021   if (!lwp)
1022     lwp = ptid_get_tid (ptid);
1023
1024   while (sect_list->sect_name != NULL)
1025     {
1026       const struct regset *regset;
1027       char *buf;
1028
1029       regset = gdbarch_regset_from_core_section (gdbarch,
1030                                                  sect_list->sect_name,
1031                                                  sect_list->size);
1032       gdb_assert (regset && regset->collect_regset);
1033
1034       buf = xmalloc (sect_list->size);
1035       regset->collect_regset (regset, regcache, -1, buf, sect_list->size);
1036
1037       /* PRSTATUS still needs to be treated specially.  */
1038       if (strcmp (sect_list->sect_name, ".reg") == 0)
1039         note_data = (char *) elfcore_write_prstatus
1040                                (obfd, note_data, note_size, lwp,
1041                                 gdb_signal_to_host (stop_signal), buf);
1042       else
1043         note_data = (char *) elfcore_write_register_note
1044                                (obfd, note_data, note_size,
1045                                 sect_list->sect_name, buf, sect_list->size);
1046       xfree (buf);
1047       sect_list++;
1048
1049       if (!note_data)
1050         return NULL;
1051     }
1052
1053   return note_data;
1054 }
1055
1056 /* Fetch the siginfo data for the current thread, if it exists.  If
1057    there is no data, or we could not read it, return NULL.  Otherwise,
1058    return a newly malloc'd buffer holding the data and fill in *SIZE
1059    with the size of the data.  The caller is responsible for freeing
1060    the data.  */
1061
1062 static gdb_byte *
1063 linux_get_siginfo_data (struct gdbarch *gdbarch, LONGEST *size)
1064 {
1065   struct type *siginfo_type;
1066   gdb_byte *buf;
1067   LONGEST bytes_read;
1068   struct cleanup *cleanups;
1069
1070   if (!gdbarch_get_siginfo_type_p (gdbarch))
1071     return NULL;
1072   
1073   siginfo_type = gdbarch_get_siginfo_type (gdbarch);
1074
1075   buf = xmalloc (TYPE_LENGTH (siginfo_type));
1076   cleanups = make_cleanup (xfree, buf);
1077
1078   bytes_read = target_read (&current_target, TARGET_OBJECT_SIGNAL_INFO, NULL,
1079                             buf, 0, TYPE_LENGTH (siginfo_type));
1080   if (bytes_read == TYPE_LENGTH (siginfo_type))
1081     {
1082       discard_cleanups (cleanups);
1083       *size = bytes_read;
1084     }
1085   else
1086     {
1087       do_cleanups (cleanups);
1088       buf = NULL;
1089     }
1090
1091   return buf;
1092 }
1093
1094 struct linux_corefile_thread_data
1095 {
1096   struct gdbarch *gdbarch;
1097   int pid;
1098   bfd *obfd;
1099   char *note_data;
1100   int *note_size;
1101   int num_notes;
1102   enum gdb_signal stop_signal;
1103   linux_collect_thread_registers_ftype collect;
1104 };
1105
1106 /* Called by gdbthread.c once per thread.  Records the thread's
1107    register state for the corefile note section.  */
1108
1109 static int
1110 linux_corefile_thread_callback (struct thread_info *info, void *data)
1111 {
1112   struct linux_corefile_thread_data *args = data;
1113
1114   if (ptid_get_pid (info->ptid) == args->pid)
1115     {
1116       struct cleanup *old_chain;
1117       struct regcache *regcache;
1118       gdb_byte *siginfo_data;
1119       LONGEST siginfo_size;
1120
1121       regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
1122
1123       old_chain = save_inferior_ptid ();
1124       inferior_ptid = info->ptid;
1125       target_fetch_registers (regcache, -1);
1126       siginfo_data = linux_get_siginfo_data (args->gdbarch, &siginfo_size);
1127       do_cleanups (old_chain);
1128
1129       old_chain = make_cleanup (xfree, siginfo_data);
1130
1131       args->note_data = args->collect (regcache, info->ptid, args->obfd,
1132                                        args->note_data, args->note_size,
1133                                        args->stop_signal);
1134       args->num_notes++;
1135
1136       if (siginfo_data != NULL)
1137         {
1138           args->note_data = elfcore_write_note (args->obfd,
1139                                                 args->note_data,
1140                                                 args->note_size,
1141                                                 "CORE", NT_SIGINFO,
1142                                                 siginfo_data, siginfo_size);
1143           args->num_notes++;
1144         }
1145
1146       do_cleanups (old_chain);
1147     }
1148
1149   return !args->note_data;
1150 }
1151
1152 /* Fill the PRPSINFO structure with information about the process being
1153    debugged.  Returns 1 in case of success, 0 for failures.  Please note that
1154    even if the structure cannot be entirely filled (e.g., GDB was unable to
1155    gather information about the process UID/GID), this function will still
1156    return 1 since some information was already recorded.  It will only return
1157    0 iff nothing can be gathered.  */
1158
1159 static int
1160 linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
1161 {
1162   /* The filename which we will use to obtain some info about the process.
1163      We will basically use this to store the `/proc/PID/FILENAME' file.  */
1164   char filename[100];
1165   /* The full name of the program which generated the corefile.  */
1166   char *fname;
1167   /* The basename of the executable.  */
1168   const char *basename;
1169   /* The arguments of the program.  */
1170   char *psargs;
1171   char *infargs;
1172   /* The contents of `/proc/PID/stat' and `/proc/PID/status' files.  */
1173   char *proc_stat, *proc_status;
1174   /* Temporary buffer.  */
1175   char *tmpstr;
1176   /* The valid states of a process, according to the Linux kernel.  */
1177   const char valid_states[] = "RSDTZW";
1178   /* The program state.  */
1179   const char *prog_state;
1180   /* The state of the process.  */
1181   char pr_sname;
1182   /* The PID of the program which generated the corefile.  */
1183   pid_t pid;
1184   /* Process flags.  */
1185   unsigned int pr_flag;
1186   /* Process nice value.  */
1187   long pr_nice;
1188   /* The number of fields read by `sscanf'.  */
1189   int n_fields = 0;
1190   /* Cleanups.  */
1191   struct cleanup *c;
1192   int i;
1193
1194   gdb_assert (p != NULL);
1195
1196   /* Obtaining PID and filename.  */
1197   pid = ptid_get_pid (inferior_ptid);
1198   xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
1199   fname = target_fileio_read_stralloc (filename);
1200
1201   if (fname == NULL || *fname == '\0')
1202     {
1203       /* No program name was read, so we won't be able to retrieve more
1204          information about the process.  */
1205       xfree (fname);
1206       return 0;
1207     }
1208
1209   c = make_cleanup (xfree, fname);
1210   memset (p, 0, sizeof (*p));
1211
1212   /* Defining the PID.  */
1213   p->pr_pid = pid;
1214
1215   /* Copying the program name.  Only the basename matters.  */
1216   basename = lbasename (fname);
1217   strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
1218   p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
1219
1220   infargs = get_inferior_args ();
1221
1222   psargs = xstrdup (fname);
1223   if (infargs != NULL)
1224     psargs = reconcat (psargs, psargs, " ", infargs, NULL);
1225
1226   make_cleanup (xfree, psargs);
1227
1228   strncpy (p->pr_psargs, psargs, sizeof (p->pr_psargs));
1229   p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
1230
1231   xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
1232   proc_stat = target_fileio_read_stralloc (filename);
1233   make_cleanup (xfree, proc_stat);
1234
1235   if (proc_stat == NULL || *proc_stat == '\0')
1236     {
1237       /* Despite being unable to read more information about the
1238          process, we return 1 here because at least we have its
1239          command line, PID and arguments.  */
1240       do_cleanups (c);
1241       return 1;
1242     }
1243
1244   /* Ok, we have the stats.  It's time to do a little parsing of the
1245      contents of the buffer, so that we end up reading what we want.
1246
1247      The following parsing mechanism is strongly based on the
1248      information generated by the `fs/proc/array.c' file, present in
1249      the Linux kernel tree.  More details about how the information is
1250      displayed can be obtained by seeing the manpage of proc(5),
1251      specifically under the entry of `/proc/[pid]/stat'.  */
1252
1253   /* Getting rid of the PID, since we already have it.  */
1254   while (isdigit (*proc_stat))
1255     ++proc_stat;
1256
1257   proc_stat = skip_spaces (proc_stat);
1258
1259   /* Getting rid of the executable name, since we already have it.  We
1260      know that this name will be in parentheses, so we can safely look
1261      for the close-paren.  */
1262   while (*proc_stat != ')')
1263     ++proc_stat;
1264   ++proc_stat;
1265
1266   proc_stat = skip_spaces (proc_stat);
1267
1268   n_fields = sscanf (proc_stat,
1269                      "%c"               /* Process state.  */
1270                      "%d%d%d"           /* Parent PID, group ID, session ID.  */
1271                      "%*d%*d"           /* tty_nr, tpgid (not used).  */
1272                      "%u"               /* Flags.  */
1273                      "%*s%*s%*s%*s"     /* minflt, cminflt, majflt,
1274                                            cmajflt (not used).  */
1275                      "%*s%*s%*s%*s"     /* utime, stime, cutime,
1276                                            cstime (not used).  */
1277                      "%*s"              /* Priority (not used).  */
1278                      "%ld",             /* Nice.  */
1279                      &pr_sname,
1280                      &p->pr_ppid, &p->pr_pgrp, &p->pr_sid,
1281                      &pr_flag,
1282                      &pr_nice);
1283
1284   if (n_fields != 6)
1285     {
1286       /* Again, we couldn't read the complementary information about
1287          the process state.  However, we already have minimal
1288          information, so we just return 1 here.  */
1289       do_cleanups (c);
1290       return 1;
1291     }
1292
1293   /* Filling the structure fields.  */
1294   prog_state = strchr (valid_states, pr_sname);
1295   if (prog_state != NULL)
1296     p->pr_state = prog_state - valid_states;
1297   else
1298     {
1299       /* Zero means "Running".  */
1300       p->pr_state = 0;
1301     }
1302
1303   p->pr_sname = p->pr_state > 5 ? '.' : pr_sname;
1304   p->pr_zomb = p->pr_sname == 'Z';
1305   p->pr_nice = pr_nice;
1306   p->pr_flag = pr_flag;
1307
1308   /* Finally, obtaining the UID and GID.  For that, we read and parse the
1309      contents of the `/proc/PID/status' file.  */
1310   xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
1311   proc_status = target_fileio_read_stralloc (filename);
1312   make_cleanup (xfree, proc_status);
1313
1314   if (proc_status == NULL || *proc_status == '\0')
1315     {
1316       /* Returning 1 since we already have a bunch of information.  */
1317       do_cleanups (c);
1318       return 1;
1319     }
1320
1321   /* Extracting the UID.  */
1322   tmpstr = strstr (proc_status, "Uid:");
1323   if (tmpstr != NULL)
1324     {
1325       /* Advancing the pointer to the beginning of the UID.  */
1326       tmpstr += sizeof ("Uid:");
1327       while (*tmpstr != '\0' && !isdigit (*tmpstr))
1328         ++tmpstr;
1329
1330       if (isdigit (*tmpstr))
1331         p->pr_uid = strtol (tmpstr, &tmpstr, 10);
1332     }
1333
1334   /* Extracting the GID.  */
1335   tmpstr = strstr (proc_status, "Gid:");
1336   if (tmpstr != NULL)
1337     {
1338       /* Advancing the pointer to the beginning of the GID.  */
1339       tmpstr += sizeof ("Gid:");
1340       while (*tmpstr != '\0' && !isdigit (*tmpstr))
1341         ++tmpstr;
1342
1343       if (isdigit (*tmpstr))
1344         p->pr_gid = strtol (tmpstr, &tmpstr, 10);
1345     }
1346
1347   do_cleanups (c);
1348
1349   return 1;
1350 }
1351
1352 /* Fills the "to_make_corefile_note" target vector.  Builds the note
1353    section for a corefile, and returns it in a malloc buffer.  */
1354
1355 char *
1356 linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size,
1357                            linux_collect_thread_registers_ftype collect)
1358 {
1359   struct linux_corefile_thread_data thread_args;
1360   struct elf_internal_linux_prpsinfo prpsinfo;
1361   char *note_data = NULL;
1362   gdb_byte *auxv;
1363   int auxv_len;
1364
1365   if (linux_fill_prpsinfo (&prpsinfo))
1366     {
1367       if (gdbarch_elfcore_write_linux_prpsinfo_p (gdbarch))
1368         {
1369           note_data = gdbarch_elfcore_write_linux_prpsinfo (gdbarch, obfd,
1370                                                             note_data, note_size,
1371                                                             &prpsinfo);
1372         }
1373       else
1374         {
1375           if (gdbarch_ptr_bit (gdbarch) == 64)
1376             note_data = elfcore_write_linux_prpsinfo64 (obfd,
1377                                                         note_data, note_size,
1378                                                         &prpsinfo);
1379           else
1380             note_data = elfcore_write_linux_prpsinfo32 (obfd,
1381                                                         note_data, note_size,
1382                                                         &prpsinfo);
1383         }
1384     }
1385
1386   /* Thread register information.  */
1387   thread_args.gdbarch = gdbarch;
1388   thread_args.pid = ptid_get_pid (inferior_ptid);
1389   thread_args.obfd = obfd;
1390   thread_args.note_data = note_data;
1391   thread_args.note_size = note_size;
1392   thread_args.num_notes = 0;
1393   thread_args.stop_signal = find_stop_signal ();
1394   thread_args.collect = collect;
1395   iterate_over_threads (linux_corefile_thread_callback, &thread_args);
1396   note_data = thread_args.note_data;
1397   if (!note_data)
1398     return NULL;
1399
1400   /* Auxillary vector.  */
1401   auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
1402                                 NULL, &auxv);
1403   if (auxv_len > 0)
1404     {
1405       note_data = elfcore_write_note (obfd, note_data, note_size,
1406                                       "CORE", NT_AUXV, auxv, auxv_len);
1407       xfree (auxv);
1408
1409       if (!note_data)
1410         return NULL;
1411     }
1412
1413   /* SPU information.  */
1414   note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
1415   if (!note_data)
1416     return NULL;
1417
1418   /* File mappings.  */
1419   note_data = linux_make_mappings_corefile_notes (gdbarch, obfd,
1420                                                   note_data, note_size);
1421
1422   make_cleanup (xfree, note_data);
1423   return note_data;
1424 }
1425
1426 static char *
1427 linux_make_corefile_notes_1 (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
1428 {
1429   /* FIXME: uweigand/2011-10-06: Once all GNU/Linux architectures have been
1430      converted to gdbarch_core_regset_sections, we no longer need to fall back
1431      to the target method at this point.  */
1432
1433   if (!gdbarch_core_regset_sections (gdbarch))
1434     return target_make_corefile_notes (obfd, note_size);
1435   else
1436     return linux_make_corefile_notes (gdbarch, obfd, note_size,
1437                                       linux_collect_thread_registers);
1438 }
1439
1440 /* To be called from the various GDB_OSABI_LINUX handlers for the
1441    various GNU/Linux architectures and machine types.  */
1442
1443 void
1444 linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1445 {
1446   set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
1447   set_gdbarch_info_proc (gdbarch, linux_info_proc);
1448   set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc);
1449   set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
1450   set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes_1);
1451   set_gdbarch_has_shared_address_space (gdbarch,
1452                                         linux_has_shared_address_space);
1453 }
1454
1455 /* Provide a prototype to silence -Wmissing-prototypes.  */
1456 extern initialize_file_ftype _initialize_linux_tdep;
1457
1458 void
1459 _initialize_linux_tdep (void)
1460 {
1461   linux_gdbarch_data_handle =
1462     gdbarch_data_register_post_init (init_linux_gdbarch_data);
1463 }