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