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