2009-10-19 Pedro Alves <pedro@codesourcery.com>
[platform/upstream/binutils.git] / gdb / corelow.c
1 /* Core dump and executable file functions below target vector, for GDB.
2
3    Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4    1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "gdb_string.h"
25 #include <errno.h>
26 #include <signal.h>
27 #include <fcntl.h>
28 #ifdef HAVE_SYS_FILE_H
29 #include <sys/file.h>           /* needed for F_OK and friends */
30 #endif
31 #include "frame.h"              /* required by inferior.h */
32 #include "inferior.h"
33 #include "symtab.h"
34 #include "command.h"
35 #include "bfd.h"
36 #include "target.h"
37 #include "gdbcore.h"
38 #include "gdbthread.h"
39 #include "regcache.h"
40 #include "regset.h"
41 #include "symfile.h"
42 #include "exec.h"
43 #include "readline/readline.h"
44 #include "gdb_assert.h"
45 #include "exceptions.h"
46 #include "solib.h"
47 #include "filenames.h"
48 #include "progspace.h"
49
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 core
62    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 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 /* True if we needed to fake the pid of the loaded core inferior.  */
80 static int core_has_fake_pid = 0;
81
82 static void core_files_info (struct target_ops *);
83
84 static struct core_fns *sniff_core_bfd (bfd *);
85
86 static int gdb_check_format (bfd *);
87
88 static void core_open (char *, int);
89
90 static void core_detach (struct target_ops *ops, char *, int);
91
92 static void core_close (int);
93
94 static void core_close_cleanup (void *ignore);
95
96 static void add_to_thread_list (bfd *, asection *, void *);
97
98 static void init_core_ops (void);
99
100 void _initialize_corelow (void);
101
102 struct target_ops core_ops;
103
104 /* An arbitrary identifier for the core inferior.  */
105 #define CORELOW_PID 1
106
107 /* Link a new core_fns into the global core_file_fns list.  Called on gdb
108    startup by the _initialize routine in each core file register reader, to
109    register information about each format the the reader is prepared to
110    handle. */
111
112 void
113 deprecated_add_core_fns (struct core_fns *cf)
114 {
115   cf->next = core_file_fns;
116   core_file_fns = cf;
117 }
118
119 /* The default function that core file handlers can use to examine a
120    core file BFD and decide whether or not to accept the job of
121    reading the core file. */
122
123 int
124 default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
125 {
126   int result;
127
128   result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
129   return (result);
130 }
131
132 /* Walk through the list of core functions to find a set that can
133    handle the core file open on ABFD.  Default to the first one in the
134    list if nothing matches.  Returns pointer to set that is
135    selected. */
136
137 static struct core_fns *
138 sniff_core_bfd (bfd *abfd)
139 {
140   struct core_fns *cf;
141   struct core_fns *yummy = NULL;
142   int matches = 0;;
143
144   /* Don't sniff if we have support for register sets in CORE_GDBARCH.  */
145   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
146     return NULL;
147
148   for (cf = core_file_fns; cf != NULL; cf = cf->next)
149     {
150       if (cf->core_sniffer (cf, abfd))
151         {
152           yummy = cf;
153           matches++;
154         }
155     }
156   if (matches > 1)
157     {
158       warning (_("\"%s\": ambiguous core format, %d handlers match"),
159                bfd_get_filename (abfd), matches);
160     }
161   else if (matches == 0)
162     {
163       warning (_("\"%s\": no core file handler recognizes format, using default"),
164                bfd_get_filename (abfd));
165     }
166   if (yummy == NULL)
167     {
168       yummy = core_file_fns;
169     }
170   return (yummy);
171 }
172
173 /* The default is to reject every core file format we see.  Either
174    BFD has to recognize it, or we have to provide a function in the
175    core file handler that recognizes it. */
176
177 int
178 default_check_format (bfd *abfd)
179 {
180   return (0);
181 }
182
183 /* Attempt to recognize core file formats that BFD rejects. */
184
185 static int
186 gdb_check_format (bfd *abfd)
187 {
188   struct core_fns *cf;
189
190   for (cf = core_file_fns; cf != NULL; cf = cf->next)
191     {
192       if (cf->check_format (abfd))
193         {
194           return (1);
195         }
196     }
197   return (0);
198 }
199
200 /* Discard all vestiges of any previous core file and mark data and stack
201    spaces as empty.  */
202
203 static void
204 core_close (int quitting)
205 {
206   char *name;
207
208   if (core_bfd)
209     {
210       int pid = ptid_get_pid (inferior_ptid);
211       inferior_ptid = null_ptid;        /* Avoid confusion from thread stuff */
212       exit_inferior_silent (pid);
213
214       /* Clear out solib state while the bfd is still open. See
215          comments in clear_solib in solib.c. */
216       clear_solib ();
217
218       xfree (core_data->sections);
219       xfree (core_data);
220       core_data = NULL;
221       core_has_fake_pid = 0;
222
223       name = bfd_get_filename (core_bfd);
224       if (!bfd_close (core_bfd))
225         warning (_("cannot close \"%s\": %s"),
226                  name, bfd_errmsg (bfd_get_error ()));
227       xfree (name);
228       core_bfd = NULL;
229     }
230   core_vec = NULL;
231   core_gdbarch = NULL;
232 }
233
234 static void
235 core_close_cleanup (void *ignore)
236 {
237   core_close (0/*ignored*/);
238 }
239
240 /* Look for sections whose names start with `.reg/' so that we can extract the
241    list of threads in a core file.  */
242
243 static void
244 add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
245 {
246   ptid_t ptid;
247   int core_tid;
248   int pid, lwpid;
249   asection *reg_sect = (asection *) reg_sect_arg;
250
251   if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
252     return;
253
254   core_tid = atoi (bfd_section_name (abfd, asect) + 5);
255
256   if (core_gdbarch
257       && gdbarch_core_reg_section_encodes_pid (core_gdbarch))
258     {
259       uint32_t merged_pid = core_tid;
260       pid = merged_pid & 0xffff;
261       lwpid = merged_pid >> 16;
262
263       /* This can happen on solaris core, for example, if we don't
264          find a NT_PSTATUS note in the core, but do find NT_LWPSTATUS
265          notes.  */
266       if (pid == 0)
267         {
268           core_has_fake_pid = 1;
269           pid = CORELOW_PID;
270         }
271     }
272   else
273     {
274       core_has_fake_pid = 1;
275       pid = CORELOW_PID;
276       lwpid = core_tid;
277     }
278
279   if (current_inferior ()->pid == 0)
280     inferior_appeared (current_inferior (), pid);
281
282   ptid = ptid_build (pid, lwpid, 0);
283
284   add_thread (ptid);
285
286 /* Warning, Will Robinson, looking at BFD private data! */
287
288   if (reg_sect != NULL
289       && asect->filepos == reg_sect->filepos)   /* Did we find .reg? */
290     inferior_ptid = ptid;                        /* Yes, make it current */
291 }
292
293 /* This routine opens and sets up the core file bfd.  */
294
295 static void
296 core_open (char *filename, int from_tty)
297 {
298   const char *p;
299   int siggy;
300   struct cleanup *old_chain;
301   char *temp;
302   bfd *temp_bfd;
303   int scratch_chan;
304   int flags;
305   int corelow_pid = CORELOW_PID;
306   struct inferior *inf;
307
308   target_preopen (from_tty);
309   if (!filename)
310     {
311       if (core_bfd)
312         error (_("No core file specified.  (Use `detach' to stop debugging a core file.)"));
313       else
314         error (_("No core file specified."));
315     }
316
317   filename = tilde_expand (filename);
318   if (!IS_ABSOLUTE_PATH(filename))
319     {
320       temp = concat (current_directory, "/", filename, (char *)NULL);
321       xfree (filename);
322       filename = temp;
323     }
324
325   old_chain = make_cleanup (xfree, filename);
326
327   flags = O_BINARY | O_LARGEFILE;
328   if (write_files)
329     flags |= O_RDWR;
330   else
331     flags |= O_RDONLY;
332   scratch_chan = open (filename, flags, 0);
333   if (scratch_chan < 0)
334     perror_with_name (filename);
335
336   temp_bfd = bfd_fopen (filename, gnutarget, 
337                         write_files ? FOPEN_RUB : FOPEN_RB,
338                         scratch_chan);
339   if (temp_bfd == NULL)
340     perror_with_name (filename);
341
342   if (!bfd_check_format (temp_bfd, bfd_core)
343       && !gdb_check_format (temp_bfd))
344     {
345       /* Do it after the err msg */
346       /* FIXME: should be checking for errors from bfd_close (for one thing,
347          on error it does not free all the storage associated with the
348          bfd).  */
349       make_cleanup_bfd_close (temp_bfd);
350       error (_("\"%s\" is not a core dump: %s"),
351              filename, bfd_errmsg (bfd_get_error ()));
352     }
353
354   /* Looks semi-reasonable.  Toss the old core file and work on the new.  */
355
356   discard_cleanups (old_chain); /* Don't free filename any more */
357   unpush_target (&core_ops);
358   core_bfd = temp_bfd;
359   old_chain = make_cleanup (core_close_cleanup, 0 /*ignore*/);
360
361   /* FIXME: kettenis/20031023: This is very dangerous.  The
362      CORE_GDBARCH that results from this call may very well be
363      different from CURRENT_GDBARCH.  However, its methods may only
364      work if it is selected as the current architecture, because they
365      rely on swapped data (see gdbarch.c).  We should get rid of that
366      swapped data.  */
367   core_gdbarch = gdbarch_from_bfd (core_bfd);
368
369   /* Find a suitable core file handler to munch on core_bfd */
370   core_vec = sniff_core_bfd (core_bfd);
371
372   validate_files ();
373
374   core_data = XZALLOC (struct target_section_table);
375
376   /* Find the data section */
377   if (build_section_table (core_bfd,
378                            &core_data->sections, &core_data->sections_end))
379     error (_("\"%s\": Can't find sections: %s"),
380            bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
381
382   /* If we have no exec file, try to set the architecture from the
383      core file.  We don't do this unconditionally since an exec file
384      typically contains more information that helps us determine the
385      architecture than a core file.  */
386   if (!exec_bfd)
387     set_gdbarch_from_file (core_bfd);
388
389   push_target (&core_ops);
390   discard_cleanups (old_chain);
391
392   /* Do this before acknowledging the inferior, so if
393      post_create_inferior throws (can happen easilly if you're loading
394      a core file with the wrong exec), we aren't left with threads
395      from the previous inferior.  */
396   init_thread_list ();
397
398   inferior_ptid = null_ptid;
399   core_has_fake_pid = 0;
400
401   /* Need to flush the register cache (and the frame cache) from a
402      previous debug session.  If inferior_ptid ends up the same as the
403      last debug session --- e.g., b foo; run; gcore core1; step; gcore
404      core2; core core1; core core2 --- then there's potential for
405      get_current_regcache to return the cached regcache of the
406      previous session, and the frame cache being stale.  */
407   registers_changed ();
408
409   /* Build up thread list from BFD sections, and possibly set the
410      current thread to the .reg/NN section matching the .reg
411      section. */
412   bfd_map_over_sections (core_bfd, add_to_thread_list,
413                          bfd_get_section_by_name (core_bfd, ".reg"));
414
415   if (ptid_equal (inferior_ptid, null_ptid))
416     {
417       /* Either we found no .reg/NN section, and hence we have a
418          non-threaded core (single-threaded, from gdb's perspective),
419          or for some reason add_to_thread_list couldn't determine
420          which was the "main" thread.  The latter case shouldn't
421          usually happen, but we're dealing with input here, which can
422          always be broken in different ways.  */
423       struct thread_info *thread = first_thread_of_process (-1);
424       if (thread == NULL)
425         {
426           add_inferior_silent (CORELOW_PID);
427           inferior_ptid = pid_to_ptid (CORELOW_PID);
428           add_thread_silent (inferior_ptid);
429         }
430       else
431         switch_to_thread (thread->ptid);
432     }
433
434   post_create_inferior (&core_ops, from_tty);
435
436   /* Now go through the target stack looking for threads since there
437      may be a thread_stratum target loaded on top of target core by
438      now.  The layer above should claim threads found in the BFD
439      sections.  */
440   target_find_new_threads ();
441
442   p = bfd_core_file_failing_command (core_bfd);
443   if (p)
444     printf_filtered (_("Core was generated by `%s'.\n"), p);
445
446   siggy = bfd_core_file_failing_signal (core_bfd);
447   if (siggy > 0)
448     /* NOTE: target_signal_from_host() converts a target signal value
449        into gdb's internal signal value.  Unfortunately gdb's internal
450        value is called ``target_signal'' and this function got the
451        name ..._from_host(). */
452     printf_filtered (_("Program terminated with signal %d, %s.\n"), siggy,
453                      target_signal_to_string (
454                        (core_gdbarch != NULL) ?
455                         gdbarch_target_signal_from_host (core_gdbarch, siggy)
456                         : siggy));
457
458   /* Fetch all registers from core file.  */
459   target_fetch_registers (get_current_regcache (), -1);
460
461   /* Now, set up the frame cache, and print the top of stack.  */
462   reinit_frame_cache ();
463   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
464 }
465
466 static void
467 core_detach (struct target_ops *ops, char *args, int from_tty)
468 {
469   if (args)
470     error (_("Too many arguments"));
471   unpush_target (ops);
472   reinit_frame_cache ();
473   if (from_tty)
474     printf_filtered (_("No core file now.\n"));
475 }
476
477 #ifdef DEPRECATED_IBM6000_TARGET
478
479 /* Resize the core memory's section table, by NUM_ADDED.  Returns a
480    pointer into the first new slot.  This will not be necessary when
481    the rs6000 target is converted to use the standard solib
482    framework.  */
483
484 struct target_section *
485 deprecated_core_resize_section_table (int num_added)
486 {
487   int old_count;
488
489   old_count = resize_section_table (core_data, num_added);
490   return core_data->sections + old_count;
491 }
492
493 #endif
494
495 /* Try to retrieve registers from a section in core_bfd, and supply
496    them to core_vec->core_read_registers, as the register set numbered
497    WHICH.
498
499    If inferior_ptid's lwp member is zero, do the single-threaded
500    thing: look for a section named NAME.  If inferior_ptid's lwp
501    member is non-zero, do the multi-threaded thing: look for a section
502    named "NAME/LWP", where LWP is the shortest ASCII decimal
503    representation of inferior_ptid's lwp member.
504
505    HUMAN_NAME is a human-readable name for the kind of registers the
506    NAME section contains, for use in error messages.
507
508    If REQUIRED is non-zero, print an error if the core file doesn't
509    have a section by the appropriate name.  Otherwise, just do nothing.  */
510
511 static void
512 get_core_register_section (struct regcache *regcache,
513                            char *name,
514                            int which,
515                            char *human_name,
516                            int required)
517 {
518   static char *section_name = NULL;
519   struct bfd_section *section;
520   bfd_size_type size;
521   char *contents;
522
523   xfree (section_name);
524
525   if (core_gdbarch
526       && gdbarch_core_reg_section_encodes_pid (core_gdbarch))
527     {
528       uint32_t merged_pid;
529       int pid = ptid_get_pid (inferior_ptid);
530
531       if (core_has_fake_pid)
532         pid = 0;
533
534       merged_pid = ptid_get_lwp (inferior_ptid);
535       merged_pid = merged_pid << 16 | pid;
536
537       section_name = xstrprintf ("%s/%s", name, plongest (merged_pid));
538     }
539   else if (ptid_get_lwp (inferior_ptid))
540     section_name = xstrprintf ("%s/%ld", name, ptid_get_lwp (inferior_ptid));
541   else
542     section_name = xstrdup (name);
543
544   section = bfd_get_section_by_name (core_bfd, section_name);
545   if (! section)
546     {
547       if (required)
548         warning (_("Couldn't find %s registers in core file."), human_name);
549       return;
550     }
551
552   size = bfd_section_size (core_bfd, section);
553   contents = alloca (size);
554   if (! bfd_get_section_contents (core_bfd, section, contents,
555                                   (file_ptr) 0, size))
556     {
557       warning (_("Couldn't read %s registers from `%s' section in core file."),
558                human_name, name);
559       return;
560     }
561
562   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
563     {
564       const struct regset *regset;
565
566       regset = gdbarch_regset_from_core_section (core_gdbarch, name, size);
567       if (regset == NULL)
568         {
569           if (required)
570             warning (_("Couldn't recognize %s registers in core file."),
571                      human_name);
572           return;
573         }
574
575       regset->supply_regset (regset, regcache, -1, contents, size);
576       return;
577     }
578
579   gdb_assert (core_vec);
580   core_vec->core_read_registers (regcache, contents, size, which,
581                                  ((CORE_ADDR)
582                                   bfd_section_vma (core_bfd, section)));
583 }
584
585
586 /* Get the registers out of a core file.  This is the machine-
587    independent part.  Fetch_core_registers is the machine-dependent
588    part, typically implemented in the xm-file for each architecture.  */
589
590 /* We just get all the registers, so we don't use regno.  */
591
592 static void
593 get_core_registers (struct target_ops *ops,
594                     struct regcache *regcache, int regno)
595 {
596   int i;
597
598   if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
599       && (core_vec == NULL || core_vec->core_read_registers == NULL))
600     {
601       fprintf_filtered (gdb_stderr,
602                      "Can't fetch registers from this type of core file\n");
603       return;
604     }
605
606   get_core_register_section (regcache,
607                              ".reg", 0, "general-purpose", 1);
608   get_core_register_section (regcache,
609                              ".reg2", 2, "floating-point", 0);
610   get_core_register_section (regcache,
611                              ".reg-xfp", 3, "extended floating-point", 0);
612   get_core_register_section (regcache,
613                              ".reg-ppc-vmx", 3, "ppc Altivec", 0);
614   get_core_register_section (regcache,
615                              ".reg-ppc-vsx", 4, "POWER7 VSX", 0);
616
617   /* Supply dummy value for all registers not found in the core.  */
618   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
619     if (!regcache_valid_p (regcache, i))
620       regcache_raw_supply (regcache, i, NULL);
621 }
622
623 static void
624 core_files_info (struct target_ops *t)
625 {
626   print_section_info (core_data, core_bfd);
627 }
628 \f
629 struct spuid_list
630 {
631   gdb_byte *buf;
632   ULONGEST offset;
633   LONGEST len;
634   ULONGEST pos;
635   ULONGEST written;
636 };
637
638 static void
639 add_to_spuid_list (bfd *abfd, asection *asect, void *list_p)
640 {
641   struct spuid_list *list = list_p;
642   enum bfd_endian byte_order
643     = bfd_big_endian (abfd)? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
644   int fd, pos = 0;
645
646   sscanf (bfd_section_name (abfd, asect), "SPU/%d/regs%n", &fd, &pos);
647   if (pos == 0)
648     return;
649
650   if (list->pos >= list->offset && list->pos + 4 <= list->offset + list->len)
651     {
652       store_unsigned_integer (list->buf + list->pos - list->offset,
653                               4, byte_order, fd);
654       list->written += 4;
655     }
656   list->pos += 4;
657 }
658
659 static LONGEST
660 core_xfer_partial (struct target_ops *ops, enum target_object object,
661                    const char *annex, gdb_byte *readbuf,
662                    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
663 {
664   switch (object)
665     {
666     case TARGET_OBJECT_MEMORY:
667       return section_table_xfer_memory_partial (readbuf, writebuf,
668                                                 offset, len,
669                                                 core_data->sections,
670                                                 core_data->sections_end,
671                                                 NULL);
672
673     case TARGET_OBJECT_AUXV:
674       if (readbuf)
675         {
676           /* When the aux vector is stored in core file, BFD
677              represents this with a fake section called ".auxv".  */
678
679           struct bfd_section *section;
680           bfd_size_type size;
681           char *contents;
682
683           section = bfd_get_section_by_name (core_bfd, ".auxv");
684           if (section == NULL)
685             return -1;
686
687           size = bfd_section_size (core_bfd, section);
688           if (offset >= size)
689             return 0;
690           size -= offset;
691           if (size > len)
692             size = len;
693           if (size > 0
694               && !bfd_get_section_contents (core_bfd, section, readbuf,
695                                             (file_ptr) offset, size))
696             {
697               warning (_("Couldn't read NT_AUXV note in core file."));
698               return -1;
699             }
700
701           return size;
702         }
703       return -1;
704
705     case TARGET_OBJECT_WCOOKIE:
706       if (readbuf)
707         {
708           /* When the StackGhost cookie is stored in core file, BFD
709              represents this with a fake section called ".wcookie".  */
710
711           struct bfd_section *section;
712           bfd_size_type size;
713           char *contents;
714
715           section = bfd_get_section_by_name (core_bfd, ".wcookie");
716           if (section == NULL)
717             return -1;
718
719           size = bfd_section_size (core_bfd, section);
720           if (offset >= size)
721             return 0;
722           size -= offset;
723           if (size > len)
724             size = len;
725           if (size > 0
726               && !bfd_get_section_contents (core_bfd, section, readbuf,
727                                             (file_ptr) offset, size))
728             {
729               warning (_("Couldn't read StackGhost cookie in core file."));
730               return -1;
731             }
732
733           return size;
734         }
735       return -1;
736
737     case TARGET_OBJECT_LIBRARIES:
738       if (core_gdbarch
739           && gdbarch_core_xfer_shared_libraries_p (core_gdbarch))
740         {
741           if (writebuf)
742             return -1;
743           return
744             gdbarch_core_xfer_shared_libraries (core_gdbarch,
745                                                 readbuf, offset, len);
746         }
747       /* FALL THROUGH */
748
749     case TARGET_OBJECT_SPU:
750       if (readbuf && annex)
751         {
752           /* When the SPU contexts are stored in a core file, BFD
753              represents this with a fake section called "SPU/<annex>".  */
754
755           struct bfd_section *section;
756           bfd_size_type size;
757           char *contents;
758
759           char sectionstr[100];
760           xsnprintf (sectionstr, sizeof sectionstr, "SPU/%s", annex);
761
762           section = bfd_get_section_by_name (core_bfd, sectionstr);
763           if (section == NULL)
764             return -1;
765
766           size = bfd_section_size (core_bfd, section);
767           if (offset >= size)
768             return 0;
769           size -= offset;
770           if (size > len)
771             size = len;
772           if (size > 0
773               && !bfd_get_section_contents (core_bfd, section, readbuf,
774                                             (file_ptr) offset, size))
775             {
776               warning (_("Couldn't read SPU section in core file."));
777               return -1;
778             }
779
780           return size;
781         }
782       else if (readbuf)
783         {
784           /* NULL annex requests list of all present spuids.  */
785           struct spuid_list list;
786           list.buf = readbuf;
787           list.offset = offset;
788           list.len = len;
789           list.pos = 0;
790           list.written = 0;
791           bfd_map_over_sections (core_bfd, add_to_spuid_list, &list);
792           return list.written;
793         }
794       return -1;
795
796     default:
797       if (ops->beneath != NULL)
798         return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
799                                               readbuf, writebuf, offset, len);
800       return -1;
801     }
802 }
803
804 \f
805 /* If mourn is being called in all the right places, this could be say
806    `gdb internal error' (since generic_mourn calls breakpoint_init_inferior).  */
807
808 static int
809 ignore (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
810 {
811   return 0;
812 }
813
814
815 /* Okay, let's be honest: threads gleaned from a core file aren't
816    exactly lively, are they?  On the other hand, if we don't claim
817    that each & every one is alive, then we don't get any of them
818    to appear in an "info thread" command, which is quite a useful
819    behaviour.
820  */
821 static int
822 core_thread_alive (struct target_ops *ops, ptid_t ptid)
823 {
824   return 1;
825 }
826
827 /* Ask the current architecture what it knows about this core file.
828    That will be used, in turn, to pick a better architecture.  This
829    wrapper could be avoided if targets got a chance to specialize
830    core_ops.  */
831
832 static const struct target_desc *
833 core_read_description (struct target_ops *target)
834 {
835   if (core_gdbarch && gdbarch_core_read_description_p (core_gdbarch))
836     return gdbarch_core_read_description (core_gdbarch, target, core_bfd);
837
838   return NULL;
839 }
840
841 static char *
842 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
843 {
844   static char buf[64];
845
846   if (core_gdbarch
847       && gdbarch_core_pid_to_str_p (core_gdbarch))
848     {
849       char *ret = gdbarch_core_pid_to_str (core_gdbarch, ptid);
850       if (ret != NULL)
851         return ret;
852     }
853
854   if (ptid_get_lwp (ptid) == 0)
855     xsnprintf (buf, sizeof buf, "<main task>");
856   else
857     xsnprintf (buf, sizeof buf, "Thread %ld", ptid_get_lwp (ptid));
858
859   return buf;
860 }
861
862 static int
863 core_has_memory (struct target_ops *ops)
864 {
865   return (core_bfd != NULL);
866 }
867
868 static int
869 core_has_stack (struct target_ops *ops)
870 {
871   return (core_bfd != NULL);
872 }
873
874 static int
875 core_has_registers (struct target_ops *ops)
876 {
877   return (core_bfd != NULL);
878 }
879
880 /* Fill in core_ops with its defined operations and properties.  */
881
882 static void
883 init_core_ops (void)
884 {
885   core_ops.to_shortname = "core";
886   core_ops.to_longname = "Local core dump file";
887   core_ops.to_doc =
888     "Use a core file as a target.  Specify the filename of the core file.";
889   core_ops.to_open = core_open;
890   core_ops.to_close = core_close;
891   core_ops.to_attach = find_default_attach;
892   core_ops.to_detach = core_detach;
893   core_ops.to_fetch_registers = get_core_registers;
894   core_ops.to_xfer_partial = core_xfer_partial;
895   core_ops.to_files_info = core_files_info;
896   core_ops.to_insert_breakpoint = ignore;
897   core_ops.to_remove_breakpoint = ignore;
898   core_ops.to_create_inferior = find_default_create_inferior;
899   core_ops.to_thread_alive = core_thread_alive;
900   core_ops.to_read_description = core_read_description;
901   core_ops.to_pid_to_str = core_pid_to_str;
902   core_ops.to_stratum = core_stratum;
903   core_ops.to_has_memory = core_has_memory;
904   core_ops.to_has_stack = core_has_stack;
905   core_ops.to_has_registers = core_has_registers;
906   core_ops.to_magic = OPS_MAGIC;
907 }
908
909 void
910 _initialize_corelow (void)
911 {
912   init_core_ops ();
913
914   add_target (&core_ops);
915 }