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