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