* linux-nat.c (enum sigchld_state): Delete.
[deliverable/binutils-gdb.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 }
This page took 0.047893 seconds and 4 git commands to generate.