xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/linux-tdep.c (revision d909946ca08dceb44d7d0f22ec9488679695d976)
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 
39 #include <ctype.h>
40 
41 /* This enum represents the signals' numbers on a generic architecture
42    running the Linux kernel.  The definition of "generic" comes from
43    the file <include/uapi/asm-generic/signal.h>, from the Linux kernel
44    tree, which is the "de facto" implementation of signal numbers to
45    be used by new architecture ports.
46 
47    For those architectures which have differences between the generic
48    standard (e.g., Alpha), we define the different signals (and *only*
49    those) in the specific target-dependent file (e.g.,
50    alpha-linux-tdep.c, for Alpha).  Please refer to the architecture's
51    tdep file for more information.
52 
53    ARM deserves a special mention here.  On the file
54    <arch/arm/include/uapi/asm/signal.h>, it defines only one different
55    (and ARM-only) signal, which is SIGSWI, with the same number as
56    SIGRTMIN.  This signal is used only for a very specific target,
57    called ArthurOS (from RISCOS).  Therefore, we do not handle it on
58    the ARM-tdep file, and we can safely use the generic signal handler
59    here for ARM targets.
60 
61    As stated above, this enum is derived from
62    <include/uapi/asm-generic/signal.h>, from the Linux kernel
63    tree.  */
64 
65 enum
66   {
67     LINUX_SIGHUP = 1,
68     LINUX_SIGINT = 2,
69     LINUX_SIGQUIT = 3,
70     LINUX_SIGILL = 4,
71     LINUX_SIGTRAP = 5,
72     LINUX_SIGABRT = 6,
73     LINUX_SIGIOT = 6,
74     LINUX_SIGBUS = 7,
75     LINUX_SIGFPE = 8,
76     LINUX_SIGKILL = 9,
77     LINUX_SIGUSR1 = 10,
78     LINUX_SIGSEGV = 11,
79     LINUX_SIGUSR2 = 12,
80     LINUX_SIGPIPE = 13,
81     LINUX_SIGALRM = 14,
82     LINUX_SIGTERM = 15,
83     LINUX_SIGSTKFLT = 16,
84     LINUX_SIGCHLD = 17,
85     LINUX_SIGCONT = 18,
86     LINUX_SIGSTOP = 19,
87     LINUX_SIGTSTP = 20,
88     LINUX_SIGTTIN = 21,
89     LINUX_SIGTTOU = 22,
90     LINUX_SIGURG = 23,
91     LINUX_SIGXCPU = 24,
92     LINUX_SIGXFSZ = 25,
93     LINUX_SIGVTALRM = 26,
94     LINUX_SIGPROF = 27,
95     LINUX_SIGWINCH = 28,
96     LINUX_SIGIO = 29,
97     LINUX_SIGPOLL = LINUX_SIGIO,
98     LINUX_SIGPWR = 30,
99     LINUX_SIGSYS = 31,
100     LINUX_SIGUNUSED = 31,
101 
102     LINUX_SIGRTMIN = 32,
103     LINUX_SIGRTMAX = 64,
104   };
105 
106 static struct gdbarch_data *linux_gdbarch_data_handle;
107 
108 struct linux_gdbarch_data
109   {
110     struct type *siginfo_type;
111   };
112 
113 static void *
114 init_linux_gdbarch_data (struct gdbarch *gdbarch)
115 {
116   return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct linux_gdbarch_data);
117 }
118 
119 static struct linux_gdbarch_data *
120 get_linux_gdbarch_data (struct gdbarch *gdbarch)
121 {
122   return gdbarch_data (gdbarch, linux_gdbarch_data_handle);
123 }
124 
125 /* Per-inferior data key.  */
126 static const struct inferior_data *linux_inferior_data;
127 
128 /* Linux-specific cached data.  This is used by GDB for caching
129    purposes for each inferior.  This helps reduce the overhead of
130    transfering data from a remote target to the local host.  */
131 struct linux_info
132 {
133   /* Cache of the inferior's vsyscall/vDSO mapping range.  Only valid
134      if VSYSCALL_RANGE_P is positive.  This is cached because getting
135      at this info requires an auxv lookup (which is itself cached),
136      and looking through the inferior's mappings (which change
137      throughout execution and therefore cannot be cached).  */
138   struct mem_range vsyscall_range;
139 
140   /* Zero if we haven't tried looking up the vsyscall's range before
141      yet.  Positive if we tried looking it up, and found it.  Negative
142      if we tried looking it up but failed.  */
143   int vsyscall_range_p;
144 };
145 
146 /* Frees whatever allocated space there is to be freed and sets INF's
147    linux cache data pointer to NULL.  */
148 
149 static void
150 invalidate_linux_cache_inf (struct inferior *inf)
151 {
152   struct linux_info *info;
153 
154   info = inferior_data (inf, linux_inferior_data);
155   if (info != NULL)
156     {
157       xfree (info);
158       set_inferior_data (inf, linux_inferior_data, NULL);
159     }
160 }
161 
162 /* Handles the cleanup of the linux cache for inferior INF.  ARG is
163    ignored.  Callback for the inferior_appeared and inferior_exit
164    events.  */
165 
166 static void
167 linux_inferior_data_cleanup (struct inferior *inf, void *arg)
168 {
169   invalidate_linux_cache_inf (inf);
170 }
171 
172 /* Fetch the linux cache info for INF.  This function always returns a
173    valid INFO pointer.  */
174 
175 static struct linux_info *
176 get_linux_inferior_data (void)
177 {
178   struct linux_info *info;
179   struct inferior *inf = current_inferior ();
180 
181   info = inferior_data (inf, linux_inferior_data);
182   if (info == NULL)
183     {
184       info = XCNEW (struct linux_info);
185       set_inferior_data (inf, linux_inferior_data, info);
186     }
187 
188   return info;
189 }
190 
191 /* This function is suitable for architectures that don't
192    extend/override the standard siginfo structure.  */
193 
194 struct type *
195 linux_get_siginfo_type (struct gdbarch *gdbarch)
196 {
197   struct linux_gdbarch_data *linux_gdbarch_data;
198   struct type *int_type, *uint_type, *long_type, *void_ptr_type;
199   struct type *uid_type, *pid_type;
200   struct type *sigval_type, *clock_type;
201   struct type *siginfo_type, *sifields_type;
202   struct type *type;
203 
204   linux_gdbarch_data = get_linux_gdbarch_data (gdbarch);
205   if (linux_gdbarch_data->siginfo_type != NULL)
206     return linux_gdbarch_data->siginfo_type;
207 
208   int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
209 			 	0, "int");
210   uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
211 				 1, "unsigned int");
212   long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
213 				 0, "long");
214   void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
215 
216   /* sival_t */
217   sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
218   TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
219   append_composite_type_field (sigval_type, "sival_int", int_type);
220   append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
221 
222   /* __pid_t */
223   pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
224 			TYPE_LENGTH (int_type), "__pid_t");
225   TYPE_TARGET_TYPE (pid_type) = int_type;
226   TYPE_TARGET_STUB (pid_type) = 1;
227 
228   /* __uid_t */
229   uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
230 			TYPE_LENGTH (uint_type), "__uid_t");
231   TYPE_TARGET_TYPE (uid_type) = uint_type;
232   TYPE_TARGET_STUB (uid_type) = 1;
233 
234   /* __clock_t */
235   clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
236 			  TYPE_LENGTH (long_type), "__clock_t");
237   TYPE_TARGET_TYPE (clock_type) = long_type;
238   TYPE_TARGET_STUB (clock_type) = 1;
239 
240   /* _sifields */
241   sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
242 
243   {
244     const int si_max_size = 128;
245     int si_pad_size;
246     int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
247 
248     /* _pad */
249     if (gdbarch_ptr_bit (gdbarch) == 64)
250       si_pad_size = (si_max_size / size_of_int) - 4;
251     else
252       si_pad_size = (si_max_size / size_of_int) - 3;
253     append_composite_type_field (sifields_type, "_pad",
254 				 init_vector_type (int_type, si_pad_size));
255   }
256 
257   /* _kill */
258   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
259   append_composite_type_field (type, "si_pid", pid_type);
260   append_composite_type_field (type, "si_uid", uid_type);
261   append_composite_type_field (sifields_type, "_kill", type);
262 
263   /* _timer */
264   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
265   append_composite_type_field (type, "si_tid", int_type);
266   append_composite_type_field (type, "si_overrun", int_type);
267   append_composite_type_field (type, "si_sigval", sigval_type);
268   append_composite_type_field (sifields_type, "_timer", type);
269 
270   /* _rt */
271   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
272   append_composite_type_field (type, "si_pid", pid_type);
273   append_composite_type_field (type, "si_uid", uid_type);
274   append_composite_type_field (type, "si_sigval", sigval_type);
275   append_composite_type_field (sifields_type, "_rt", type);
276 
277   /* _sigchld */
278   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
279   append_composite_type_field (type, "si_pid", pid_type);
280   append_composite_type_field (type, "si_uid", uid_type);
281   append_composite_type_field (type, "si_status", int_type);
282   append_composite_type_field (type, "si_utime", clock_type);
283   append_composite_type_field (type, "si_stime", clock_type);
284   append_composite_type_field (sifields_type, "_sigchld", type);
285 
286   /* _sigfault */
287   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
288   append_composite_type_field (type, "si_addr", void_ptr_type);
289   append_composite_type_field (sifields_type, "_sigfault", type);
290 
291   /* _sigpoll */
292   type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
293   append_composite_type_field (type, "si_band", long_type);
294   append_composite_type_field (type, "si_fd", int_type);
295   append_composite_type_field (sifields_type, "_sigpoll", type);
296 
297   /* struct siginfo */
298   siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
299   TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
300   append_composite_type_field (siginfo_type, "si_signo", int_type);
301   append_composite_type_field (siginfo_type, "si_errno", int_type);
302   append_composite_type_field (siginfo_type, "si_code", int_type);
303   append_composite_type_field_aligned (siginfo_type,
304 				       "_sifields", sifields_type,
305 				       TYPE_LENGTH (long_type));
306 
307   linux_gdbarch_data->siginfo_type = siginfo_type;
308 
309   return siginfo_type;
310 }
311 
312 /* Return true if the target is running on uClinux instead of normal
313    Linux kernel.  */
314 
315 int
316 linux_is_uclinux (void)
317 {
318   CORE_ADDR dummy;
319 
320   return (target_auxv_search (&current_target, AT_NULL, &dummy) > 0
321 	  && target_auxv_search (&current_target, AT_PAGESZ, &dummy) == 0);
322 }
323 
324 static int
325 linux_has_shared_address_space (struct gdbarch *gdbarch)
326 {
327   return linux_is_uclinux ();
328 }
329 
330 /* This is how we want PTIDs from core files to be printed.  */
331 
332 static char *
333 linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
334 {
335   static char buf[80];
336 
337   if (ptid_get_lwp (ptid) != 0)
338     {
339       snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid));
340       return buf;
341     }
342 
343   return normal_pid_to_str (ptid);
344 }
345 
346 /* Service function for corefiles and info proc.  */
347 
348 static void
349 read_mapping (const char *line,
350 	      ULONGEST *addr, ULONGEST *endaddr,
351 	      const char **permissions, size_t *permissions_len,
352 	      ULONGEST *offset,
353               const char **device, size_t *device_len,
354 	      ULONGEST *inode,
355 	      const char **filename)
356 {
357   const char *p = line;
358 
359   *addr = strtoulst (p, &p, 16);
360   if (*p == '-')
361     p++;
362   *endaddr = strtoulst (p, &p, 16);
363 
364   p = skip_spaces_const (p);
365   *permissions = p;
366   while (*p && !isspace (*p))
367     p++;
368   *permissions_len = p - *permissions;
369 
370   *offset = strtoulst (p, &p, 16);
371 
372   p = skip_spaces_const (p);
373   *device = p;
374   while (*p && !isspace (*p))
375     p++;
376   *device_len = p - *device;
377 
378   *inode = strtoulst (p, &p, 10);
379 
380   p = skip_spaces_const (p);
381   *filename = p;
382 }
383 
384 /* Implement the "info proc" command.  */
385 
386 static void
387 linux_info_proc (struct gdbarch *gdbarch, const char *args,
388 		 enum info_proc_what what)
389 {
390   /* A long is used for pid instead of an int to avoid a loss of precision
391      compiler warning from the output of strtoul.  */
392   long pid;
393   int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
394   int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
395   int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
396   int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
397   int status_f = (what == IP_STATUS || what == IP_ALL);
398   int stat_f = (what == IP_STAT || what == IP_ALL);
399   char filename[100];
400   char *data;
401   int target_errno;
402 
403   if (args && isdigit (args[0]))
404     {
405       char *tem;
406 
407       pid = strtoul (args, &tem, 10);
408       args = tem;
409     }
410   else
411     {
412       if (!target_has_execution)
413 	error (_("No current process: you must name one."));
414       if (current_inferior ()->fake_pid_p)
415 	error (_("Can't determine the current process's PID: you must name one."));
416 
417       pid = current_inferior ()->pid;
418     }
419 
420   args = skip_spaces_const (args);
421   if (args && args[0])
422     error (_("Too many parameters: %s"), args);
423 
424   printf_filtered (_("process %ld\n"), pid);
425   if (cmdline_f)
426     {
427       xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
428       data = target_fileio_read_stralloc (filename);
429       if (data)
430 	{
431 	  struct cleanup *cleanup = make_cleanup (xfree, data);
432           printf_filtered ("cmdline = '%s'\n", data);
433 	  do_cleanups (cleanup);
434 	}
435       else
436 	warning (_("unable to open /proc file '%s'"), filename);
437     }
438   if (cwd_f)
439     {
440       xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
441       data = target_fileio_readlink (filename, &target_errno);
442       if (data)
443 	{
444 	  struct cleanup *cleanup = make_cleanup (xfree, data);
445           printf_filtered ("cwd = '%s'\n", data);
446 	  do_cleanups (cleanup);
447 	}
448       else
449 	warning (_("unable to read link '%s'"), filename);
450     }
451   if (exe_f)
452     {
453       xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
454       data = target_fileio_readlink (filename, &target_errno);
455       if (data)
456 	{
457 	  struct cleanup *cleanup = make_cleanup (xfree, data);
458           printf_filtered ("exe = '%s'\n", data);
459 	  do_cleanups (cleanup);
460 	}
461       else
462 	warning (_("unable to read link '%s'"), filename);
463     }
464   if (mappings_f)
465     {
466       xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
467       data = target_fileio_read_stralloc (filename);
468       if (data)
469 	{
470 	  struct cleanup *cleanup = make_cleanup (xfree, data);
471 	  char *line;
472 
473 	  printf_filtered (_("Mapped address spaces:\n\n"));
474 	  if (gdbarch_addr_bit (gdbarch) == 32)
475 	    {
476 	      printf_filtered ("\t%10s %10s %10s %10s %s\n",
477 			   "Start Addr",
478 			   "  End Addr",
479 			   "      Size", "    Offset", "objfile");
480             }
481 	  else
482             {
483 	      printf_filtered ("  %18s %18s %10s %10s %s\n",
484 			   "Start Addr",
485 			   "  End Addr",
486 			   "      Size", "    Offset", "objfile");
487 	    }
488 
489 	  for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n"))
490 	    {
491 	      ULONGEST addr, endaddr, offset, inode;
492 	      const char *permissions, *device, *filename;
493 	      size_t permissions_len, device_len;
494 
495 	      read_mapping (line, &addr, &endaddr,
496 			    &permissions, &permissions_len,
497 			    &offset, &device, &device_len,
498 			    &inode, &filename);
499 
500 	      if (gdbarch_addr_bit (gdbarch) == 32)
501 	        {
502 	          printf_filtered ("\t%10s %10s %10s %10s %s\n",
503 				   paddress (gdbarch, addr),
504 				   paddress (gdbarch, endaddr),
505 				   hex_string (endaddr - addr),
506 				   hex_string (offset),
507 				   *filename? filename : "");
508 		}
509 	      else
510 	        {
511 	          printf_filtered ("  %18s %18s %10s %10s %s\n",
512 				   paddress (gdbarch, addr),
513 				   paddress (gdbarch, endaddr),
514 				   hex_string (endaddr - addr),
515 				   hex_string (offset),
516 				   *filename? filename : "");
517 	        }
518 	    }
519 
520 	  do_cleanups (cleanup);
521 	}
522       else
523 	warning (_("unable to open /proc file '%s'"), filename);
524     }
525   if (status_f)
526     {
527       xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
528       data = target_fileio_read_stralloc (filename);
529       if (data)
530 	{
531 	  struct cleanup *cleanup = make_cleanup (xfree, data);
532           puts_filtered (data);
533 	  do_cleanups (cleanup);
534 	}
535       else
536 	warning (_("unable to open /proc file '%s'"), filename);
537     }
538   if (stat_f)
539     {
540       xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
541       data = target_fileio_read_stralloc (filename);
542       if (data)
543 	{
544 	  struct cleanup *cleanup = make_cleanup (xfree, data);
545 	  const char *p = data;
546 
547 	  printf_filtered (_("Process: %s\n"),
548 			   pulongest (strtoulst (p, &p, 10)));
549 
550 	  p = skip_spaces_const (p);
551 	  if (*p == '(')
552 	    {
553 	      /* ps command also relies on no trailing fields
554 		 ever contain ')'.  */
555 	      const char *ep = strrchr (p, ')');
556 	      if (ep != NULL)
557 		{
558 		  printf_filtered ("Exec file: %.*s\n",
559 				   (int) (ep - p - 1), p + 1);
560 		  p = ep + 1;
561 		}
562 	    }
563 
564 	  p = skip_spaces_const (p);
565 	  if (*p)
566 	    printf_filtered (_("State: %c\n"), *p++);
567 
568 	  if (*p)
569 	    printf_filtered (_("Parent process: %s\n"),
570 			     pulongest (strtoulst (p, &p, 10)));
571 	  if (*p)
572 	    printf_filtered (_("Process group: %s\n"),
573 			     pulongest (strtoulst (p, &p, 10)));
574 	  if (*p)
575 	    printf_filtered (_("Session id: %s\n"),
576 			     pulongest (strtoulst (p, &p, 10)));
577 	  if (*p)
578 	    printf_filtered (_("TTY: %s\n"),
579 			     pulongest (strtoulst (p, &p, 10)));
580 	  if (*p)
581 	    printf_filtered (_("TTY owner process group: %s\n"),
582 			     pulongest (strtoulst (p, &p, 10)));
583 
584 	  if (*p)
585 	    printf_filtered (_("Flags: %s\n"),
586 			     hex_string (strtoulst (p, &p, 10)));
587 	  if (*p)
588 	    printf_filtered (_("Minor faults (no memory page): %s\n"),
589 			     pulongest (strtoulst (p, &p, 10)));
590 	  if (*p)
591 	    printf_filtered (_("Minor faults, children: %s\n"),
592 			     pulongest (strtoulst (p, &p, 10)));
593 	  if (*p)
594 	    printf_filtered (_("Major faults (memory page faults): %s\n"),
595 			     pulongest (strtoulst (p, &p, 10)));
596 	  if (*p)
597 	    printf_filtered (_("Major faults, children: %s\n"),
598 			     pulongest (strtoulst (p, &p, 10)));
599 	  if (*p)
600 	    printf_filtered (_("utime: %s\n"),
601 			     pulongest (strtoulst (p, &p, 10)));
602 	  if (*p)
603 	    printf_filtered (_("stime: %s\n"),
604 			     pulongest (strtoulst (p, &p, 10)));
605 	  if (*p)
606 	    printf_filtered (_("utime, children: %s\n"),
607 			     pulongest (strtoulst (p, &p, 10)));
608 	  if (*p)
609 	    printf_filtered (_("stime, children: %s\n"),
610 			     pulongest (strtoulst (p, &p, 10)));
611 	  if (*p)
612 	    printf_filtered (_("jiffies remaining in current "
613 			       "time slice: %s\n"),
614 			     pulongest (strtoulst (p, &p, 10)));
615 	  if (*p)
616 	    printf_filtered (_("'nice' value: %s\n"),
617 			     pulongest (strtoulst (p, &p, 10)));
618 	  if (*p)
619 	    printf_filtered (_("jiffies until next timeout: %s\n"),
620 			     pulongest (strtoulst (p, &p, 10)));
621 	  if (*p)
622 	    printf_filtered (_("jiffies until next SIGALRM: %s\n"),
623 			     pulongest (strtoulst (p, &p, 10)));
624 	  if (*p)
625 	    printf_filtered (_("start time (jiffies since "
626 			       "system boot): %s\n"),
627 			     pulongest (strtoulst (p, &p, 10)));
628 	  if (*p)
629 	    printf_filtered (_("Virtual memory size: %s\n"),
630 			     pulongest (strtoulst (p, &p, 10)));
631 	  if (*p)
632 	    printf_filtered (_("Resident set size: %s\n"),
633 			     pulongest (strtoulst (p, &p, 10)));
634 	  if (*p)
635 	    printf_filtered (_("rlim: %s\n"),
636 			     pulongest (strtoulst (p, &p, 10)));
637 	  if (*p)
638 	    printf_filtered (_("Start of text: %s\n"),
639 			     hex_string (strtoulst (p, &p, 10)));
640 	  if (*p)
641 	    printf_filtered (_("End of text: %s\n"),
642 			     hex_string (strtoulst (p, &p, 10)));
643 	  if (*p)
644 	    printf_filtered (_("Start of stack: %s\n"),
645 			     hex_string (strtoulst (p, &p, 10)));
646 #if 0	/* Don't know how architecture-dependent the rest is...
647 	   Anyway the signal bitmap info is available from "status".  */
648 	  if (*p)
649 	    printf_filtered (_("Kernel stack pointer: %s\n"),
650 			     hex_string (strtoulst (p, &p, 10)));
651 	  if (*p)
652 	    printf_filtered (_("Kernel instr pointer: %s\n"),
653 			     hex_string (strtoulst (p, &p, 10)));
654 	  if (*p)
655 	    printf_filtered (_("Pending signals bitmap: %s\n"),
656 			     hex_string (strtoulst (p, &p, 10)));
657 	  if (*p)
658 	    printf_filtered (_("Blocked signals bitmap: %s\n"),
659 			     hex_string (strtoulst (p, &p, 10)));
660 	  if (*p)
661 	    printf_filtered (_("Ignored signals bitmap: %s\n"),
662 			     hex_string (strtoulst (p, &p, 10)));
663 	  if (*p)
664 	    printf_filtered (_("Catched signals bitmap: %s\n"),
665 			     hex_string (strtoulst (p, &p, 10)));
666 	  if (*p)
667 	    printf_filtered (_("wchan (system call): %s\n"),
668 			     hex_string (strtoulst (p, &p, 10)));
669 #endif
670 	  do_cleanups (cleanup);
671 	}
672       else
673 	warning (_("unable to open /proc file '%s'"), filename);
674     }
675 }
676 
677 /* Implement "info proc mappings" for a corefile.  */
678 
679 static void
680 linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args)
681 {
682   asection *section;
683   ULONGEST count, page_size;
684   unsigned char *descdata, *filenames, *descend, *contents;
685   size_t note_size;
686   unsigned int addr_size_bits, addr_size;
687   struct cleanup *cleanup;
688   struct gdbarch *core_gdbarch = gdbarch_from_bfd (core_bfd);
689   /* We assume this for reading 64-bit core files.  */
690   gdb_static_assert (sizeof (ULONGEST) >= 8);
691 
692   section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file");
693   if (section == NULL)
694     {
695       warning (_("unable to find mappings in core file"));
696       return;
697     }
698 
699   addr_size_bits = gdbarch_addr_bit (core_gdbarch);
700   addr_size = addr_size_bits / 8;
701   note_size = bfd_get_section_size (section);
702 
703   if (note_size < 2 * addr_size)
704     error (_("malformed core note - too short for header"));
705 
706   contents = xmalloc (note_size);
707   cleanup = make_cleanup (xfree, contents);
708   if (!bfd_get_section_contents (core_bfd, section, contents, 0, note_size))
709     error (_("could not get core note contents"));
710 
711   descdata = contents;
712   descend = descdata + note_size;
713 
714   if (descdata[note_size - 1] != '\0')
715     error (_("malformed note - does not end with \\0"));
716 
717   count = bfd_get (addr_size_bits, core_bfd, descdata);
718   descdata += addr_size;
719 
720   page_size = bfd_get (addr_size_bits, core_bfd, descdata);
721   descdata += addr_size;
722 
723   if (note_size < 2 * addr_size + count * 3 * addr_size)
724     error (_("malformed note - too short for supplied file count"));
725 
726   printf_filtered (_("Mapped address spaces:\n\n"));
727   if (gdbarch_addr_bit (gdbarch) == 32)
728     {
729       printf_filtered ("\t%10s %10s %10s %10s %s\n",
730 		       "Start Addr",
731 		       "  End Addr",
732 		       "      Size", "    Offset", "objfile");
733     }
734   else
735     {
736       printf_filtered ("  %18s %18s %10s %10s %s\n",
737 		       "Start Addr",
738 		       "  End Addr",
739 		       "      Size", "    Offset", "objfile");
740     }
741 
742   filenames = descdata + count * 3 * addr_size;
743   while (--count > 0)
744     {
745       ULONGEST start, end, file_ofs;
746 
747       if (filenames == descend)
748 	error (_("malformed note - filenames end too early"));
749 
750       start = bfd_get (addr_size_bits, core_bfd, descdata);
751       descdata += addr_size;
752       end = bfd_get (addr_size_bits, core_bfd, descdata);
753       descdata += addr_size;
754       file_ofs = bfd_get (addr_size_bits, core_bfd, descdata);
755       descdata += addr_size;
756 
757       file_ofs *= page_size;
758 
759       if (gdbarch_addr_bit (gdbarch) == 32)
760 	printf_filtered ("\t%10s %10s %10s %10s %s\n",
761 			 paddress (gdbarch, start),
762 			 paddress (gdbarch, end),
763 			 hex_string (end - start),
764 			 hex_string (file_ofs),
765 			 filenames);
766       else
767 	printf_filtered ("  %18s %18s %10s %10s %s\n",
768 			 paddress (gdbarch, start),
769 			 paddress (gdbarch, end),
770 			 hex_string (end - start),
771 			 hex_string (file_ofs),
772 			 filenames);
773 
774       filenames += 1 + strlen ((char *) filenames);
775     }
776 
777   do_cleanups (cleanup);
778 }
779 
780 /* Implement "info proc" for a corefile.  */
781 
782 static void
783 linux_core_info_proc (struct gdbarch *gdbarch, const char *args,
784 		      enum info_proc_what what)
785 {
786   int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
787   int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
788 
789   if (exe_f)
790     {
791       const char *exe;
792 
793       exe = bfd_core_file_failing_command (core_bfd);
794       if (exe != NULL)
795 	printf_filtered ("exe = '%s'\n", exe);
796       else
797 	warning (_("unable to find command name in core file"));
798     }
799 
800   if (mappings_f)
801     linux_core_info_proc_mappings (gdbarch, args);
802 
803   if (!exe_f && !mappings_f)
804     error (_("unable to handle request"));
805 }
806 
807 typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size,
808 					    ULONGEST offset, ULONGEST inode,
809 					    int read, int write,
810 					    int exec, int modified,
811 					    const char *filename,
812 					    void *data);
813 
814 /* List memory regions in the inferior for a corefile.  */
815 
816 static int
817 linux_find_memory_regions_full (struct gdbarch *gdbarch,
818 				linux_find_memory_region_ftype *func,
819 				void *obfd)
820 {
821   char mapsfilename[100];
822   char *data;
823 
824   /* We need to know the real target PID to access /proc.  */
825   if (current_inferior ()->fake_pid_p)
826     return 1;
827 
828   xsnprintf (mapsfilename, sizeof mapsfilename,
829 	     "/proc/%d/smaps", current_inferior ()->pid);
830   data = target_fileio_read_stralloc (mapsfilename);
831   if (data == NULL)
832     {
833       /* Older Linux kernels did not support /proc/PID/smaps.  */
834       xsnprintf (mapsfilename, sizeof mapsfilename,
835 		 "/proc/%d/maps", current_inferior ()->pid);
836       data = target_fileio_read_stralloc (mapsfilename);
837     }
838   if (data)
839     {
840       struct cleanup *cleanup = make_cleanup (xfree, data);
841       char *line;
842 
843       line = strtok (data, "\n");
844       while (line)
845 	{
846 	  ULONGEST addr, endaddr, offset, inode;
847 	  const char *permissions, *device, *filename;
848 	  size_t permissions_len, device_len;
849 	  int read, write, exec;
850 	  int modified = 0, has_anonymous = 0;
851 
852 	  read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
853 			&offset, &device, &device_len, &inode, &filename);
854 
855 	  /* Decode permissions.  */
856 	  read = (memchr (permissions, 'r', permissions_len) != 0);
857 	  write = (memchr (permissions, 'w', permissions_len) != 0);
858 	  exec = (memchr (permissions, 'x', permissions_len) != 0);
859 
860 	  /* Try to detect if region was modified by parsing smaps counters.  */
861 	  for (line = strtok (NULL, "\n");
862 	       line && line[0] >= 'A' && line[0] <= 'Z';
863 	       line = strtok (NULL, "\n"))
864 	    {
865 	      char keyword[64 + 1];
866 
867 	      if (sscanf (line, "%64s", keyword) != 1)
868 		{
869 		  warning (_("Error parsing {s,}maps file '%s'"), mapsfilename);
870 		  break;
871 		}
872 	      if (strcmp (keyword, "Anonymous:") == 0)
873 		has_anonymous = 1;
874 	      if (strcmp (keyword, "Shared_Dirty:") == 0
875 		  || strcmp (keyword, "Private_Dirty:") == 0
876 		  || strcmp (keyword, "Swap:") == 0
877 		  || strcmp (keyword, "Anonymous:") == 0)
878 		{
879 		  unsigned long number;
880 
881 		  if (sscanf (line, "%*s%lu", &number) != 1)
882 		    {
883 		      warning (_("Error parsing {s,}maps file '%s' number"),
884 			       mapsfilename);
885 		      break;
886 		    }
887 		  if (number != 0)
888 		    modified = 1;
889 		}
890 	    }
891 
892 	  /* Older Linux kernels did not support the "Anonymous:" counter.
893 	     If it is missing, we can't be sure - dump all the pages.  */
894 	  if (!has_anonymous)
895 	    modified = 1;
896 
897 	  /* Invoke the callback function to create the corefile segment.  */
898 	  func (addr, endaddr - addr, offset, inode,
899 		read, write, exec, modified, filename, obfd);
900 	}
901 
902       do_cleanups (cleanup);
903       return 0;
904     }
905 
906   return 1;
907 }
908 
909 /* A structure for passing information through
910    linux_find_memory_regions_full.  */
911 
912 struct linux_find_memory_regions_data
913 {
914   /* The original callback.  */
915 
916   find_memory_region_ftype func;
917 
918   /* The original datum.  */
919 
920   void *obfd;
921 };
922 
923 /* A callback for linux_find_memory_regions that converts between the
924    "full"-style callback and find_memory_region_ftype.  */
925 
926 static int
927 linux_find_memory_regions_thunk (ULONGEST vaddr, ULONGEST size,
928 				 ULONGEST offset, ULONGEST inode,
929 				 int read, int write, int exec, int modified,
930 				 const char *filename, void *arg)
931 {
932   struct linux_find_memory_regions_data *data = arg;
933 
934   return data->func (vaddr, size, read, write, exec, modified, data->obfd);
935 }
936 
937 /* A variant of linux_find_memory_regions_full that is suitable as the
938    gdbarch find_memory_regions method.  */
939 
940 static int
941 linux_find_memory_regions (struct gdbarch *gdbarch,
942 			   find_memory_region_ftype func, void *obfd)
943 {
944   struct linux_find_memory_regions_data data;
945 
946   data.func = func;
947   data.obfd = obfd;
948 
949   return linux_find_memory_regions_full (gdbarch,
950 					 linux_find_memory_regions_thunk,
951 					 &data);
952 }
953 
954 /* Determine which signal stopped execution.  */
955 
956 static int
957 find_signalled_thread (struct thread_info *info, void *data)
958 {
959   if (info->suspend.stop_signal != GDB_SIGNAL_0
960       && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
961     return 1;
962 
963   return 0;
964 }
965 
966 static enum gdb_signal
967 find_stop_signal (void)
968 {
969   struct thread_info *info =
970     iterate_over_threads (find_signalled_thread, NULL);
971 
972   if (info)
973     return info->suspend.stop_signal;
974   else
975     return GDB_SIGNAL_0;
976 }
977 
978 /* Generate corefile notes for SPU contexts.  */
979 
980 static char *
981 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
982 {
983   static const char *spu_files[] =
984     {
985       "object-id",
986       "mem",
987       "regs",
988       "fpcr",
989       "lslr",
990       "decr",
991       "decr_status",
992       "signal1",
993       "signal1_type",
994       "signal2",
995       "signal2_type",
996       "event_mask",
997       "event_status",
998       "mbox_info",
999       "ibox_info",
1000       "wbox_info",
1001       "dma_info",
1002       "proxydma_info",
1003    };
1004 
1005   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
1006   gdb_byte *spu_ids;
1007   LONGEST i, j, size;
1008 
1009   /* Determine list of SPU ids.  */
1010   size = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
1011 			    NULL, &spu_ids);
1012 
1013   /* Generate corefile notes for each SPU file.  */
1014   for (i = 0; i < size; i += 4)
1015     {
1016       int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order);
1017 
1018       for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
1019 	{
1020 	  char annex[32], note_name[32];
1021 	  gdb_byte *spu_data;
1022 	  LONGEST spu_len;
1023 
1024 	  xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
1025 	  spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
1026 				       annex, &spu_data);
1027 	  if (spu_len > 0)
1028 	    {
1029 	      xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
1030 	      note_data = elfcore_write_note (obfd, note_data, note_size,
1031 					      note_name, NT_SPU,
1032 					      spu_data, spu_len);
1033 	      xfree (spu_data);
1034 
1035 	      if (!note_data)
1036 		{
1037 		  xfree (spu_ids);
1038 		  return NULL;
1039 		}
1040 	    }
1041 	}
1042     }
1043 
1044   if (size > 0)
1045     xfree (spu_ids);
1046 
1047   return note_data;
1048 }
1049 
1050 /* This is used to pass information from
1051    linux_make_mappings_corefile_notes through
1052    linux_find_memory_regions_full.  */
1053 
1054 struct linux_make_mappings_data
1055 {
1056   /* Number of files mapped.  */
1057   ULONGEST file_count;
1058 
1059   /* The obstack for the main part of the data.  */
1060   struct obstack *data_obstack;
1061 
1062   /* The filename obstack.  */
1063   struct obstack *filename_obstack;
1064 
1065   /* The architecture's "long" type.  */
1066   struct type *long_type;
1067 };
1068 
1069 static linux_find_memory_region_ftype linux_make_mappings_callback;
1070 
1071 /* A callback for linux_find_memory_regions_full that updates the
1072    mappings data for linux_make_mappings_corefile_notes.  */
1073 
1074 static int
1075 linux_make_mappings_callback (ULONGEST vaddr, ULONGEST size,
1076 			      ULONGEST offset, ULONGEST inode,
1077 			      int read, int write, int exec, int modified,
1078 			      const char *filename, void *data)
1079 {
1080   struct linux_make_mappings_data *map_data = data;
1081   gdb_byte buf[sizeof (ULONGEST)];
1082 
1083   if (*filename == '\0' || inode == 0)
1084     return 0;
1085 
1086   ++map_data->file_count;
1087 
1088   pack_long (buf, map_data->long_type, vaddr);
1089   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1090   pack_long (buf, map_data->long_type, vaddr + size);
1091   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1092   pack_long (buf, map_data->long_type, offset);
1093   obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1094 
1095   obstack_grow_str0 (map_data->filename_obstack, filename);
1096 
1097   return 0;
1098 }
1099 
1100 /* Write the file mapping data to the core file, if possible.  OBFD is
1101    the output BFD.  NOTE_DATA is the current note data, and NOTE_SIZE
1102    is a pointer to the note size.  Returns the new NOTE_DATA and
1103    updates NOTE_SIZE.  */
1104 
1105 static char *
1106 linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
1107 				    char *note_data, int *note_size)
1108 {
1109   struct cleanup *cleanup;
1110   struct obstack data_obstack, filename_obstack;
1111   struct linux_make_mappings_data mapping_data;
1112   struct type *long_type
1113     = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 0, "long");
1114   gdb_byte buf[sizeof (ULONGEST)];
1115 
1116   obstack_init (&data_obstack);
1117   cleanup = make_cleanup_obstack_free (&data_obstack);
1118   obstack_init (&filename_obstack);
1119   make_cleanup_obstack_free (&filename_obstack);
1120 
1121   mapping_data.file_count = 0;
1122   mapping_data.data_obstack = &data_obstack;
1123   mapping_data.filename_obstack = &filename_obstack;
1124   mapping_data.long_type = long_type;
1125 
1126   /* Reserve space for the count.  */
1127   obstack_blank (&data_obstack, TYPE_LENGTH (long_type));
1128   /* We always write the page size as 1 since we have no good way to
1129      determine the correct value.  */
1130   pack_long (buf, long_type, 1);
1131   obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type));
1132 
1133   linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback,
1134 				  &mapping_data);
1135 
1136   if (mapping_data.file_count != 0)
1137     {
1138       /* Write the count to the obstack.  */
1139       pack_long ((gdb_byte *) obstack_base (&data_obstack),
1140 		 long_type, mapping_data.file_count);
1141 
1142       /* Copy the filenames to the data obstack.  */
1143       obstack_grow (&data_obstack, obstack_base (&filename_obstack),
1144 		    obstack_object_size (&filename_obstack));
1145 
1146       note_data = elfcore_write_note (obfd, note_data, note_size,
1147 				      "CORE", NT_FILE,
1148 				      obstack_base (&data_obstack),
1149 				      obstack_object_size (&data_obstack));
1150     }
1151 
1152   do_cleanups (cleanup);
1153   return note_data;
1154 }
1155 
1156 /* Structure for passing information from
1157    linux_collect_thread_registers via an iterator to
1158    linux_collect_regset_section_cb. */
1159 
1160 struct linux_collect_regset_section_cb_data
1161 {
1162   struct gdbarch *gdbarch;
1163   const struct regcache *regcache;
1164   bfd *obfd;
1165   char *note_data;
1166   int *note_size;
1167   unsigned long lwp;
1168   enum gdb_signal stop_signal;
1169   int abort_iteration;
1170 };
1171 
1172 /* Callback for iterate_over_regset_sections that records a single
1173    regset in the corefile note section.  */
1174 
1175 static void
1176 linux_collect_regset_section_cb (const char *sect_name, int size,
1177 				 const struct regset *regset,
1178 				 const char *human_name, void *cb_data)
1179 {
1180   char *buf;
1181   struct linux_collect_regset_section_cb_data *data = cb_data;
1182 
1183   if (data->abort_iteration)
1184     return;
1185 
1186   gdb_assert (regset && regset->collect_regset);
1187 
1188   buf = xmalloc (size);
1189   regset->collect_regset (regset, data->regcache, -1, buf, size);
1190 
1191   /* PRSTATUS still needs to be treated specially.  */
1192   if (strcmp (sect_name, ".reg") == 0)
1193     data->note_data = (char *) elfcore_write_prstatus
1194       (data->obfd, data->note_data, data->note_size, data->lwp,
1195        gdb_signal_to_host (data->stop_signal), buf);
1196   else
1197     data->note_data = (char *) elfcore_write_register_note
1198       (data->obfd, data->note_data, data->note_size,
1199        sect_name, buf, size);
1200   xfree (buf);
1201 
1202   if (data->note_data == NULL)
1203     data->abort_iteration = 1;
1204 }
1205 
1206 /* Records the thread's register state for the corefile note
1207    section.  */
1208 
1209 static char *
1210 linux_collect_thread_registers (const struct regcache *regcache,
1211 				ptid_t ptid, bfd *obfd,
1212 				char *note_data, int *note_size,
1213 				enum gdb_signal stop_signal)
1214 {
1215   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1216   struct linux_collect_regset_section_cb_data data;
1217 
1218   data.gdbarch = gdbarch;
1219   data.regcache = regcache;
1220   data.obfd = obfd;
1221   data.note_data = note_data;
1222   data.note_size = note_size;
1223   data.stop_signal = stop_signal;
1224   data.abort_iteration = 0;
1225 
1226   /* For remote targets the LWP may not be available, so use the TID.  */
1227   data.lwp = ptid_get_lwp (ptid);
1228   if (!data.lwp)
1229     data.lwp = ptid_get_tid (ptid);
1230 
1231   gdbarch_iterate_over_regset_sections (gdbarch,
1232 					linux_collect_regset_section_cb,
1233 					&data, regcache);
1234   return data.note_data;
1235 }
1236 
1237 /* Fetch the siginfo data for the current thread, if it exists.  If
1238    there is no data, or we could not read it, return NULL.  Otherwise,
1239    return a newly malloc'd buffer holding the data and fill in *SIZE
1240    with the size of the data.  The caller is responsible for freeing
1241    the data.  */
1242 
1243 static gdb_byte *
1244 linux_get_siginfo_data (struct gdbarch *gdbarch, LONGEST *size)
1245 {
1246   struct type *siginfo_type;
1247   gdb_byte *buf;
1248   LONGEST bytes_read;
1249   struct cleanup *cleanups;
1250 
1251   if (!gdbarch_get_siginfo_type_p (gdbarch))
1252     return NULL;
1253 
1254   siginfo_type = gdbarch_get_siginfo_type (gdbarch);
1255 
1256   buf = xmalloc (TYPE_LENGTH (siginfo_type));
1257   cleanups = make_cleanup (xfree, buf);
1258 
1259   bytes_read = target_read (&current_target, TARGET_OBJECT_SIGNAL_INFO, NULL,
1260 			    buf, 0, TYPE_LENGTH (siginfo_type));
1261   if (bytes_read == TYPE_LENGTH (siginfo_type))
1262     {
1263       discard_cleanups (cleanups);
1264       *size = bytes_read;
1265     }
1266   else
1267     {
1268       do_cleanups (cleanups);
1269       buf = NULL;
1270     }
1271 
1272   return buf;
1273 }
1274 
1275 struct linux_corefile_thread_data
1276 {
1277   struct gdbarch *gdbarch;
1278   int pid;
1279   bfd *obfd;
1280   char *note_data;
1281   int *note_size;
1282   enum gdb_signal stop_signal;
1283 };
1284 
1285 /* Called by gdbthread.c once per thread.  Records the thread's
1286    register state for the corefile note section.  */
1287 
1288 static int
1289 linux_corefile_thread_callback (struct thread_info *info, void *data)
1290 {
1291   struct linux_corefile_thread_data *args = data;
1292 
1293   /* It can be current thread
1294      which cannot be removed by update_thread_list.  */
1295   if (info->state == THREAD_EXITED)
1296     return 0;
1297 
1298   if (ptid_get_pid (info->ptid) == args->pid)
1299     {
1300       struct cleanup *old_chain;
1301       struct regcache *regcache;
1302       gdb_byte *siginfo_data;
1303       LONGEST siginfo_size = 0;
1304 
1305       regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
1306 
1307       old_chain = save_inferior_ptid ();
1308       inferior_ptid = info->ptid;
1309       target_fetch_registers (regcache, -1);
1310       siginfo_data = linux_get_siginfo_data (args->gdbarch, &siginfo_size);
1311       do_cleanups (old_chain);
1312 
1313       old_chain = make_cleanup (xfree, siginfo_data);
1314 
1315       args->note_data = linux_collect_thread_registers
1316 	(regcache, info->ptid, args->obfd, args->note_data,
1317 	 args->note_size, args->stop_signal);
1318 
1319       /* Don't return anything if we got no register information above,
1320          such a core file is useless.  */
1321       if (args->note_data != NULL)
1322 	if (siginfo_data != NULL)
1323 	  args->note_data = elfcore_write_note (args->obfd,
1324 						args->note_data,
1325 						args->note_size,
1326 						"CORE", NT_SIGINFO,
1327 						siginfo_data, siginfo_size);
1328 
1329       do_cleanups (old_chain);
1330     }
1331 
1332   return !args->note_data;
1333 }
1334 
1335 /* Fill the PRPSINFO structure with information about the process being
1336    debugged.  Returns 1 in case of success, 0 for failures.  Please note that
1337    even if the structure cannot be entirely filled (e.g., GDB was unable to
1338    gather information about the process UID/GID), this function will still
1339    return 1 since some information was already recorded.  It will only return
1340    0 iff nothing can be gathered.  */
1341 
1342 static int
1343 linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
1344 {
1345   /* The filename which we will use to obtain some info about the process.
1346      We will basically use this to store the `/proc/PID/FILENAME' file.  */
1347   char filename[100];
1348   /* The full name of the program which generated the corefile.  */
1349   char *fname;
1350   /* The basename of the executable.  */
1351   const char *basename;
1352   /* The arguments of the program.  */
1353   char *psargs;
1354   char *infargs;
1355   /* The contents of `/proc/PID/stat' and `/proc/PID/status' files.  */
1356   char *proc_stat, *proc_status;
1357   /* Temporary buffer.  */
1358   char *tmpstr;
1359   /* The valid states of a process, according to the Linux kernel.  */
1360   const char valid_states[] = "RSDTZW";
1361   /* The program state.  */
1362   const char *prog_state;
1363   /* The state of the process.  */
1364   char pr_sname;
1365   /* The PID of the program which generated the corefile.  */
1366   pid_t pid;
1367   /* Process flags.  */
1368   unsigned int pr_flag;
1369   /* Process nice value.  */
1370   long pr_nice;
1371   /* The number of fields read by `sscanf'.  */
1372   int n_fields = 0;
1373   /* Cleanups.  */
1374   struct cleanup *c;
1375   int i;
1376 
1377   gdb_assert (p != NULL);
1378 
1379   /* Obtaining PID and filename.  */
1380   pid = ptid_get_pid (inferior_ptid);
1381   xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
1382   fname = target_fileio_read_stralloc (filename);
1383 
1384   if (fname == NULL || *fname == '\0')
1385     {
1386       /* No program name was read, so we won't be able to retrieve more
1387 	 information about the process.  */
1388       xfree (fname);
1389       return 0;
1390     }
1391 
1392   c = make_cleanup (xfree, fname);
1393   memset (p, 0, sizeof (*p));
1394 
1395   /* Defining the PID.  */
1396   p->pr_pid = pid;
1397 
1398   /* Copying the program name.  Only the basename matters.  */
1399   basename = lbasename (fname);
1400   strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
1401   p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
1402 
1403   infargs = get_inferior_args ();
1404 
1405   psargs = xstrdup (fname);
1406   if (infargs != NULL)
1407     psargs = reconcat (psargs, psargs, " ", infargs, NULL);
1408 
1409   make_cleanup (xfree, psargs);
1410 
1411   strncpy (p->pr_psargs, psargs, sizeof (p->pr_psargs));
1412   p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
1413 
1414   xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
1415   proc_stat = target_fileio_read_stralloc (filename);
1416   make_cleanup (xfree, proc_stat);
1417 
1418   if (proc_stat == NULL || *proc_stat == '\0')
1419     {
1420       /* Despite being unable to read more information about the
1421 	 process, we return 1 here because at least we have its
1422 	 command line, PID and arguments.  */
1423       do_cleanups (c);
1424       return 1;
1425     }
1426 
1427   /* Ok, we have the stats.  It's time to do a little parsing of the
1428      contents of the buffer, so that we end up reading what we want.
1429 
1430      The following parsing mechanism is strongly based on the
1431      information generated by the `fs/proc/array.c' file, present in
1432      the Linux kernel tree.  More details about how the information is
1433      displayed can be obtained by seeing the manpage of proc(5),
1434      specifically under the entry of `/proc/[pid]/stat'.  */
1435 
1436   /* Getting rid of the PID, since we already have it.  */
1437   while (isdigit (*proc_stat))
1438     ++proc_stat;
1439 
1440   proc_stat = skip_spaces (proc_stat);
1441 
1442   /* ps command also relies on no trailing fields ever contain ')'.  */
1443   proc_stat = strrchr (proc_stat, ')');
1444   if (proc_stat == NULL)
1445     {
1446       do_cleanups (c);
1447       return 1;
1448     }
1449   proc_stat++;
1450 
1451   proc_stat = skip_spaces (proc_stat);
1452 
1453   n_fields = sscanf (proc_stat,
1454 		     "%c"		/* Process state.  */
1455 		     "%d%d%d"		/* Parent PID, group ID, session ID.  */
1456 		     "%*d%*d"		/* tty_nr, tpgid (not used).  */
1457 		     "%u"		/* Flags.  */
1458 		     "%*s%*s%*s%*s"	/* minflt, cminflt, majflt,
1459 					   cmajflt (not used).  */
1460 		     "%*s%*s%*s%*s"	/* utime, stime, cutime,
1461 					   cstime (not used).  */
1462 		     "%*s"		/* Priority (not used).  */
1463 		     "%ld",		/* Nice.  */
1464 		     &pr_sname,
1465 		     &p->pr_ppid, &p->pr_pgrp, &p->pr_sid,
1466 		     &pr_flag,
1467 		     &pr_nice);
1468 
1469   if (n_fields != 6)
1470     {
1471       /* Again, we couldn't read the complementary information about
1472 	 the process state.  However, we already have minimal
1473 	 information, so we just return 1 here.  */
1474       do_cleanups (c);
1475       return 1;
1476     }
1477 
1478   /* Filling the structure fields.  */
1479   prog_state = strchr (valid_states, pr_sname);
1480   if (prog_state != NULL)
1481     p->pr_state = prog_state - valid_states;
1482   else
1483     {
1484       /* Zero means "Running".  */
1485       p->pr_state = 0;
1486     }
1487 
1488   p->pr_sname = p->pr_state > 5 ? '.' : pr_sname;
1489   p->pr_zomb = p->pr_sname == 'Z';
1490   p->pr_nice = pr_nice;
1491   p->pr_flag = pr_flag;
1492 
1493   /* Finally, obtaining the UID and GID.  For that, we read and parse the
1494      contents of the `/proc/PID/status' file.  */
1495   xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
1496   proc_status = target_fileio_read_stralloc (filename);
1497   make_cleanup (xfree, proc_status);
1498 
1499   if (proc_status == NULL || *proc_status == '\0')
1500     {
1501       /* Returning 1 since we already have a bunch of information.  */
1502       do_cleanups (c);
1503       return 1;
1504     }
1505 
1506   /* Extracting the UID.  */
1507   tmpstr = strstr (proc_status, "Uid:");
1508   if (tmpstr != NULL)
1509     {
1510       /* Advancing the pointer to the beginning of the UID.  */
1511       tmpstr += sizeof ("Uid:");
1512       while (*tmpstr != '\0' && !isdigit (*tmpstr))
1513 	++tmpstr;
1514 
1515       if (isdigit (*tmpstr))
1516 	p->pr_uid = strtol (tmpstr, &tmpstr, 10);
1517     }
1518 
1519   /* Extracting the GID.  */
1520   tmpstr = strstr (proc_status, "Gid:");
1521   if (tmpstr != NULL)
1522     {
1523       /* Advancing the pointer to the beginning of the GID.  */
1524       tmpstr += sizeof ("Gid:");
1525       while (*tmpstr != '\0' && !isdigit (*tmpstr))
1526 	++tmpstr;
1527 
1528       if (isdigit (*tmpstr))
1529 	p->pr_gid = strtol (tmpstr, &tmpstr, 10);
1530     }
1531 
1532   do_cleanups (c);
1533 
1534   return 1;
1535 }
1536 
1537 /* Build the note section for a corefile, and return it in a malloc
1538    buffer.  */
1539 
1540 static char *
1541 linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
1542 {
1543   struct linux_corefile_thread_data thread_args;
1544   struct elf_internal_linux_prpsinfo prpsinfo;
1545   char *note_data = NULL;
1546   gdb_byte *auxv;
1547   int auxv_len;
1548   volatile struct gdb_exception e;
1549 
1550   if (! gdbarch_iterate_over_regset_sections_p (gdbarch))
1551     return NULL;
1552 
1553   if (linux_fill_prpsinfo (&prpsinfo))
1554     {
1555       if (gdbarch_elfcore_write_linux_prpsinfo_p (gdbarch))
1556 	{
1557 	  note_data = gdbarch_elfcore_write_linux_prpsinfo (gdbarch, obfd,
1558 							    note_data, note_size,
1559 							    &prpsinfo);
1560 	}
1561       else
1562 	{
1563 	  if (gdbarch_ptr_bit (gdbarch) == 64)
1564 	    note_data = elfcore_write_linux_prpsinfo64 (obfd,
1565 							note_data, note_size,
1566 							&prpsinfo);
1567 	  else
1568 	    note_data = elfcore_write_linux_prpsinfo32 (obfd,
1569 							note_data, note_size,
1570 							&prpsinfo);
1571 	}
1572     }
1573 
1574   /* Thread register information.  */
1575   TRY_CATCH (e, RETURN_MASK_ERROR)
1576     {
1577       update_thread_list ();
1578     }
1579   if (e.reason < 0)
1580     exception_print (gdb_stderr, e);
1581   thread_args.gdbarch = gdbarch;
1582   thread_args.pid = ptid_get_pid (inferior_ptid);
1583   thread_args.obfd = obfd;
1584   thread_args.note_data = note_data;
1585   thread_args.note_size = note_size;
1586   thread_args.stop_signal = find_stop_signal ();
1587   iterate_over_threads (linux_corefile_thread_callback, &thread_args);
1588   note_data = thread_args.note_data;
1589   if (!note_data)
1590     return NULL;
1591 
1592   /* Auxillary vector.  */
1593   auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
1594 				NULL, &auxv);
1595   if (auxv_len > 0)
1596     {
1597       note_data = elfcore_write_note (obfd, note_data, note_size,
1598 				      "CORE", NT_AUXV, auxv, auxv_len);
1599       xfree (auxv);
1600 
1601       if (!note_data)
1602 	return NULL;
1603     }
1604 
1605   /* SPU information.  */
1606   note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
1607   if (!note_data)
1608     return NULL;
1609 
1610   /* File mappings.  */
1611   note_data = linux_make_mappings_corefile_notes (gdbarch, obfd,
1612 						  note_data, note_size);
1613 
1614   return note_data;
1615 }
1616 
1617 /* Implementation of `gdbarch_gdb_signal_from_target', as defined in
1618    gdbarch.h.  This function is not static because it is exported to
1619    other -tdep files.  */
1620 
1621 enum gdb_signal
1622 linux_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
1623 {
1624   switch (signal)
1625     {
1626     case 0:
1627       return GDB_SIGNAL_0;
1628 
1629     case LINUX_SIGHUP:
1630       return GDB_SIGNAL_HUP;
1631 
1632     case LINUX_SIGINT:
1633       return GDB_SIGNAL_INT;
1634 
1635     case LINUX_SIGQUIT:
1636       return GDB_SIGNAL_QUIT;
1637 
1638     case LINUX_SIGILL:
1639       return GDB_SIGNAL_ILL;
1640 
1641     case LINUX_SIGTRAP:
1642       return GDB_SIGNAL_TRAP;
1643 
1644     case LINUX_SIGABRT:
1645       return GDB_SIGNAL_ABRT;
1646 
1647     case LINUX_SIGBUS:
1648       return GDB_SIGNAL_BUS;
1649 
1650     case LINUX_SIGFPE:
1651       return GDB_SIGNAL_FPE;
1652 
1653     case LINUX_SIGKILL:
1654       return GDB_SIGNAL_KILL;
1655 
1656     case LINUX_SIGUSR1:
1657       return GDB_SIGNAL_USR1;
1658 
1659     case LINUX_SIGSEGV:
1660       return GDB_SIGNAL_SEGV;
1661 
1662     case LINUX_SIGUSR2:
1663       return GDB_SIGNAL_USR2;
1664 
1665     case LINUX_SIGPIPE:
1666       return GDB_SIGNAL_PIPE;
1667 
1668     case LINUX_SIGALRM:
1669       return GDB_SIGNAL_ALRM;
1670 
1671     case LINUX_SIGTERM:
1672       return GDB_SIGNAL_TERM;
1673 
1674     case LINUX_SIGCHLD:
1675       return GDB_SIGNAL_CHLD;
1676 
1677     case LINUX_SIGCONT:
1678       return GDB_SIGNAL_CONT;
1679 
1680     case LINUX_SIGSTOP:
1681       return GDB_SIGNAL_STOP;
1682 
1683     case LINUX_SIGTSTP:
1684       return GDB_SIGNAL_TSTP;
1685 
1686     case LINUX_SIGTTIN:
1687       return GDB_SIGNAL_TTIN;
1688 
1689     case LINUX_SIGTTOU:
1690       return GDB_SIGNAL_TTOU;
1691 
1692     case LINUX_SIGURG:
1693       return GDB_SIGNAL_URG;
1694 
1695     case LINUX_SIGXCPU:
1696       return GDB_SIGNAL_XCPU;
1697 
1698     case LINUX_SIGXFSZ:
1699       return GDB_SIGNAL_XFSZ;
1700 
1701     case LINUX_SIGVTALRM:
1702       return GDB_SIGNAL_VTALRM;
1703 
1704     case LINUX_SIGPROF:
1705       return GDB_SIGNAL_PROF;
1706 
1707     case LINUX_SIGWINCH:
1708       return GDB_SIGNAL_WINCH;
1709 
1710     /* No way to differentiate between SIGIO and SIGPOLL.
1711        Therefore, we just handle the first one.  */
1712     case LINUX_SIGIO:
1713       return GDB_SIGNAL_IO;
1714 
1715     case LINUX_SIGPWR:
1716       return GDB_SIGNAL_PWR;
1717 
1718     case LINUX_SIGSYS:
1719       return GDB_SIGNAL_SYS;
1720 
1721     /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
1722        therefore we have to handle them here.  */
1723     case LINUX_SIGRTMIN:
1724       return GDB_SIGNAL_REALTIME_32;
1725 
1726     case LINUX_SIGRTMAX:
1727       return GDB_SIGNAL_REALTIME_64;
1728     }
1729 
1730   if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1)
1731     {
1732       int offset = signal - LINUX_SIGRTMIN + 1;
1733 
1734       return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset);
1735     }
1736 
1737   return GDB_SIGNAL_UNKNOWN;
1738 }
1739 
1740 /* Implementation of `gdbarch_gdb_signal_to_target', as defined in
1741    gdbarch.h.  This function is not static because it is exported to
1742    other -tdep files.  */
1743 
1744 int
1745 linux_gdb_signal_to_target (struct gdbarch *gdbarch,
1746 			    enum gdb_signal signal)
1747 {
1748   switch (signal)
1749     {
1750     case GDB_SIGNAL_0:
1751       return 0;
1752 
1753     case GDB_SIGNAL_HUP:
1754       return LINUX_SIGHUP;
1755 
1756     case GDB_SIGNAL_INT:
1757       return LINUX_SIGINT;
1758 
1759     case GDB_SIGNAL_QUIT:
1760       return LINUX_SIGQUIT;
1761 
1762     case GDB_SIGNAL_ILL:
1763       return LINUX_SIGILL;
1764 
1765     case GDB_SIGNAL_TRAP:
1766       return LINUX_SIGTRAP;
1767 
1768     case GDB_SIGNAL_ABRT:
1769       return LINUX_SIGABRT;
1770 
1771     case GDB_SIGNAL_FPE:
1772       return LINUX_SIGFPE;
1773 
1774     case GDB_SIGNAL_KILL:
1775       return LINUX_SIGKILL;
1776 
1777     case GDB_SIGNAL_BUS:
1778       return LINUX_SIGBUS;
1779 
1780     case GDB_SIGNAL_SEGV:
1781       return LINUX_SIGSEGV;
1782 
1783     case GDB_SIGNAL_SYS:
1784       return LINUX_SIGSYS;
1785 
1786     case GDB_SIGNAL_PIPE:
1787       return LINUX_SIGPIPE;
1788 
1789     case GDB_SIGNAL_ALRM:
1790       return LINUX_SIGALRM;
1791 
1792     case GDB_SIGNAL_TERM:
1793       return LINUX_SIGTERM;
1794 
1795     case GDB_SIGNAL_URG:
1796       return LINUX_SIGURG;
1797 
1798     case GDB_SIGNAL_STOP:
1799       return LINUX_SIGSTOP;
1800 
1801     case GDB_SIGNAL_TSTP:
1802       return LINUX_SIGTSTP;
1803 
1804     case GDB_SIGNAL_CONT:
1805       return LINUX_SIGCONT;
1806 
1807     case GDB_SIGNAL_CHLD:
1808       return LINUX_SIGCHLD;
1809 
1810     case GDB_SIGNAL_TTIN:
1811       return LINUX_SIGTTIN;
1812 
1813     case GDB_SIGNAL_TTOU:
1814       return LINUX_SIGTTOU;
1815 
1816     case GDB_SIGNAL_IO:
1817       return LINUX_SIGIO;
1818 
1819     case GDB_SIGNAL_XCPU:
1820       return LINUX_SIGXCPU;
1821 
1822     case GDB_SIGNAL_XFSZ:
1823       return LINUX_SIGXFSZ;
1824 
1825     case GDB_SIGNAL_VTALRM:
1826       return LINUX_SIGVTALRM;
1827 
1828     case GDB_SIGNAL_PROF:
1829       return LINUX_SIGPROF;
1830 
1831     case GDB_SIGNAL_WINCH:
1832       return LINUX_SIGWINCH;
1833 
1834     case GDB_SIGNAL_USR1:
1835       return LINUX_SIGUSR1;
1836 
1837     case GDB_SIGNAL_USR2:
1838       return LINUX_SIGUSR2;
1839 
1840     case GDB_SIGNAL_PWR:
1841       return LINUX_SIGPWR;
1842 
1843     case GDB_SIGNAL_POLL:
1844       return LINUX_SIGPOLL;
1845 
1846     /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
1847        therefore we have to handle it here.  */
1848     case GDB_SIGNAL_REALTIME_32:
1849       return LINUX_SIGRTMIN;
1850 
1851     /* Same comment applies to _64.  */
1852     case GDB_SIGNAL_REALTIME_64:
1853       return LINUX_SIGRTMAX;
1854     }
1855 
1856   /* GDB_SIGNAL_REALTIME_33 to _64 are continuous.  */
1857   if (signal >= GDB_SIGNAL_REALTIME_33
1858       && signal <= GDB_SIGNAL_REALTIME_63)
1859     {
1860       int offset = signal - GDB_SIGNAL_REALTIME_33;
1861 
1862       return LINUX_SIGRTMIN + 1 + offset;
1863     }
1864 
1865   return -1;
1866 }
1867 
1868 /* Rummage through mappings to find a mapping's size.  */
1869 
1870 static int
1871 find_mapping_size (CORE_ADDR vaddr, unsigned long size,
1872 		   int read, int write, int exec, int modified,
1873 		   void *data)
1874 {
1875   struct mem_range *range = data;
1876 
1877   if (vaddr == range->start)
1878     {
1879       range->length = size;
1880       return 1;
1881     }
1882   return 0;
1883 }
1884 
1885 /* Helper for linux_vsyscall_range that does the real work of finding
1886    the vsyscall's address range.  */
1887 
1888 static int
1889 linux_vsyscall_range_raw (struct gdbarch *gdbarch, struct mem_range *range)
1890 {
1891   if (target_auxv_search (&current_target, AT_SYSINFO_EHDR, &range->start) <= 0)
1892     return 0;
1893 
1894   /* This is installed by linux_init_abi below, so should always be
1895      available.  */
1896   gdb_assert (gdbarch_find_memory_regions_p (target_gdbarch ()));
1897 
1898   range->length = 0;
1899   gdbarch_find_memory_regions (gdbarch, find_mapping_size, range);
1900   return 1;
1901 }
1902 
1903 /* Implementation of the "vsyscall_range" gdbarch hook.  Handles
1904    caching, and defers the real work to linux_vsyscall_range_raw.  */
1905 
1906 static int
1907 linux_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
1908 {
1909   struct linux_info *info = get_linux_inferior_data ();
1910 
1911   if (info->vsyscall_range_p == 0)
1912     {
1913       if (linux_vsyscall_range_raw (gdbarch, &info->vsyscall_range))
1914 	info->vsyscall_range_p = 1;
1915       else
1916 	info->vsyscall_range_p = -1;
1917     }
1918 
1919   if (info->vsyscall_range_p < 0)
1920     return 0;
1921 
1922   *range = info->vsyscall_range;
1923   return 1;
1924 }
1925 
1926 /* Symbols for linux_infcall_mmap's ARG_FLAGS; their Linux MAP_* system
1927    definitions would be dependent on compilation host.  */
1928 #define GDB_MMAP_MAP_PRIVATE	0x02		/* Changes are private.  */
1929 #define GDB_MMAP_MAP_ANONYMOUS	0x20		/* Don't use a file.  */
1930 
1931 /* See gdbarch.sh 'infcall_mmap'.  */
1932 
1933 static CORE_ADDR
1934 linux_infcall_mmap (CORE_ADDR size, unsigned prot)
1935 {
1936   struct objfile *objf;
1937   /* Do there still exist any Linux systems without "mmap64"?
1938      "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32.  */
1939   struct value *mmap_val = find_function_in_inferior ("mmap64", &objf);
1940   struct value *addr_val;
1941   struct gdbarch *gdbarch = get_objfile_arch (objf);
1942   CORE_ADDR retval;
1943   enum
1944     {
1945       ARG_ADDR, ARG_LENGTH, ARG_PROT, ARG_FLAGS, ARG_FD, ARG_OFFSET, ARG_LAST
1946     };
1947   struct value *arg[ARG_LAST];
1948 
1949   arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
1950 				      0);
1951   /* Assuming sizeof (unsigned long) == sizeof (size_t).  */
1952   arg[ARG_LENGTH] = value_from_ulongest
1953 		    (builtin_type (gdbarch)->builtin_unsigned_long, size);
1954   gdb_assert ((prot & ~(GDB_MMAP_PROT_READ | GDB_MMAP_PROT_WRITE
1955 			| GDB_MMAP_PROT_EXEC))
1956 	      == 0);
1957   arg[ARG_PROT] = value_from_longest (builtin_type (gdbarch)->builtin_int, prot);
1958   arg[ARG_FLAGS] = value_from_longest (builtin_type (gdbarch)->builtin_int,
1959 				       GDB_MMAP_MAP_PRIVATE
1960 				       | GDB_MMAP_MAP_ANONYMOUS);
1961   arg[ARG_FD] = value_from_longest (builtin_type (gdbarch)->builtin_int, -1);
1962   arg[ARG_OFFSET] = value_from_longest (builtin_type (gdbarch)->builtin_int64,
1963 					0);
1964   addr_val = call_function_by_hand (mmap_val, ARG_LAST, arg);
1965   retval = value_as_address (addr_val);
1966   if (retval == (CORE_ADDR) -1)
1967     error (_("Failed inferior mmap call for %s bytes, errno is changed."),
1968 	   pulongest (size));
1969   return retval;
1970 }
1971 
1972 /* To be called from the various GDB_OSABI_LINUX handlers for the
1973    various GNU/Linux architectures and machine types.  */
1974 
1975 void
1976 linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1977 {
1978   set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
1979   set_gdbarch_info_proc (gdbarch, linux_info_proc);
1980   set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc);
1981   set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
1982   set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes);
1983   set_gdbarch_has_shared_address_space (gdbarch,
1984 					linux_has_shared_address_space);
1985   set_gdbarch_gdb_signal_from_target (gdbarch,
1986 				      linux_gdb_signal_from_target);
1987   set_gdbarch_gdb_signal_to_target (gdbarch,
1988 				    linux_gdb_signal_to_target);
1989   set_gdbarch_vsyscall_range (gdbarch, linux_vsyscall_range);
1990   set_gdbarch_infcall_mmap (gdbarch, linux_infcall_mmap);
1991 }
1992 
1993 /* Provide a prototype to silence -Wmissing-prototypes.  */
1994 extern initialize_file_ftype _initialize_linux_tdep;
1995 
1996 void
1997 _initialize_linux_tdep (void)
1998 {
1999   linux_gdbarch_data_handle =
2000     gdbarch_data_register_post_init (init_linux_gdbarch_data);
2001 
2002   /* Set a cache per-inferior.  */
2003   linux_inferior_data
2004     = register_inferior_data_with_cleanup (NULL, linux_inferior_data_cleanup);
2005   /* Observers used to invalidate the cache when needed.  */
2006   observer_attach_inferior_exit (invalidate_linux_cache_inf);
2007   observer_attach_inferior_appeared (invalidate_linux_cache_inf);
2008 }
2009