1 /* Core dump and executable file functions below target vector, for GDB.
3 Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
4 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
5 Free Software Foundation, Inc.
7 This file is part of GDB.
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 2 of the License, or
12 (at your option) any later version.
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.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. */
25 #include "arch-utils.h"
26 #include "gdb_string.h"
30 #ifdef HAVE_SYS_FILE_H
31 #include <sys/file.h> /* needed for F_OK and friends */
33 #include "frame.h" /* required by inferior.h */
40 #include "gdbthread.h"
45 #include "readline/readline.h"
46 #include "gdb_assert.h"
47 #include "exceptions.h"
55 /* List of all available core_fns. On gdb startup, each core file
56 register reader calls deprecated_add_core_fns() to register
57 information on each core format it is prepared to read. */
59 static struct core_fns *core_file_fns = NULL;
61 /* The core_fns for a core file handler that is prepared to read the core
62 file currently open on core_bfd. */
64 static struct core_fns *core_vec = NULL;
66 /* FIXME: kettenis/20031023: Eventually this variable should
69 struct gdbarch *core_gdbarch = NULL;
71 static void core_files_info (struct target_ops *);
73 static struct core_fns *sniff_core_bfd (bfd *);
75 static int gdb_check_format (bfd *);
77 static void core_open (char *, int);
79 static void core_detach (char *, int);
81 static void core_close (int);
83 static void core_close_cleanup (void *ignore);
85 static void get_core_registers (int);
87 static void add_to_thread_list (bfd *, asection *, void *);
89 static int ignore (CORE_ADDR, bfd_byte *);
91 static int core_file_thread_alive (ptid_t tid);
93 static void init_core_ops (void);
95 void _initialize_corelow (void);
97 struct target_ops core_ops;
99 /* Link a new core_fns into the global core_file_fns list. Called on gdb
100 startup by the _initialize routine in each core file register reader, to
101 register information about each format the the reader is prepared to
105 deprecated_add_core_fns (struct core_fns *cf)
107 cf->next = core_file_fns;
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. */
116 default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
120 result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
124 /* Walk through the list of core functions to find a set that can
125 handle the core file open on ABFD. Default to the first one in the
126 list if nothing matches. Returns pointer to set that is
129 static struct core_fns *
130 sniff_core_bfd (bfd *abfd)
133 struct core_fns *yummy = NULL;
136 /* Don't sniff if we have support for register sets in CORE_GDBARCH. */
137 if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
140 for (cf = core_file_fns; cf != NULL; cf = cf->next)
142 if (cf->core_sniffer (cf, abfd))
150 warning (_("\"%s\": ambiguous core format, %d handlers match"),
151 bfd_get_filename (abfd), matches);
153 else if (matches == 0)
155 warning (_("\"%s\": no core file handler recognizes format, using default"),
156 bfd_get_filename (abfd));
160 yummy = core_file_fns;
165 /* The default is to reject every core file format we see. Either
166 BFD has to recognize it, or we have to provide a function in the
167 core file handler that recognizes it. */
170 default_check_format (bfd *abfd)
175 /* Attempt to recognize core file formats that BFD rejects. */
178 gdb_check_format (bfd *abfd)
182 for (cf = core_file_fns; cf != NULL; cf = cf->next)
184 if (cf->check_format (abfd))
192 /* Discard all vestiges of any previous core file and mark data and stack
196 core_close (int quitting)
202 inferior_ptid = null_ptid; /* Avoid confusion from thread stuff */
204 /* Clear out solib state while the bfd is still open. See
205 comments in clear_solib in solib.c. */
212 name = bfd_get_filename (core_bfd);
213 if (!bfd_close (core_bfd))
214 warning (_("cannot close \"%s\": %s"),
215 name, bfd_errmsg (bfd_get_error ()));
218 if (core_ops.to_sections)
220 xfree (core_ops.to_sections);
221 core_ops.to_sections = NULL;
222 core_ops.to_sections_end = NULL;
230 core_close_cleanup (void *ignore)
232 core_close (0/*ignored*/);
235 /* Look for sections whose names start with `.reg/' so that we can extract the
236 list of threads in a core file. */
239 add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
242 asection *reg_sect = (asection *) reg_sect_arg;
244 if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
247 thread_id = atoi (bfd_section_name (abfd, asect) + 5);
249 add_thread (pid_to_ptid (thread_id));
251 /* Warning, Will Robinson, looking at BFD private data! */
254 && asect->filepos == reg_sect->filepos) /* Did we find .reg? */
255 inferior_ptid = pid_to_ptid (thread_id); /* Yes, make it current */
258 /* This routine opens and sets up the core file bfd. */
261 core_open (char *filename, int from_tty)
265 struct cleanup *old_chain;
272 target_preopen (from_tty);
276 error (_("No core file specified. (Use `detach' to stop debugging a core file.)"));
278 error (_("No core file specified."));
281 filename = tilde_expand (filename);
282 if (filename[0] != '/')
284 temp = concat (current_directory, "/", filename, (char *)NULL);
289 old_chain = make_cleanup (xfree, filename);
291 flags = O_BINARY | O_LARGEFILE;
296 scratch_chan = open (filename, flags, 0);
297 if (scratch_chan < 0)
298 perror_with_name (filename);
300 temp_bfd = bfd_fopen (filename, gnutarget,
301 write_files ? FOPEN_RUB : FOPEN_RB,
303 if (temp_bfd == NULL)
304 perror_with_name (filename);
306 if (!bfd_check_format (temp_bfd, bfd_core) &&
307 !gdb_check_format (temp_bfd))
309 /* Do it after the err msg */
310 /* FIXME: should be checking for errors from bfd_close (for one thing,
311 on error it does not free all the storage associated with the
313 make_cleanup_bfd_close (temp_bfd);
314 error (_("\"%s\" is not a core dump: %s"),
315 filename, bfd_errmsg (bfd_get_error ()));
318 /* Looks semi-reasonable. Toss the old core file and work on the new. */
320 discard_cleanups (old_chain); /* Don't free filename any more */
321 unpush_target (&core_ops);
323 old_chain = make_cleanup (core_close_cleanup, 0 /*ignore*/);
325 /* FIXME: kettenis/20031023: This is very dangerous. The
326 CORE_GDBARCH that results from this call may very well be
327 different from CURRENT_GDBARCH. However, its methods may only
328 work if it is selected as the current architecture, because they
329 rely on swapped data (see gdbarch.c). We should get rid of that
331 core_gdbarch = gdbarch_from_bfd (core_bfd);
333 /* Find a suitable core file handler to munch on core_bfd */
334 core_vec = sniff_core_bfd (core_bfd);
338 /* Find the data section */
339 if (build_section_table (core_bfd, &core_ops.to_sections,
340 &core_ops.to_sections_end))
341 error (_("\"%s\": Can't find sections: %s"),
342 bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
344 /* If we have no exec file, try to set the architecture from the
345 core file. We don't do this unconditionally since an exec file
346 typically contains more information that helps us determine the
347 architecture than a core file. */
349 set_gdbarch_from_file (core_bfd);
351 ontop = !push_target (&core_ops);
352 discard_cleanups (old_chain);
354 /* This is done first, before anything has a chance to query the
355 inferior for information such as symbols. */
356 post_create_inferior (&core_ops, from_tty);
358 p = bfd_core_file_failing_command (core_bfd);
360 printf_filtered (_("Core was generated by `%s'.\n"), p);
362 siggy = bfd_core_file_failing_signal (core_bfd);
364 /* NOTE: target_signal_from_host() converts a target signal value
365 into gdb's internal signal value. Unfortunately gdb's internal
366 value is called ``target_signal'' and this function got the
367 name ..._from_host(). */
368 printf_filtered (_("Program terminated with signal %d, %s.\n"), siggy,
369 target_signal_to_string (target_signal_from_host (siggy)));
371 /* Build up thread list from BFD sections. */
374 bfd_map_over_sections (core_bfd, add_to_thread_list,
375 bfd_get_section_by_name (core_bfd, ".reg"));
379 /* Fetch all registers from core file. */
380 target_fetch_registers (-1);
382 /* Now, set up the frame cache, and print the top of stack. */
383 flush_cached_frames ();
384 select_frame (get_current_frame ());
385 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
390 "you won't be able to access this core file until you terminate\n\
391 your %s; do ``info files''", target_longname);
396 core_detach (char *args, int from_tty)
399 error (_("Too many arguments"));
400 unpush_target (&core_ops);
401 reinit_frame_cache ();
403 printf_filtered (_("No core file now.\n"));
407 /* Try to retrieve registers from a section in core_bfd, and supply
408 them to core_vec->core_read_registers, as the register set numbered
411 If inferior_ptid is zero, do the single-threaded thing: look for a
412 section named NAME. If inferior_ptid is non-zero, do the
413 multi-threaded thing: look for a section named "NAME/PID", where
414 PID is the shortest ASCII decimal representation of inferior_ptid.
416 HUMAN_NAME is a human-readable name for the kind of registers the
417 NAME section contains, for use in error messages.
419 If REQUIRED is non-zero, print an error if the core file doesn't
420 have a section by the appropriate name. Otherwise, just do nothing. */
423 get_core_register_section (char *name,
428 static char *section_name = NULL;
429 struct bfd_section *section;
433 xfree (section_name);
434 if (PIDGET (inferior_ptid))
435 section_name = xstrprintf ("%s/%d", name, PIDGET (inferior_ptid));
437 section_name = xstrdup (name);
439 section = bfd_get_section_by_name (core_bfd, section_name);
443 warning (_("Couldn't find %s registers in core file."), human_name);
447 size = bfd_section_size (core_bfd, section);
448 contents = alloca (size);
449 if (! bfd_get_section_contents (core_bfd, section, contents,
452 warning (_("Couldn't read %s registers from `%s' section in core file."),
457 if (core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
459 const struct regset *regset;
461 regset = gdbarch_regset_from_core_section (core_gdbarch, name, size);
465 warning (_("Couldn't recognize %s registers in core file."),
470 regset->supply_regset (regset, current_regcache, -1, contents, size);
474 gdb_assert (core_vec);
475 core_vec->core_read_registers (contents, size, which,
477 bfd_section_vma (core_bfd, section)));
481 /* Get the registers out of a core file. This is the machine-
482 independent part. Fetch_core_registers is the machine-dependent
483 part, typically implemented in the xm-file for each architecture. */
485 /* We just get all the registers, so we don't use regno. */
488 get_core_registers (int regno)
492 if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch))
493 && (core_vec == NULL || core_vec->core_read_registers == NULL))
495 fprintf_filtered (gdb_stderr,
496 "Can't fetch registers from this type of core file\n");
500 get_core_register_section (".reg", 0, "general-purpose", 1);
501 get_core_register_section (".reg2", 2, "floating-point", 0);
502 get_core_register_section (".reg-xfp", 3, "extended floating-point", 0);
504 deprecated_registers_fetched ();
508 core_files_info (struct target_ops *t)
510 print_section_info (t, core_bfd);
514 core_xfer_partial (struct target_ops *ops, enum target_object object,
515 const char *annex, gdb_byte *readbuf,
516 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
520 case TARGET_OBJECT_MEMORY:
522 return (*ops->deprecated_xfer_memory) (offset, readbuf, len,
523 0/*write*/, NULL, ops);
525 return (*ops->deprecated_xfer_memory) (offset, readbuf, len,
526 1/*write*/, NULL, ops);
529 case TARGET_OBJECT_AUXV:
532 /* When the aux vector is stored in core file, BFD
533 represents this with a fake section called ".auxv". */
535 struct bfd_section *section;
539 section = bfd_get_section_by_name (core_bfd, ".auxv");
543 size = bfd_section_size (core_bfd, section);
550 && !bfd_get_section_contents (core_bfd, section, readbuf,
551 (file_ptr) offset, size))
553 warning (_("Couldn't read NT_AUXV note in core file."));
561 case TARGET_OBJECT_WCOOKIE:
564 /* When the StackGhost cookie is stored in core file, BFD
565 represents this with a fake section called ".wcookie". */
567 struct bfd_section *section;
571 section = bfd_get_section_by_name (core_bfd, ".wcookie");
575 size = bfd_section_size (core_bfd, section);
582 && !bfd_get_section_contents (core_bfd, section, readbuf,
583 (file_ptr) offset, size))
585 warning (_("Couldn't read StackGhost cookie in core file."));
594 if (ops->beneath != NULL)
595 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
596 readbuf, writebuf, offset, len);
602 /* If mourn is being called in all the right places, this could be say
603 `gdb internal error' (since generic_mourn calls breakpoint_init_inferior). */
606 ignore (CORE_ADDR addr, bfd_byte *contents)
612 /* Okay, let's be honest: threads gleaned from a core file aren't
613 exactly lively, are they? On the other hand, if we don't claim
614 that each & every one is alive, then we don't get any of them
615 to appear in an "info thread" command, which is quite a useful
619 core_file_thread_alive (ptid_t tid)
624 /* Fill in core_ops with its defined operations and properties. */
629 core_ops.to_shortname = "core";
630 core_ops.to_longname = "Local core dump file";
632 "Use a core file as a target. Specify the filename of the core file.";
633 core_ops.to_open = core_open;
634 core_ops.to_close = core_close;
635 core_ops.to_attach = find_default_attach;
636 core_ops.to_detach = core_detach;
637 core_ops.to_fetch_registers = get_core_registers;
638 core_ops.to_xfer_partial = core_xfer_partial;
639 core_ops.deprecated_xfer_memory = xfer_memory;
640 core_ops.to_files_info = core_files_info;
641 core_ops.to_insert_breakpoint = ignore;
642 core_ops.to_remove_breakpoint = ignore;
643 core_ops.to_create_inferior = find_default_create_inferior;
644 core_ops.to_thread_alive = core_file_thread_alive;
645 core_ops.to_stratum = core_stratum;
646 core_ops.to_has_memory = 1;
647 core_ops.to_has_stack = 1;
648 core_ops.to_has_registers = 1;
649 core_ops.to_magic = OPS_MAGIC;
652 /* non-zero if we should not do the add_target call in
653 _initialize_corelow; not initialized (i.e., bss) so that
654 the target can initialize it (i.e., data) if appropriate.
655 This needs to be set at compile time because we don't know
656 for sure whether the target's initialize routine is called
657 before us or after us. */
658 int coreops_suppress_target;
661 _initialize_corelow (void)
665 if (!coreops_suppress_target)
666 add_target (&core_ops);