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