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