Add 'regset' parameter to 'iterate_over_regset_sections_cb'
[deliverable/binutils-gdb.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 }
This page took 0.081334 seconds and 5 git commands to generate.