* corelow.c (get_core_registers): Adjust.
[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
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "gdb_string.h"
25 #include <errno.h>
26 #include <signal.h>
27 #include <fcntl.h>
28 #ifdef HAVE_SYS_FILE_H
29 #include <sys/file.h>           /* needed for F_OK and friends */
30 #endif
31 #include "frame.h"              /* required by inferior.h */
32 #include "inferior.h"
33 #include "symtab.h"
34 #include "command.h"
35 #include "bfd.h"
36 #include "target.h"
37 #include "gdbcore.h"
38 #include "gdbthread.h"
39 #include "regcache.h"
40 #include "regset.h"
41 #include "symfile.h"
42 #include "exec.h"
43 #include "readline/readline.h"
44 #include "gdb_assert.h"
45 #include "exceptions.h"
46 #include "solib.h"
47 #include "filenames.h"
48
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 core
61    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 static void core_files_info (struct target_ops *);
71
72 static struct core_fns *sniff_core_bfd (bfd *);
73
74 static int gdb_check_format (bfd *);
75
76 static void core_open (char *, int);
77
78 static void core_detach (struct target_ops *ops, char *, int);
79
80 static void core_close (int);
81
82 static void core_close_cleanup (void *ignore);
83
84 static void add_to_thread_list (bfd *, asection *, void *);
85
86 static void init_core_ops (void);
87
88 void _initialize_corelow (void);
89
90 struct target_ops core_ops;
91
92 /* An arbitrary identifier for the core inferior.  */
93 #define CORELOW_PID 1
94
95 /* Link a new core_fns into the global core_file_fns list.  Called on gdb
96    startup by the _initialize routine in each core file register reader, to
97    register information about each format the the reader is prepared to
98    handle. */
99
100 void
101 deprecated_add_core_fns (struct core_fns *cf)
102 {
103   cf->next = core_file_fns;
104   core_file_fns = cf;
105 }
106
107 /* The default function that core file handlers can use to examine a
108    core file BFD and decide whether or not to accept the job of
109    reading the core file. */
110
111 int
112 default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
113 {
114   int result;
115
116   result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
117   return (result);
118 }
119
120 /* Walk through the list of core functions to find a set that can
121    handle the core file open on ABFD.  Default to the first one in the
122    list if nothing matches.  Returns pointer to set that is
123    selected. */
124
125 static struct core_fns *
126 sniff_core_bfd (bfd *abfd)
127 {
128   struct core_fns *cf;
129   struct core_fns *yummy = NULL;
130   int matches = 0;;
131
132   /* Don't sniff if we have support for register sets in CORE_GDBARCH.  */
133   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
134     return NULL;
135
136   for (cf = core_file_fns; cf != NULL; cf = cf->next)
137     {
138       if (cf->core_sniffer (cf, abfd))
139         {
140           yummy = cf;
141           matches++;
142         }
143     }
144   if (matches > 1)
145     {
146       warning (_("\"%s\": ambiguous core format, %d handlers match"),
147                bfd_get_filename (abfd), matches);
148     }
149   else if (matches == 0)
150     {
151       warning (_("\"%s\": no core file handler recognizes format, using default"),
152                bfd_get_filename (abfd));
153     }
154   if (yummy == NULL)
155     {
156       yummy = core_file_fns;
157     }
158   return (yummy);
159 }
160
161 /* The default is to reject every core file format we see.  Either
162    BFD has to recognize it, or we have to provide a function in the
163    core file handler that recognizes it. */
164
165 int
166 default_check_format (bfd *abfd)
167 {
168   return (0);
169 }
170
171 /* Attempt to recognize core file formats that BFD rejects. */
172
173 static int
174 gdb_check_format (bfd *abfd)
175 {
176   struct core_fns *cf;
177
178   for (cf = core_file_fns; cf != NULL; cf = cf->next)
179     {
180       if (cf->check_format (abfd))
181         {
182           return (1);
183         }
184     }
185   return (0);
186 }
187
188 /* Discard all vestiges of any previous core file and mark data and stack
189    spaces as empty.  */
190
191 static void
192 core_close (int quitting)
193 {
194   char *name;
195
196   if (core_bfd)
197     {
198       int pid = ptid_get_pid (inferior_ptid);
199       inferior_ptid = null_ptid;        /* Avoid confusion from thread stuff */
200       delete_inferior_silent (pid);
201
202       /* Clear out solib state while the bfd is still open. See
203          comments in clear_solib in solib.c. */
204       clear_solib ();
205
206       name = bfd_get_filename (core_bfd);
207       if (!bfd_close (core_bfd))
208         warning (_("cannot close \"%s\": %s"),
209                  name, bfd_errmsg (bfd_get_error ()));
210       xfree (name);
211       core_bfd = NULL;
212       if (core_ops.to_sections)
213         {
214           xfree (core_ops.to_sections);
215           core_ops.to_sections = NULL;
216           core_ops.to_sections_end = NULL;
217         }
218     }
219   core_vec = NULL;
220   core_gdbarch = NULL;
221 }
222
223 static void
224 core_close_cleanup (void *ignore)
225 {
226   core_close (0/*ignored*/);
227 }
228
229 /* Look for sections whose names start with `.reg/' so that we can extract the
230    list of threads in a core file.  */
231
232 static void
233 add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
234 {
235   ptid_t ptid;
236   int thread_id;
237   asection *reg_sect = (asection *) reg_sect_arg;
238
239   if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
240     return;
241
242   thread_id = atoi (bfd_section_name (abfd, asect) + 5);
243
244   if (core_gdbarch
245       && gdbarch_core_reg_section_encodes_pid (core_gdbarch))
246     {
247       uint32_t merged_pid = thread_id;
248       ptid = ptid_build (merged_pid & 0xffff,
249                          merged_pid >> 16, 0);
250     }
251   else
252     ptid = ptid_build (ptid_get_pid (inferior_ptid), thread_id, 0);
253
254   if (ptid_get_lwp (inferior_ptid) == 0)
255     /* The main thread has already been added before getting here, and
256        this is the first time we hear about a thread id.  Assume this
257        is the main thread.  */
258     thread_change_ptid (inferior_ptid, ptid);
259   else
260     /* Nope, really a new thread.  */
261     add_thread (ptid);
262
263 /* Warning, Will Robinson, looking at BFD private data! */
264
265   if (reg_sect != NULL
266       && asect->filepos == reg_sect->filepos)   /* Did we find .reg? */
267     inferior_ptid = ptid;                        /* Yes, make it current */
268 }
269
270 /* This routine opens and sets up the core file bfd.  */
271
272 static void
273 core_open (char *filename, int from_tty)
274 {
275   const char *p;
276   int siggy;
277   struct cleanup *old_chain;
278   char *temp;
279   bfd *temp_bfd;
280   int scratch_chan;
281   int flags;
282   int corelow_pid = CORELOW_PID;
283
284   target_preopen (from_tty);
285   if (!filename)
286     {
287       if (core_bfd)
288         error (_("No core file specified.  (Use `detach' to stop debugging a core file.)"));
289       else
290         error (_("No core file specified."));
291     }
292
293   filename = tilde_expand (filename);
294   if (!IS_ABSOLUTE_PATH(filename))
295     {
296       temp = concat (current_directory, "/", filename, (char *)NULL);
297       xfree (filename);
298       filename = temp;
299     }
300
301   old_chain = make_cleanup (xfree, filename);
302
303   flags = O_BINARY | O_LARGEFILE;
304   if (write_files)
305     flags |= O_RDWR;
306   else
307     flags |= O_RDONLY;
308   scratch_chan = open (filename, flags, 0);
309   if (scratch_chan < 0)
310     perror_with_name (filename);
311
312   temp_bfd = bfd_fopen (filename, gnutarget, 
313                         write_files ? FOPEN_RUB : FOPEN_RB,
314                         scratch_chan);
315   if (temp_bfd == NULL)
316     perror_with_name (filename);
317
318   if (!bfd_check_format (temp_bfd, bfd_core) &&
319       !gdb_check_format (temp_bfd))
320     {
321       /* Do it after the err msg */
322       /* FIXME: should be checking for errors from bfd_close (for one thing,
323          on error it does not free all the storage associated with the
324          bfd).  */
325       make_cleanup_bfd_close (temp_bfd);
326       error (_("\"%s\" is not a core dump: %s"),
327              filename, bfd_errmsg (bfd_get_error ()));
328     }
329
330   /* Looks semi-reasonable.  Toss the old core file and work on the new.  */
331
332   discard_cleanups (old_chain); /* Don't free filename any more */
333   unpush_target (&core_ops);
334   core_bfd = temp_bfd;
335   old_chain = make_cleanup (core_close_cleanup, 0 /*ignore*/);
336
337   /* FIXME: kettenis/20031023: This is very dangerous.  The
338      CORE_GDBARCH that results from this call may very well be
339      different from CURRENT_GDBARCH.  However, its methods may only
340      work if it is selected as the current architecture, because they
341      rely on swapped data (see gdbarch.c).  We should get rid of that
342      swapped data.  */
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   /* Find the data section */
351   if (build_section_table (core_bfd, &core_ops.to_sections,
352                            &core_ops.to_sections_end))
353     error (_("\"%s\": Can't find sections: %s"),
354            bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
355
356   /* If we have no exec file, try to set the architecture from the
357      core file.  We don't do this unconditionally since an exec file
358      typically contains more information that helps us determine the
359      architecture than a core file.  */
360   if (!exec_bfd)
361     set_gdbarch_from_file (core_bfd);
362
363   push_target (&core_ops);
364   discard_cleanups (old_chain);
365
366   add_inferior_silent (corelow_pid);
367
368   /* Do this before acknowledging the inferior, so if
369      post_create_inferior throws (can happen easilly if you're loading
370      a core file with the wrong exec), we aren't left with threads
371      from the previous inferior.  */
372   init_thread_list ();
373
374   /* Set INFERIOR_PTID early, so an upper layer can rely on it being
375      set while in the target_find_new_threads call below.  */
376   inferior_ptid = pid_to_ptid (corelow_pid);
377
378   /* Assume ST --- Add a main task.  We'll later detect when we go
379      from ST to MT.  */
380   add_thread_silent (inferior_ptid);
381
382   /* Build up thread list from BFD sections, and possibly set the
383      current thread to the .reg/NN section matching the .reg
384      section. */
385   bfd_map_over_sections (core_bfd, add_to_thread_list,
386                          bfd_get_section_by_name (core_bfd, ".reg"));
387
388   post_create_inferior (&core_ops, from_tty);
389
390   /* Now go through the target stack looking for threads since there
391      may be a thread_stratum target loaded on top of target core by
392      now.  The layer above should claim threads found in the BFD
393      sections.  */
394   target_find_new_threads ();
395
396   p = bfd_core_file_failing_command (core_bfd);
397   if (p)
398     printf_filtered (_("Core was generated by `%s'.\n"), p);
399
400   siggy = bfd_core_file_failing_signal (core_bfd);
401   if (siggy > 0)
402     /* NOTE: target_signal_from_host() converts a target signal value
403        into gdb's internal signal value.  Unfortunately gdb's internal
404        value is called ``target_signal'' and this function got the
405        name ..._from_host(). */
406     printf_filtered (_("Program terminated with signal %d, %s.\n"), siggy,
407                      target_signal_to_string (
408                        gdbarch_target_signal_from_host (core_gdbarch, siggy)));
409
410   /* Fetch all registers from core file.  */
411   target_fetch_registers (get_current_regcache (), -1);
412
413   /* Now, set up the frame cache, and print the top of stack.  */
414   reinit_frame_cache ();
415   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
416 }
417
418 static void
419 core_detach (struct target_ops *ops, char *args, int from_tty)
420 {
421   if (args)
422     error (_("Too many arguments"));
423   unpush_target (ops);
424   reinit_frame_cache ();
425   if (from_tty)
426     printf_filtered (_("No core file now.\n"));
427 }
428
429
430 /* Try to retrieve registers from a section in core_bfd, and supply
431    them to core_vec->core_read_registers, as the register set numbered
432    WHICH.
433
434    If inferior_ptid's lwp member is zero, do the single-threaded
435    thing: look for a section named NAME.  If inferior_ptid's lwp
436    member is non-zero, do the multi-threaded thing: look for a section
437    named "NAME/LWP", where LWP is the shortest ASCII decimal
438    representation of inferior_ptid's lwp member.
439
440    HUMAN_NAME is a human-readable name for the kind of registers the
441    NAME section contains, for use in error messages.
442
443    If REQUIRED is non-zero, print an error if the core file doesn't
444    have a section by the appropriate name.  Otherwise, just do nothing.  */
445
446 static void
447 get_core_register_section (struct regcache *regcache,
448                            char *name,
449                            int which,
450                            char *human_name,
451                            int required)
452 {
453   static char *section_name = NULL;
454   struct bfd_section *section;
455   bfd_size_type size;
456   char *contents;
457
458   xfree (section_name);
459
460   if (core_gdbarch
461       && gdbarch_core_reg_section_encodes_pid (core_gdbarch))
462     {
463       uint32_t merged_pid;
464
465       merged_pid = ptid_get_lwp (inferior_ptid);
466       merged_pid = merged_pid << 16 | ptid_get_pid (inferior_ptid);
467
468       section_name = xstrprintf ("%s/%s", name, plongest (merged_pid));
469     }
470   else if (ptid_get_lwp (inferior_ptid))
471     section_name = xstrprintf ("%s/%ld", name, ptid_get_lwp (inferior_ptid));
472   else
473     section_name = xstrdup (name);
474
475   section = bfd_get_section_by_name (core_bfd, section_name);
476   if (! section)
477     {
478       if (required)
479         warning (_("Couldn't find %s registers in core file."), human_name);
480       return;
481     }
482
483   size = bfd_section_size (core_bfd, section);
484   contents = alloca (size);
485   if (! bfd_get_section_contents (core_bfd, section, contents,
486                                   (file_ptr) 0, size))
487     {
488       warning (_("Couldn't read %s registers from `%s' section in core file."),
489                human_name, name);
490       return;
491     }
492
493   if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
494     {
495       const struct regset *regset;
496
497       regset = gdbarch_regset_from_core_section (core_gdbarch, name, size);
498       if (regset == NULL)
499         {
500           if (required)
501             warning (_("Couldn't recognize %s registers in core file."),
502                      human_name);
503           return;
504         }
505
506       regset->supply_regset (regset, regcache, -1, contents, size);
507       return;
508     }
509
510   gdb_assert (core_vec);
511   core_vec->core_read_registers (regcache, contents, size, which,
512                                  ((CORE_ADDR)
513                                   bfd_section_vma (core_bfd, section)));
514 }
515
516
517 /* Get the registers out of a core file.  This is the machine-
518    independent part.  Fetch_core_registers is the machine-dependent
519    part, typically implemented in the xm-file for each architecture.  */
520
521 /* We just get all the registers, so we don't use regno.  */
522
523 static void
524 get_core_registers (struct target_ops *ops,
525                     struct regcache *regcache, int regno)
526 {
527   int i;
528
529   if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
530       && (core_vec == NULL || core_vec->core_read_registers == NULL))
531     {
532       fprintf_filtered (gdb_stderr,
533                      "Can't fetch registers from this type of core file\n");
534       return;
535     }
536
537   get_core_register_section (regcache,
538                              ".reg", 0, "general-purpose", 1);
539   get_core_register_section (regcache,
540                              ".reg2", 2, "floating-point", 0);
541   get_core_register_section (regcache,
542                              ".reg-xfp", 3, "extended floating-point", 0);
543   get_core_register_section (regcache,
544                              ".reg-ppc-vmx", 3, "ppc Altivec", 0);
545   get_core_register_section (regcache,
546                              ".reg-ppc-vsx", 4, "POWER7 VSX", 0);
547
548   /* Supply dummy value for all registers not found in the core.  */
549   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
550     if (!regcache_valid_p (regcache, i))
551       regcache_raw_supply (regcache, i, NULL);
552 }
553
554 static void
555 core_files_info (struct target_ops *t)
556 {
557   print_section_info (t, core_bfd);
558 }
559 \f
560 static LONGEST
561 core_xfer_partial (struct target_ops *ops, enum target_object object,
562                    const char *annex, gdb_byte *readbuf,
563                    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
564 {
565   switch (object)
566     {
567     case TARGET_OBJECT_MEMORY:
568       if (readbuf)
569         return (*ops->deprecated_xfer_memory) (offset, readbuf,
570                                                len, 0/*read*/, NULL, ops);
571       if (writebuf)
572         return (*ops->deprecated_xfer_memory) (offset, (gdb_byte *) writebuf,
573                                                len, 1/*write*/, NULL, ops);
574       return -1;
575
576     case TARGET_OBJECT_AUXV:
577       if (readbuf)
578         {
579           /* When the aux vector is stored in core file, BFD
580              represents this with a fake section called ".auxv".  */
581
582           struct bfd_section *section;
583           bfd_size_type size;
584           char *contents;
585
586           section = bfd_get_section_by_name (core_bfd, ".auxv");
587           if (section == NULL)
588             return -1;
589
590           size = bfd_section_size (core_bfd, section);
591           if (offset >= size)
592             return 0;
593           size -= offset;
594           if (size > len)
595             size = len;
596           if (size > 0
597               && !bfd_get_section_contents (core_bfd, section, readbuf,
598                                             (file_ptr) offset, size))
599             {
600               warning (_("Couldn't read NT_AUXV note in core file."));
601               return -1;
602             }
603
604           return size;
605         }
606       return -1;
607
608     case TARGET_OBJECT_WCOOKIE:
609       if (readbuf)
610         {
611           /* When the StackGhost cookie is stored in core file, BFD
612              represents this with a fake section called ".wcookie".  */
613
614           struct bfd_section *section;
615           bfd_size_type size;
616           char *contents;
617
618           section = bfd_get_section_by_name (core_bfd, ".wcookie");
619           if (section == NULL)
620             return -1;
621
622           size = bfd_section_size (core_bfd, section);
623           if (offset >= size)
624             return 0;
625           size -= offset;
626           if (size > len)
627             size = len;
628           if (size > 0
629               && !bfd_get_section_contents (core_bfd, section, readbuf,
630                                             (file_ptr) offset, size))
631             {
632               warning (_("Couldn't read StackGhost cookie in core file."));
633               return -1;
634             }
635
636           return size;
637         }
638       return -1;
639
640     case TARGET_OBJECT_LIBRARIES:
641       if (core_gdbarch
642           && gdbarch_core_xfer_shared_libraries_p (core_gdbarch))
643         {
644           if (writebuf)
645             return -1;
646           return
647             gdbarch_core_xfer_shared_libraries (core_gdbarch,
648                                                 readbuf, offset, len);
649         }
650       /* FALL THROUGH */
651
652     default:
653       if (ops->beneath != NULL)
654         return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
655                                               readbuf, writebuf, offset, len);
656       return -1;
657     }
658 }
659
660 \f
661 /* If mourn is being called in all the right places, this could be say
662    `gdb internal error' (since generic_mourn calls breakpoint_init_inferior).  */
663
664 static int
665 ignore (struct bp_target_info *bp_tgt)
666 {
667   return 0;
668 }
669
670
671 /* Okay, let's be honest: threads gleaned from a core file aren't
672    exactly lively, are they?  On the other hand, if we don't claim
673    that each & every one is alive, then we don't get any of them
674    to appear in an "info thread" command, which is quite a useful
675    behaviour.
676  */
677 static int
678 core_thread_alive (struct target_ops *ops, ptid_t ptid)
679 {
680   return 1;
681 }
682
683 /* Ask the current architecture what it knows about this core file.
684    That will be used, in turn, to pick a better architecture.  This
685    wrapper could be avoided if targets got a chance to specialize
686    core_ops.  */
687
688 static const struct target_desc *
689 core_read_description (struct target_ops *target)
690 {
691   if (gdbarch_core_read_description_p (current_gdbarch))
692     return gdbarch_core_read_description (current_gdbarch, target, core_bfd);
693
694   return NULL;
695 }
696
697 static char *
698 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
699 {
700   static char buf[64];
701
702   if (core_gdbarch
703       && gdbarch_core_pid_to_str_p (core_gdbarch))
704     {
705       char *ret = gdbarch_core_pid_to_str (core_gdbarch, ptid);
706       if (ret != NULL)
707         return ret;
708     }
709
710   if (ptid_get_lwp (ptid) == 0)
711     xsnprintf (buf, sizeof buf, "<main task>");
712   else
713     xsnprintf (buf, sizeof buf, "Thread %ld", ptid_get_lwp (ptid));
714
715   return buf;
716 }
717
718 /* Fill in core_ops with its defined operations and properties.  */
719
720 static void
721 init_core_ops (void)
722 {
723   core_ops.to_shortname = "core";
724   core_ops.to_longname = "Local core dump file";
725   core_ops.to_doc =
726     "Use a core file as a target.  Specify the filename of the core file.";
727   core_ops.to_open = core_open;
728   core_ops.to_close = core_close;
729   core_ops.to_attach = find_default_attach;
730   core_ops.to_detach = core_detach;
731   core_ops.to_fetch_registers = get_core_registers;
732   core_ops.to_xfer_partial = core_xfer_partial;
733   core_ops.deprecated_xfer_memory = xfer_memory;
734   core_ops.to_files_info = core_files_info;
735   core_ops.to_insert_breakpoint = ignore;
736   core_ops.to_remove_breakpoint = ignore;
737   core_ops.to_create_inferior = find_default_create_inferior;
738   core_ops.to_thread_alive = core_thread_alive;
739   core_ops.to_read_description = core_read_description;
740   core_ops.to_pid_to_str = core_pid_to_str;
741   core_ops.to_stratum = core_stratum;
742   core_ops.to_has_memory = 1;
743   core_ops.to_has_stack = 1;
744   core_ops.to_has_registers = 1;
745   core_ops.to_magic = OPS_MAGIC;
746 }
747
748 void
749 _initialize_corelow (void)
750 {
751   init_core_ops ();
752
753   add_target (&core_ops);
754 }