ee0f655c108160fb14780e09070b19ed6ccde300
[external/binutils.git] / gdb / corelow.c
1 /* Core dump and executable file functions below target vector, for GDB.
2
3    Copyright (C) 1986-2014 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 "arch-utils.h"
22 #include <errno.h>
23 #include <signal.h>
24 #include <fcntl.h>
25 #ifdef HAVE_SYS_FILE_H
26 #include <sys/file.h>           /* needed for F_OK and friends */
27 #endif
28 #include "frame.h"              /* required by inferior.h */
29 #include "inferior.h"
30 #include "infrun.h"
31 #include "symtab.h"
32 #include "command.h"
33 #include "bfd.h"
34 #include "target.h"
35 #include "gdbcore.h"
36 #include "gdbthread.h"
37 #include "regcache.h"
38 #include "regset.h"
39 #include "symfile.h"
40 #include "exec.h"
41 #include "readline/readline.h"
42 #include "exceptions.h"
43 #include "solib.h"
44 #include "filenames.h"
45 #include "progspace.h"
46 #include "objfiles.h"
47 #include "gdb_bfd.h"
48 #include "completer.h"
49 #include "filestuff.h"
50
51 #ifndef O_LARGEFILE
52 #define O_LARGEFILE 0
53 #endif
54
55 /* List of all available core_fns.  On gdb startup, each core file
56    register reader calls deprecated_add_core_fns() to register
57    information on each core format it is prepared to read.  */
58
59 static struct core_fns *core_file_fns = NULL;
60
61 /* The core_fns for a core file handler that is prepared to read the
62    core file currently open on core_bfd.  */
63
64 static struct core_fns *core_vec = NULL;
65
66 /* FIXME: kettenis/20031023: Eventually this variable should
67    disappear.  */
68
69 static struct gdbarch *core_gdbarch = NULL;
70
71 /* Per-core data.  Currently, only the section table.  Note that these
72    target sections are *not* mapped in the current address spaces' set
73    of target sections --- those should come only from pure executable
74    or shared library bfds.  The core bfd sections are an
75    implementation detail of the core target, just like ptrace is for
76    unix child targets.  */
77 static struct target_section_table *core_data;
78
79 static void core_files_info (struct target_ops *);
80
81 static struct core_fns *sniff_core_bfd (bfd *);
82
83 static int gdb_check_format (bfd *);
84
85 static void core_close (struct target_ops *self);
86
87 static void core_close_cleanup (void *ignore);
88
89 static void add_to_thread_list (bfd *, asection *, void *);
90
91 static void init_core_ops (void);
92
93 void _initialize_corelow (void);
94
95 static struct target_ops core_ops;
96
97 /* An arbitrary identifier for the core inferior.  */
98 #define CORELOW_PID 1
99
100 /* Link a new core_fns into the global core_file_fns list.  Called on
101    gdb startup by the _initialize routine in each core file register
102    reader, to register information about each format the reader is
103    prepared to handle.  */
104
105 void
106 deprecated_add_core_fns (struct core_fns *cf)
107 {
108   cf->next = core_file_fns;
109   core_file_fns = cf;
110 }
111
112 /* The default function that core file handlers can use to examine a
113    core file BFD and decide whether or not to accept the job of
114    reading the core file.  */
115
116 int
117 default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
118 {
119   int result;
120
121   result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
122   return (result);
123 }
124
125 /* Walk through the list of core functions to find a set that can
126    handle the core file open on ABFD.  Returns pointer to set that is
127    selected.  */
128
129 static struct core_fns *
130 sniff_core_bfd (bfd *abfd)
131 {
132   struct core_fns *cf;
133   struct core_fns *yummy = NULL;
134   int matches = 0;;
135
136   /* Don't sniff if we have support for register sets in
137      CORE_GDBARCH.  */
138   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
139     return NULL;
140
141   for (cf = core_file_fns; cf != NULL; cf = cf->next)
142     {
143       if (cf->core_sniffer (cf, abfd))
144         {
145           yummy = cf;
146           matches++;
147         }
148     }
149   if (matches > 1)
150     {
151       warning (_("\"%s\": ambiguous core format, %d handlers match"),
152                bfd_get_filename (abfd), matches);
153     }
154   else if (matches == 0)
155     error (_("\"%s\": no core file handler recognizes format"),
156            bfd_get_filename (abfd));
157
158   return (yummy);
159 }
160
161 /* The default is to reject every core file format we see.  Either
162    BFD has to recognize it, or we have to provide a function in the
163    core file handler that recognizes it.  */
164
165 int
166 default_check_format (bfd *abfd)
167 {
168   return (0);
169 }
170
171 /* Attempt to recognize core file formats that BFD rejects.  */
172
173 static int
174 gdb_check_format (bfd *abfd)
175 {
176   struct core_fns *cf;
177
178   for (cf = core_file_fns; cf != NULL; cf = cf->next)
179     {
180       if (cf->check_format (abfd))
181         {
182           return (1);
183         }
184     }
185   return (0);
186 }
187
188 /* Discard all vestiges of any previous core file and mark data and
189    stack spaces as empty.  */
190
191 static void
192 core_close (struct target_ops *self)
193 {
194   if (core_bfd)
195     {
196       int pid = ptid_get_pid (inferior_ptid);
197       inferior_ptid = null_ptid;    /* Avoid confusion from thread
198                                        stuff.  */
199       if (pid != 0)
200         exit_inferior_silent (pid);
201
202       /* Clear out solib state while the bfd is still open.  See
203          comments in clear_solib in solib.c.  */
204       clear_solib ();
205
206       if (core_data)
207         {
208           xfree (core_data->sections);
209           xfree (core_data);
210           core_data = NULL;
211         }
212
213       gdb_bfd_unref (core_bfd);
214       core_bfd = NULL;
215     }
216   core_vec = NULL;
217   core_gdbarch = NULL;
218 }
219
220 static void
221 core_close_cleanup (void *ignore)
222 {
223   core_close (NULL);
224 }
225
226 /* Look for sections whose names start with `.reg/' so that we can
227    extract the list of threads in a core file.  */
228
229 static void
230 add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
231 {
232   ptid_t ptid;
233   int core_tid;
234   int pid, lwpid;
235   asection *reg_sect = (asection *) reg_sect_arg;
236   int fake_pid_p = 0;
237   struct inferior *inf;
238
239   if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
240     return;
241
242   core_tid = atoi (bfd_section_name (abfd, asect) + 5);
243
244   pid = bfd_core_file_pid (core_bfd);
245   if (pid == 0)
246     {
247       fake_pid_p = 1;
248       pid = CORELOW_PID;
249     }
250
251   lwpid = core_tid;
252
253   inf = current_inferior ();
254   if (inf->pid == 0)
255     {
256       inferior_appeared (inf, pid);
257       inf->fake_pid_p = fake_pid_p;
258     }
259
260   ptid = ptid_build (pid, lwpid, 0);
261
262   add_thread (ptid);
263
264 /* Warning, Will Robinson, looking at BFD private data! */
265
266   if (reg_sect != NULL
267       && asect->filepos == reg_sect->filepos)   /* Did we find .reg?  */
268     inferior_ptid = ptid;                       /* Yes, make it current.  */
269 }
270
271 /* This routine opens and sets up the core file bfd.  */
272
273 static void
274 core_open (const char *arg, int from_tty)
275 {
276   const char *p;
277   int siggy;
278   struct cleanup *old_chain;
279   char *temp;
280   bfd *temp_bfd;
281   int scratch_chan;
282   int flags;
283   volatile struct gdb_exception except;
284   char *filename;
285
286   target_preopen (from_tty);
287   if (!arg)
288     {
289       if (core_bfd)
290         error (_("No core file specified.  (Use `detach' "
291                  "to stop debugging a core file.)"));
292       else
293         error (_("No core file specified."));
294     }
295
296   filename = tilde_expand (arg);
297   if (!IS_ABSOLUTE_PATH (filename))
298     {
299       temp = concat (current_directory, "/",
300                      filename, (char *) NULL);
301       xfree (filename);
302       filename = temp;
303     }
304
305   old_chain = make_cleanup (xfree, filename);
306
307   flags = O_BINARY | O_LARGEFILE;
308   if (write_files)
309     flags |= O_RDWR;
310   else
311     flags |= O_RDONLY;
312   scratch_chan = gdb_open_cloexec (filename, flags, 0);
313   if (scratch_chan < 0)
314     perror_with_name (filename);
315
316   temp_bfd = gdb_bfd_fopen (filename, gnutarget, 
317                             write_files ? FOPEN_RUB : FOPEN_RB,
318                             scratch_chan);
319   if (temp_bfd == NULL)
320     perror_with_name (filename);
321
322   if (!bfd_check_format (temp_bfd, bfd_core)
323       && !gdb_check_format (temp_bfd))
324     {
325       /* Do it after the err msg */
326       /* FIXME: should be checking for errors from bfd_close (for one
327          thing, on error it does not free all the storage associated
328          with the bfd).  */
329       make_cleanup_bfd_unref (temp_bfd);
330       error (_("\"%s\" is not a core dump: %s"),
331              filename, bfd_errmsg (bfd_get_error ()));
332     }
333
334   /* Looks semi-reasonable.  Toss the old core file and work on the
335      new.  */
336
337   do_cleanups (old_chain);
338   unpush_target (&core_ops);
339   core_bfd = temp_bfd;
340   old_chain = make_cleanup (core_close_cleanup, 0 /*ignore*/);
341
342   core_gdbarch = gdbarch_from_bfd (core_bfd);
343
344   /* Find a suitable core file handler to munch on core_bfd */
345   core_vec = sniff_core_bfd (core_bfd);
346
347   validate_files ();
348
349   core_data = XCNEW (struct target_section_table);
350
351   /* Find the data section */
352   if (build_section_table (core_bfd,
353                            &core_data->sections,
354                            &core_data->sections_end))
355     error (_("\"%s\": Can't find sections: %s"),
356            bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
357
358   /* If we have no exec file, try to set the architecture from the
359      core file.  We don't do this unconditionally since an exec file
360      typically contains more information that helps us determine the
361      architecture than a core file.  */
362   if (!exec_bfd)
363     set_gdbarch_from_file (core_bfd);
364
365   push_target (&core_ops);
366   discard_cleanups (old_chain);
367
368   /* Do this before acknowledging the inferior, so if
369      post_create_inferior throws (can happen easilly if you're loading
370      a core file with the wrong exec), we aren't left with threads
371      from the previous inferior.  */
372   init_thread_list ();
373
374   inferior_ptid = null_ptid;
375
376   /* Need to flush the register cache (and the frame cache) from a
377      previous debug session.  If inferior_ptid ends up the same as the
378      last debug session --- e.g., b foo; run; gcore core1; step; gcore
379      core2; core core1; core core2 --- then there's potential for
380      get_current_regcache to return the cached regcache of the
381      previous session, and the frame cache being stale.  */
382   registers_changed ();
383
384   /* Build up thread list from BFD sections, and possibly set the
385      current thread to the .reg/NN section matching the .reg
386      section.  */
387   bfd_map_over_sections (core_bfd, add_to_thread_list,
388                          bfd_get_section_by_name (core_bfd, ".reg"));
389
390   if (ptid_equal (inferior_ptid, null_ptid))
391     {
392       /* Either we found no .reg/NN section, and hence we have a
393          non-threaded core (single-threaded, from gdb's perspective),
394          or for some reason add_to_thread_list couldn't determine
395          which was the "main" thread.  The latter case shouldn't
396          usually happen, but we're dealing with input here, which can
397          always be broken in different ways.  */
398       struct thread_info *thread = first_thread_of_process (-1);
399
400       if (thread == NULL)
401         {
402           inferior_appeared (current_inferior (), CORELOW_PID);
403           inferior_ptid = pid_to_ptid (CORELOW_PID);
404           add_thread_silent (inferior_ptid);
405         }
406       else
407         switch_to_thread (thread->ptid);
408     }
409
410   post_create_inferior (&core_ops, from_tty);
411
412   /* Now go through the target stack looking for threads since there
413      may be a thread_stratum target loaded on top of target core by
414      now.  The layer above should claim threads found in the BFD
415      sections.  */
416   TRY_CATCH (except, RETURN_MASK_ERROR)
417     {
418       target_find_new_threads ();
419     }
420
421   if (except.reason < 0)
422     exception_print (gdb_stderr, except);
423
424   p = bfd_core_file_failing_command (core_bfd);
425   if (p)
426     printf_filtered (_("Core was generated by `%s'.\n"), p);
427
428   /* Clearing any previous state of convenience variables.  */
429   clear_exit_convenience_vars ();
430
431   siggy = bfd_core_file_failing_signal (core_bfd);
432   if (siggy > 0)
433     {
434       /* If we don't have a CORE_GDBARCH to work with, assume a native
435          core (map gdb_signal from host signals).  If we do have
436          CORE_GDBARCH to work with, but no gdb_signal_from_target
437          implementation for that gdbarch, as a fallback measure,
438          assume the host signal mapping.  It'll be correct for native
439          cores, but most likely incorrect for cross-cores.  */
440       enum gdb_signal sig = (core_gdbarch != NULL
441                              && gdbarch_gdb_signal_from_target_p (core_gdbarch)
442                              ? gdbarch_gdb_signal_from_target (core_gdbarch,
443                                                                siggy)
444                              : gdb_signal_from_host (siggy));
445
446       printf_filtered (_("Program terminated with signal %s, %s.\n"),
447                        gdb_signal_to_name (sig), gdb_signal_to_string (sig));
448
449       /* Set the value of the internal variable $_exitsignal,
450          which holds the signal uncaught by the inferior.  */
451       set_internalvar_integer (lookup_internalvar ("_exitsignal"),
452                                siggy);
453     }
454
455   /* Fetch all registers from core file.  */
456   target_fetch_registers (get_current_regcache (), -1);
457
458   /* Now, set up the frame cache, and print the top of stack.  */
459   reinit_frame_cache ();
460   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
461 }
462
463 static void
464 core_detach (struct target_ops *ops, const char *args, int from_tty)
465 {
466   if (args)
467     error (_("Too many arguments"));
468   unpush_target (ops);
469   reinit_frame_cache ();
470   if (from_tty)
471     printf_filtered (_("No core file now.\n"));
472 }
473
474 /* Try to retrieve registers from a section in core_bfd, and supply
475    them to core_vec->core_read_registers, as the register set numbered
476    WHICH.
477
478    If inferior_ptid's lwp member is zero, do the single-threaded
479    thing: look for a section named NAME.  If inferior_ptid's lwp
480    member is non-zero, do the multi-threaded thing: look for a section
481    named "NAME/LWP", where LWP is the shortest ASCII decimal
482    representation of inferior_ptid's lwp member.
483
484    HUMAN_NAME is a human-readable name for the kind of registers the
485    NAME section contains, for use in error messages.
486
487    If REQUIRED is non-zero, print an error if the core file doesn't
488    have a section by the appropriate name.  Otherwise, just do
489    nothing.  */
490
491 static void
492 get_core_register_section (struct regcache *regcache,
493                            const char *name,
494                            int which,
495                            const char *human_name,
496                            int required)
497 {
498   static char *section_name = NULL;
499   struct bfd_section *section;
500   bfd_size_type size;
501   char *contents;
502
503   xfree (section_name);
504
505   if (ptid_get_lwp (inferior_ptid))
506     section_name = xstrprintf ("%s/%ld", name,
507                                ptid_get_lwp (inferior_ptid));
508   else
509     section_name = xstrdup (name);
510
511   section = bfd_get_section_by_name (core_bfd, section_name);
512   if (! section)
513     {
514       if (required)
515         warning (_("Couldn't find %s registers in core file."),
516                  human_name);
517       return;
518     }
519
520   size = bfd_section_size (core_bfd, section);
521   contents = alloca (size);
522   if (! bfd_get_section_contents (core_bfd, section, contents,
523                                   (file_ptr) 0, size))
524     {
525       warning (_("Couldn't read %s registers from `%s' section in core file."),
526                human_name, name);
527       return;
528     }
529
530   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
531     {
532       const struct regset *regset;
533
534       regset = gdbarch_regset_from_core_section (core_gdbarch,
535                                                  name, size);
536       if (regset == NULL)
537         {
538           if (required)
539             warning (_("Couldn't recognize %s registers in core file."),
540                      human_name);
541           return;
542         }
543
544       regset->supply_regset (regset, regcache, -1, contents, size);
545       return;
546     }
547
548   gdb_assert (core_vec);
549   core_vec->core_read_registers (regcache, contents, size, which,
550                                  ((CORE_ADDR)
551                                   bfd_section_vma (core_bfd, section)));
552 }
553
554
555 /* Get the registers out of a core file.  This is the machine-
556    independent part.  Fetch_core_registers is the machine-dependent
557    part, typically implemented in the xm-file for each
558    architecture.  */
559
560 /* We just get all the registers, so we don't use regno.  */
561
562 static void
563 get_core_registers (struct target_ops *ops,
564                     struct regcache *regcache, int regno)
565 {
566   struct core_regset_section *sect_list;
567   int i;
568
569   if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
570       && (core_vec == NULL || core_vec->core_read_registers == NULL))
571     {
572       fprintf_filtered (gdb_stderr,
573                      "Can't fetch registers from this type of core file\n");
574       return;
575     }
576
577   sect_list = gdbarch_core_regset_sections (get_regcache_arch (regcache));
578   if (sect_list)
579     while (sect_list->sect_name != NULL)
580       {
581         if (strcmp (sect_list->sect_name, ".reg") == 0)
582           get_core_register_section (regcache, sect_list->sect_name,
583                                      0, sect_list->human_name, 1);
584         else if (strcmp (sect_list->sect_name, ".reg2") == 0)
585           get_core_register_section (regcache, sect_list->sect_name,
586                                      2, sect_list->human_name, 0);
587         else
588           get_core_register_section (regcache, sect_list->sect_name,
589                                      3, sect_list->human_name, 0);
590
591         sect_list++;
592       }
593
594   else
595     {
596       get_core_register_section (regcache,
597                                  ".reg", 0, "general-purpose", 1);
598       get_core_register_section (regcache,
599                                  ".reg2", 2, "floating-point", 0);
600     }
601
602   /* Mark all registers not found in the core as unavailable.  */
603   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
604     if (regcache_register_status (regcache, i) == REG_UNKNOWN)
605       regcache_raw_supply (regcache, i, NULL);
606 }
607
608 static void
609 core_files_info (struct target_ops *t)
610 {
611   print_section_info (core_data, core_bfd);
612 }
613 \f
614 struct spuid_list
615 {
616   gdb_byte *buf;
617   ULONGEST offset;
618   LONGEST len;
619   ULONGEST pos;
620   ULONGEST written;
621 };
622
623 static void
624 add_to_spuid_list (bfd *abfd, asection *asect, void *list_p)
625 {
626   struct spuid_list *list = list_p;
627   enum bfd_endian byte_order
628     = bfd_big_endian (abfd) ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
629   int fd, pos = 0;
630
631   sscanf (bfd_section_name (abfd, asect), "SPU/%d/regs%n", &fd, &pos);
632   if (pos == 0)
633     return;
634
635   if (list->pos >= list->offset && list->pos + 4 <= list->offset + list->len)
636     {
637       store_unsigned_integer (list->buf + list->pos - list->offset,
638                               4, byte_order, fd);
639       list->written += 4;
640     }
641   list->pos += 4;
642 }
643
644 /* Read siginfo data from the core, if possible.  Returns -1 on
645    failure.  Otherwise, returns the number of bytes read.  ABFD is the
646    core file's BFD; READBUF, OFFSET, and LEN are all as specified by
647    the to_xfer_partial interface.  */
648
649 static LONGEST
650 get_core_siginfo (bfd *abfd, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
651 {
652   asection *section;
653   char *section_name;
654   const char *name = ".note.linuxcore.siginfo";
655
656   if (ptid_get_lwp (inferior_ptid))
657     section_name = xstrprintf ("%s/%ld", name,
658                                ptid_get_lwp (inferior_ptid));
659   else
660     section_name = xstrdup (name);
661
662   section = bfd_get_section_by_name (abfd, section_name);
663   xfree (section_name);
664   if (section == NULL)
665     return -1;
666
667   if (!bfd_get_section_contents (abfd, section, readbuf, offset, len))
668     return -1;
669
670   return len;
671 }
672
673 static enum target_xfer_status
674 core_xfer_partial (struct target_ops *ops, enum target_object object,
675                    const char *annex, gdb_byte *readbuf,
676                    const gdb_byte *writebuf, ULONGEST offset,
677                    ULONGEST len, ULONGEST *xfered_len)
678 {
679   switch (object)
680     {
681     case TARGET_OBJECT_MEMORY:
682       return section_table_xfer_memory_partial (readbuf, writebuf,
683                                                 offset, len, xfered_len,
684                                                 core_data->sections,
685                                                 core_data->sections_end,
686                                                 NULL);
687
688     case TARGET_OBJECT_AUXV:
689       if (readbuf)
690         {
691           /* When the aux vector is stored in core file, BFD
692              represents this with a fake section called ".auxv".  */
693
694           struct bfd_section *section;
695           bfd_size_type size;
696
697           section = bfd_get_section_by_name (core_bfd, ".auxv");
698           if (section == NULL)
699             return TARGET_XFER_E_IO;
700
701           size = bfd_section_size (core_bfd, section);
702           if (offset >= size)
703             return TARGET_XFER_EOF;
704           size -= offset;
705           if (size > len)
706             size = len;
707
708           if (size == 0)
709             return TARGET_XFER_EOF;
710           if (!bfd_get_section_contents (core_bfd, section, readbuf,
711                                          (file_ptr) offset, size))
712             {
713               warning (_("Couldn't read NT_AUXV note in core file."));
714               return TARGET_XFER_E_IO;
715             }
716
717           *xfered_len = (ULONGEST) size;
718           return TARGET_XFER_OK;
719         }
720       return TARGET_XFER_E_IO;
721
722     case TARGET_OBJECT_WCOOKIE:
723       if (readbuf)
724         {
725           /* When the StackGhost cookie is stored in core file, BFD
726              represents this with a fake section called
727              ".wcookie".  */
728
729           struct bfd_section *section;
730           bfd_size_type size;
731
732           section = bfd_get_section_by_name (core_bfd, ".wcookie");
733           if (section == NULL)
734             return TARGET_XFER_E_IO;
735
736           size = bfd_section_size (core_bfd, section);
737           if (offset >= size)
738             return 0;
739           size -= offset;
740           if (size > len)
741             size = len;
742
743           if (size == 0)
744             return TARGET_XFER_EOF;
745           if (!bfd_get_section_contents (core_bfd, section, readbuf,
746                                          (file_ptr) offset, size))
747             {
748               warning (_("Couldn't read StackGhost cookie in core file."));
749               return TARGET_XFER_E_IO;
750             }
751
752           *xfered_len = (ULONGEST) size;
753           return TARGET_XFER_OK;
754
755         }
756       return TARGET_XFER_E_IO;
757
758     case TARGET_OBJECT_LIBRARIES:
759       if (core_gdbarch
760           && gdbarch_core_xfer_shared_libraries_p (core_gdbarch))
761         {
762           if (writebuf)
763             return TARGET_XFER_E_IO;
764           else
765             {
766               *xfered_len = gdbarch_core_xfer_shared_libraries (core_gdbarch,
767                                                                 readbuf,
768                                                                 offset, len);
769
770               if (*xfered_len == 0)
771                 return TARGET_XFER_EOF;
772               else
773                 return TARGET_XFER_OK;
774             }
775         }
776       /* FALL THROUGH */
777
778     case TARGET_OBJECT_LIBRARIES_AIX:
779       if (core_gdbarch
780           && gdbarch_core_xfer_shared_libraries_aix_p (core_gdbarch))
781         {
782           if (writebuf)
783             return TARGET_XFER_E_IO;
784           else
785             {
786               *xfered_len
787                 = gdbarch_core_xfer_shared_libraries_aix (core_gdbarch,
788                                                           readbuf, offset,
789                                                           len);
790
791               if (*xfered_len == 0)
792                 return TARGET_XFER_EOF;
793               else
794                 return TARGET_XFER_OK;
795             }
796         }
797       /* FALL THROUGH */
798
799     case TARGET_OBJECT_SPU:
800       if (readbuf && annex)
801         {
802           /* When the SPU contexts are stored in a core file, BFD
803              represents this with a fake section called
804              "SPU/<annex>".  */
805
806           struct bfd_section *section;
807           bfd_size_type size;
808           char sectionstr[100];
809
810           xsnprintf (sectionstr, sizeof sectionstr, "SPU/%s", annex);
811
812           section = bfd_get_section_by_name (core_bfd, sectionstr);
813           if (section == NULL)
814             return TARGET_XFER_E_IO;
815
816           size = bfd_section_size (core_bfd, section);
817           if (offset >= size)
818             return TARGET_XFER_EOF;
819           size -= offset;
820           if (size > len)
821             size = len;
822
823           if (size == 0)
824             return TARGET_XFER_EOF;
825           if (!bfd_get_section_contents (core_bfd, section, readbuf,
826                                          (file_ptr) offset, size))
827             {
828               warning (_("Couldn't read SPU section in core file."));
829               return TARGET_XFER_E_IO;
830             }
831
832           *xfered_len = (ULONGEST) size;
833           return TARGET_XFER_OK;
834         }
835       else if (readbuf)
836         {
837           /* NULL annex requests list of all present spuids.  */
838           struct spuid_list list;
839
840           list.buf = readbuf;
841           list.offset = offset;
842           list.len = len;
843           list.pos = 0;
844           list.written = 0;
845           bfd_map_over_sections (core_bfd, add_to_spuid_list, &list);
846
847           if (list.written == 0)
848             return TARGET_XFER_EOF;
849           else
850             {
851               *xfered_len = (ULONGEST) list.written;
852               return TARGET_XFER_OK;
853             }
854         }
855       return TARGET_XFER_E_IO;
856
857     case TARGET_OBJECT_SIGNAL_INFO:
858       if (readbuf)
859         {
860           LONGEST l = get_core_siginfo (core_bfd, readbuf, offset, len);
861
862           if (l > 0)
863             {
864               *xfered_len = len;
865               return TARGET_XFER_OK;
866             }
867         }
868       return TARGET_XFER_E_IO;
869
870     default:
871       return ops->beneath->to_xfer_partial (ops->beneath, object,
872                                             annex, readbuf,
873                                             writebuf, offset, len,
874                                             xfered_len);
875     }
876 }
877
878 \f
879 /* If mourn is being called in all the right places, this could be say
880    `gdb internal error' (since generic_mourn calls
881    breakpoint_init_inferior).  */
882
883 static int
884 ignore (struct target_ops *ops, struct gdbarch *gdbarch,
885         struct bp_target_info *bp_tgt)
886 {
887   return 0;
888 }
889
890
891 /* Okay, let's be honest: threads gleaned from a core file aren't
892    exactly lively, are they?  On the other hand, if we don't claim
893    that each & every one is alive, then we don't get any of them
894    to appear in an "info thread" command, which is quite a useful
895    behaviour.
896  */
897 static int
898 core_thread_alive (struct target_ops *ops, ptid_t ptid)
899 {
900   return 1;
901 }
902
903 /* Ask the current architecture what it knows about this core file.
904    That will be used, in turn, to pick a better architecture.  This
905    wrapper could be avoided if targets got a chance to specialize
906    core_ops.  */
907
908 static const struct target_desc *
909 core_read_description (struct target_ops *target)
910 {
911   if (core_gdbarch && gdbarch_core_read_description_p (core_gdbarch))
912     {
913       const struct target_desc *result;
914
915       result = gdbarch_core_read_description (core_gdbarch, 
916                                               target, core_bfd);
917       if (result != NULL)
918         return result;
919     }
920
921   return target->beneath->to_read_description (target->beneath);
922 }
923
924 static char *
925 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
926 {
927   static char buf[64];
928   struct inferior *inf;
929   int pid;
930
931   /* The preferred way is to have a gdbarch/OS specific
932      implementation.  */
933   if (core_gdbarch
934       && gdbarch_core_pid_to_str_p (core_gdbarch))
935     return gdbarch_core_pid_to_str (core_gdbarch, ptid);
936
937   /* Otherwise, if we don't have one, we'll just fallback to
938      "process", with normal_pid_to_str.  */
939
940   /* Try the LWPID field first.  */
941   pid = ptid_get_lwp (ptid);
942   if (pid != 0)
943     return normal_pid_to_str (pid_to_ptid (pid));
944
945   /* Otherwise, this isn't a "threaded" core -- use the PID field, but
946      only if it isn't a fake PID.  */
947   inf = find_inferior_pid (ptid_get_pid (ptid));
948   if (inf != NULL && !inf->fake_pid_p)
949     return normal_pid_to_str (ptid);
950
951   /* No luck.  We simply don't have a valid PID to print.  */
952   xsnprintf (buf, sizeof buf, "<main task>");
953   return buf;
954 }
955
956 static int
957 core_has_memory (struct target_ops *ops)
958 {
959   return (core_bfd != NULL);
960 }
961
962 static int
963 core_has_stack (struct target_ops *ops)
964 {
965   return (core_bfd != NULL);
966 }
967
968 static int
969 core_has_registers (struct target_ops *ops)
970 {
971   return (core_bfd != NULL);
972 }
973
974 /* Implement the to_info_proc method.  */
975
976 static void
977 core_info_proc (struct target_ops *ops, const char *args,
978                 enum info_proc_what request)
979 {
980   struct gdbarch *gdbarch = get_current_arch ();
981
982   /* Since this is the core file target, call the 'core_info_proc'
983      method on gdbarch, not 'info_proc'.  */
984   if (gdbarch_core_info_proc_p (gdbarch))
985     gdbarch_core_info_proc (gdbarch, args, request);
986 }
987
988 /* Fill in core_ops with its defined operations and properties.  */
989
990 static void
991 init_core_ops (void)
992 {
993   core_ops.to_shortname = "core";
994   core_ops.to_longname = "Local core dump file";
995   core_ops.to_doc =
996     "Use a core file as a target.  Specify the filename of the core file.";
997   core_ops.to_open = core_open;
998   core_ops.to_close = core_close;
999   core_ops.to_detach = core_detach;
1000   core_ops.to_fetch_registers = get_core_registers;
1001   core_ops.to_xfer_partial = core_xfer_partial;
1002   core_ops.to_files_info = core_files_info;
1003   core_ops.to_insert_breakpoint = ignore;
1004   core_ops.to_remove_breakpoint = ignore;
1005   core_ops.to_thread_alive = core_thread_alive;
1006   core_ops.to_read_description = core_read_description;
1007   core_ops.to_pid_to_str = core_pid_to_str;
1008   core_ops.to_stratum = process_stratum;
1009   core_ops.to_has_memory = core_has_memory;
1010   core_ops.to_has_stack = core_has_stack;
1011   core_ops.to_has_registers = core_has_registers;
1012   core_ops.to_info_proc = core_info_proc;
1013   core_ops.to_magic = OPS_MAGIC;
1014
1015   if (core_target)
1016     internal_error (__FILE__, __LINE__, 
1017                     _("init_core_ops: core target already exists (\"%s\")."),
1018                     core_target->to_longname);
1019   core_target = &core_ops;
1020 }
1021
1022 void
1023 _initialize_corelow (void)
1024 {
1025   init_core_ops ();
1026
1027   add_target_with_completer (&core_ops, filename_completer);
1028 }