GDB (xrefs)
/tmp/gdb-8.1/gdb/corelow.c
Go to the documentation of this file.
1 /* Core dump and executable file functions below target vector, for GDB.
2 
3  Copyright (C) 1986-2018 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 "solib.h"
42 #include "filenames.h"
43 #include "progspace.h"
44 #include "objfiles.h"
45 #include "gdb_bfd.h"
46 #include "completer.h"
47 #include "filestuff.h"
48 
49 #ifndef O_LARGEFILE
50 #define O_LARGEFILE 0
51 #endif
52 
53 /* List of all available core_fns. On gdb startup, each core file
54  register reader calls deprecated_add_core_fns() to register
55  information on each core format it is prepared to read. */
56 
57 static struct core_fns *core_file_fns = NULL;
58 
59 /* The core_fns for a core file handler that is prepared to read the
60  core file currently open on core_bfd. */
61 
62 static struct core_fns *core_vec = NULL;
63 
64 /* FIXME: kettenis/20031023: Eventually this variable should
65  disappear. */
66 
67 static struct gdbarch *core_gdbarch = NULL;
68 
69 /* Per-core data. Currently, only the section table. Note that these
70  target sections are *not* mapped in the current address spaces' set
71  of target sections --- those should come only from pure executable
72  or shared library bfds. The core bfd sections are an
73  implementation detail of the core target, just like ptrace is for
74  unix child targets. */
76 
77 static void core_files_info (struct target_ops *);
78 
79 static struct core_fns *sniff_core_bfd (bfd *);
80 
81 static int gdb_check_format (bfd *);
82 
83 static void core_close (struct target_ops *self);
84 
85 static void core_close_cleanup (void *ignore);
86 
87 static void add_to_thread_list (bfd *, asection *, void *);
88 
89 static void init_core_ops (void);
90 
91 static struct target_ops core_ops;
92 
93 /* An arbitrary identifier for the core inferior. */
94 #define CORELOW_PID 1
95 
96 /* Link a new core_fns into the global core_file_fns list. Called on
97  gdb startup by the _initialize routine in each core file register
98  reader, to register information about each format the reader is
99  prepared to handle. */
100 
101 void
103 {
104  cf->next = core_file_fns;
105  core_file_fns = cf;
106 }
107 
108 /* The default function that core file handlers can use to examine a
109  core file BFD and decide whether or not to accept the job of
110  reading the core file. */
111 
112 int
113 default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
114 {
115  int result;
116 
117  result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
118  return (result);
119 }
120 
121 /* Walk through the list of core functions to find a set that can
122  handle the core file open on ABFD. 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
133  CORE_GDBARCH. */
135  return NULL;
136 
137  for (cf = core_file_fns; cf != NULL; cf = cf->next)
138  {
139  if (cf->core_sniffer (cf, abfd))
140  {
141  yummy = cf;
142  matches++;
143  }
144  }
145  if (matches > 1)
146  {
147  warning (_("\"%s\": ambiguous core format, %d handlers match"),
148  bfd_get_filename (abfd), matches);
149  }
150  else if (matches == 0)
151  error (_("\"%s\": no core file handler recognizes format"),
152  bfd_get_filename (abfd));
153 
154  return (yummy);
155 }
156 
157 /* The default is to reject every core file format we see. Either
158  BFD has to recognize it, or we have to provide a function in the
159  core file handler that recognizes it. */
160 
161 int
163 {
164  return (0);
165 }
166 
167 /* Attempt to recognize core file formats that BFD rejects. */
168 
169 static int
170 gdb_check_format (bfd *abfd)
171 {
172  struct core_fns *cf;
173 
174  for (cf = core_file_fns; cf != NULL; cf = cf->next)
175  {
176  if (cf->check_format (abfd))
177  {
178  return (1);
179  }
180  }
181  return (0);
182 }
183 
184 /* Discard all vestiges of any previous core file and mark data and
185  stack spaces as empty. */
186 
187 static void
188 core_close (struct target_ops *self)
189 {
190  if (core_bfd)
191  {
193  inferior_ptid = null_ptid; /* Avoid confusion from thread
194  stuff. */
195  if (pid != 0)
197 
198  /* Clear out solib state while the bfd is still open. See
199  comments in clear_solib in solib.c. */
200  clear_solib ();
201 
202  if (core_data)
203  {
205  xfree (core_data);
206  core_data = NULL;
207  }
208 
210  core_bfd = NULL;
211  }
212  core_vec = NULL;
213  core_gdbarch = NULL;
214 }
215 
216 static void
218 {
219  core_close (NULL);
220 }
221 
222 /* Look for sections whose names start with `.reg/' so that we can
223  extract the list of threads in a core file. */
224 
225 static void
226 add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
227 {
228  ptid_t ptid;
229  int core_tid;
230  int pid, lwpid;
231  asection *reg_sect = (asection *) reg_sect_arg;
232  int fake_pid_p = 0;
233  struct inferior *inf;
234 
235  if (!startswith (bfd_section_name (abfd, asect), ".reg/"))
236  return;
237 
238  core_tid = atoi (bfd_section_name (abfd, asect) + 5);
239 
240  pid = bfd_core_file_pid (core_bfd);
241  if (pid == 0)
242  {
243  fake_pid_p = 1;
244  pid = CORELOW_PID;
245  }
246 
247  lwpid = core_tid;
248 
249  inf = current_inferior ();
250  if (inf->pid == 0)
251  {
253  inf->fake_pid_p = fake_pid_p;
254  }
255 
256  ptid = ptid_build (pid, lwpid, 0);
257 
258  add_thread (ptid);
259 
260 /* Warning, Will Robinson, looking at BFD private data! */
261 
262  if (reg_sect != NULL
263  && asect->filepos == reg_sect->filepos) /* Did we find .reg? */
264  inferior_ptid = ptid; /* Yes, make it current. */
265 }
266 
267 /* This routine opens and sets up the core file bfd. */
268 
269 static void
270 core_open (const char *arg, int from_tty)
271 {
272  const char *p;
273  int siggy;
274  struct cleanup *old_chain;
275  int scratch_chan;
276  int flags;
277 
278  target_preopen (from_tty);
279  if (!arg)
280  {
281  if (core_bfd)
282  error (_("No core file specified. (Use `detach' "
283  "to stop debugging a core file.)"));
284  else
285  error (_("No core file specified."));
286  }
287 
288  gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
289  if (!IS_ABSOLUTE_PATH (filename.get ()))
290  filename.reset (concat (current_directory, "/",
291  filename.get (), (char *) NULL));
292 
294  if (write_files)
295  flags |= O_RDWR;
296  else
297  flags |= O_RDONLY;
298  scratch_chan = gdb_open_cloexec (filename.get (), flags, 0);
299  if (scratch_chan < 0)
300  perror_with_name (filename.get ());
301 
302  gdb_bfd_ref_ptr temp_bfd (gdb_bfd_fopen (filename.get (), gnutarget,
303  write_files ? FOPEN_RUB : FOPEN_RB,
304  scratch_chan));
305  if (temp_bfd == NULL)
306  perror_with_name (filename.get ());
307 
308  if (!bfd_check_format (temp_bfd.get (), bfd_core)
309  && !gdb_check_format (temp_bfd.get ()))
310  {
311  /* Do it after the err msg */
312  /* FIXME: should be checking for errors from bfd_close (for one
313  thing, on error it does not free all the storage associated
314  with the bfd). */
315  error (_("\"%s\" is not a core dump: %s"),
316  filename.get (), bfd_errmsg (bfd_get_error ()));
317  }
318 
319  /* Looks semi-reasonable. Toss the old core file and work on the
320  new. */
321 
323  core_bfd = temp_bfd.release ();
324  old_chain = make_cleanup (core_close_cleanup, 0 /*ignore*/);
325 
327 
328  /* Find a suitable core file handler to munch on core_bfd */
330 
331  validate_files ();
332 
334 
335  /* Find the data section */
339  error (_("\"%s\": Can't find sections: %s"),
340  bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
341 
342  /* If we have no exec file, try to set the architecture from the
343  core file. We don't do this unconditionally since an exec file
344  typically contains more information that helps us determine the
345  architecture than a core file. */
346  if (!exec_bfd)
348 
350  discard_cleanups (old_chain);
351 
352  /* Do this before acknowledging the inferior, so if
353  post_create_inferior throws (can happen easilly if you're loading
354  a core file with the wrong exec), we aren't left with threads
355  from the previous inferior. */
356  init_thread_list ();
357 
359 
360  /* Need to flush the register cache (and the frame cache) from a
361  previous debug session. If inferior_ptid ends up the same as the
362  last debug session --- e.g., b foo; run; gcore core1; step; gcore
363  core2; core core1; core core2 --- then there's potential for
364  get_current_regcache to return the cached regcache of the
365  previous session, and the frame cache being stale. */
367 
368  /* Build up thread list from BFD sections, and possibly set the
369  current thread to the .reg/NN section matching the .reg
370  section. */
371  bfd_map_over_sections (core_bfd, add_to_thread_list,
372  bfd_get_section_by_name (core_bfd, ".reg"));
373 
375  {
376  /* Either we found no .reg/NN section, and hence we have a
377  non-threaded core (single-threaded, from gdb's perspective),
378  or for some reason add_to_thread_list couldn't determine
379  which was the "main" thread. The latter case shouldn't
380  usually happen, but we're dealing with input here, which can
381  always be broken in different ways. */
382  struct thread_info *thread = first_thread_of_process (-1);
383 
384  if (thread == NULL)
385  {
389  }
390  else
391  switch_to_thread (thread->ptid);
392  }
393 
394  post_create_inferior (&core_ops, from_tty);
395 
396  /* Now go through the target stack looking for threads since there
397  may be a thread_stratum target loaded on top of target core by
398  now. The layer above should claim threads found in the BFD
399  sections. */
400  TRY
401  {
403  }
404 
405  CATCH (except, RETURN_MASK_ERROR)
406  {
407  exception_print (gdb_stderr, except);
408  }
409  END_CATCH
410 
411  p = bfd_core_file_failing_command (core_bfd);
412  if (p)
413  printf_filtered (_("Core was generated by `%s'.\n"), p);
414 
415  /* Clearing any previous state of convenience variables. */
417 
418  siggy = bfd_core_file_failing_signal (core_bfd);
419  if (siggy > 0)
420  {
421  /* If we don't have a CORE_GDBARCH to work with, assume a native
422  core (map gdb_signal from host signals). If we do have
423  CORE_GDBARCH to work with, but no gdb_signal_from_target
424  implementation for that gdbarch, as a fallback measure,
425  assume the host signal mapping. It'll be correct for native
426  cores, but most likely incorrect for cross-cores. */
427  enum gdb_signal sig = (core_gdbarch != NULL
430  siggy)
431  : gdb_signal_from_host (siggy));
432 
433  printf_filtered (_("Program terminated with signal %s, %s.\n"),
435 
436  /* Set the value of the internal variable $_exitsignal,
437  which holds the signal uncaught by the inferior. */
439  siggy);
440  }
441 
442  /* Fetch all registers from core file. */
444 
445  /* Now, set up the frame cache, and print the top of stack. */
448 
449  /* Current thread should be NUM 1 but the user does not know that.
450  If a program is single threaded gdb in general does not mention
451  anything about threads. That is why the test is >= 2. */
452  if (thread_count () >= 2)
453  {
454  TRY
455  {
456  thread_command (NULL, from_tty);
457  }
458  CATCH (except, RETURN_MASK_ERROR)
459  {
460  exception_print (gdb_stderr, except);
461  }
462  END_CATCH
463  }
464 }
465 
466 static void
467 core_detach (struct target_ops *ops, const char *args, int from_tty)
468 {
469  if (args)
470  error (_("Too many arguments"));
471  unpush_target (ops);
473  if (from_tty)
474  printf_filtered (_("No core file now.\n"));
475 }
476 
477 /* Try to retrieve registers from a section in core_bfd, and supply
478  them to core_vec->core_read_registers, as the register set numbered
479  WHICH.
480 
481  If ptid's lwp member is zero, do the single-threaded
482  thing: look for a section named NAME. If ptid's lwp
483  member is non-zero, do the multi-threaded thing: look for a section
484  named "NAME/LWP", where LWP is the shortest ASCII decimal
485  representation of ptid's lwp member.
486 
487  HUMAN_NAME is a human-readable name for the kind of registers the
488  NAME section contains, for use in error messages.
489 
490  If REQUIRED is non-zero, print an error if the core file doesn't
491  have a section by the appropriate name. Otherwise, just do
492  nothing. */
493 
494 static void
496  const struct regset *regset,
497  const char *name,
498  int min_size,
499  int which,
500  const char *human_name,
501  int required)
502 {
503  struct bfd_section *section;
504  bfd_size_type size;
505  char *contents;
506  bool variable_size_section = (regset != NULL
508 
509  thread_section_name section_name (name, regcache->ptid ());
510 
511  section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
512  if (! section)
513  {
514  if (required)
515  warning (_("Couldn't find %s registers in core file."),
516  human_name);
517  return;
518  }
519 
520  size = bfd_section_size (core_bfd, section);
521  if (size < min_size)
522  {
523  warning (_("Section `%s' in core file too small."),
524  section_name.c_str ());
525  return;
526  }
527  if (size != min_size && !variable_size_section)
528  {
529  warning (_("Unexpected size of section `%s' in core file."),
530  section_name.c_str ());
531  }
532 
533  contents = (char *) alloca (size);
534  if (! bfd_get_section_contents (core_bfd, section, contents,
535  (file_ptr) 0, size))
536  {
537  warning (_("Couldn't read %s registers from `%s' section in core file."),
538  human_name, section_name.c_str ());
539  return;
540  }
541 
542  if (regset != NULL)
543  {
544  regset->supply_regset (regset, regcache, -1, contents, size);
545  return;
546  }
547 
549  core_vec->core_read_registers (regcache, contents, size, which,
550  ((CORE_ADDR)
551  bfd_section_vma (core_bfd, section)));
552 }
553 
554 /* Callback for get_core_registers that handles a single core file
555  register note section. */
556 
557 static void
558 get_core_registers_cb (const char *sect_name, int size,
559  const struct regset *regset,
560  const char *human_name, void *cb_data)
561 {
562  struct regcache *regcache = (struct regcache *) cb_data;
563  int required = 0;
564 
565  if (strcmp (sect_name, ".reg") == 0)
566  {
567  required = 1;
568  if (human_name == NULL)
569  human_name = "general-purpose";
570  }
571  else if (strcmp (sect_name, ".reg2") == 0)
572  {
573  if (human_name == NULL)
574  human_name = "floating-point";
575  }
576 
577  /* The 'which' parameter is only used when no regset is provided.
578  Thus we just set it to -1. */
580  size, -1, human_name, required);
581 }
582 
583 /* Get the registers out of a core file. This is the machine-
584  independent part. Fetch_core_registers is the machine-dependent
585  part, typically implemented in the xm-file for each
586  architecture. */
587 
588 /* We just get all the registers, so we don't use regno. */
589 
590 static void
592  struct regcache *regcache, int regno)
593 {
594  int i;
595  struct gdbarch *gdbarch;
596 
598  && (core_vec == NULL || core_vec->core_read_registers == NULL))
599  {
601  "Can't fetch registers from this type of core file\n");
602  return;
603  }
604 
605  gdbarch = regcache->arch ();
609  (void *) regcache, NULL);
610  else
611  {
613  ".reg", 0, 0, "general-purpose", 1);
615  ".reg2", 0, 2, "floating-point", 0);
616  }
617 
618  /* Mark all registers not found in the core as unavailable. */
619  for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
621  regcache_raw_supply (regcache, i, NULL);
622 }
623 
624 static void
626 {
628 }
629 
631 {
637 };
638 
639 static void
640 add_to_spuid_list (bfd *abfd, asection *asect, void *list_p)
641 {
642  struct spuid_list *list = (struct spuid_list *) list_p;
643  enum bfd_endian byte_order
644  = bfd_big_endian (abfd) ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
645  int fd, pos = 0;
646 
647  sscanf (bfd_section_name (abfd, asect), "SPU/%d/regs%n", &fd, &pos);
648  if (pos == 0)
649  return;
650 
651  if (list->pos >= list->offset && list->pos + 4 <= list->offset + list->len)
652  {
653  store_unsigned_integer (list->buf + list->pos - list->offset,
654  4, byte_order, fd);
655  list->written += 4;
656  }
657  list->pos += 4;
658 }
659 
660 static enum target_xfer_status
661 core_xfer_partial (struct target_ops *ops, enum target_object object,
662  const char *annex, gdb_byte *readbuf,
663  const gdb_byte *writebuf, ULONGEST offset,
664  ULONGEST len, ULONGEST *xfered_len)
665 {
666  switch (object)
667  {
669  return section_table_xfer_memory_partial (readbuf, writebuf,
670  offset, len, xfered_len,
673  NULL);
674 
675  case TARGET_OBJECT_AUXV:
676  if (readbuf)
677  {
678  /* When the aux vector is stored in core file, BFD
679  represents this with a fake section called ".auxv". */
680 
681  struct bfd_section *section;
682  bfd_size_type size;
683 
684  section = bfd_get_section_by_name (core_bfd, ".auxv");
685  if (section == NULL)
686  return TARGET_XFER_E_IO;
687 
688  size = bfd_section_size (core_bfd, section);
689  if (offset >= size)
690  return TARGET_XFER_EOF;
691  size -= offset;
692  if (size > len)
693  size = len;
694 
695  if (size == 0)
696  return TARGET_XFER_EOF;
697  if (!bfd_get_section_contents (core_bfd, section, readbuf,
698  (file_ptr) offset, size))
699  {
700  warning (_("Couldn't read NT_AUXV note in core file."));
701  return TARGET_XFER_E_IO;
702  }
703 
704  *xfered_len = (ULONGEST) size;
705  return TARGET_XFER_OK;
706  }
707  return TARGET_XFER_E_IO;
708 
710  if (readbuf)
711  {
712  /* When the StackGhost cookie is stored in core file, BFD
713  represents this with a fake section called
714  ".wcookie". */
715 
716  struct bfd_section *section;
717  bfd_size_type size;
718 
719  section = bfd_get_section_by_name (core_bfd, ".wcookie");
720  if (section == NULL)
721  return TARGET_XFER_E_IO;
722 
723  size = bfd_section_size (core_bfd, section);
724  if (offset >= size)
725  return TARGET_XFER_EOF;
726  size -= offset;
727  if (size > len)
728  size = len;
729 
730  if (size == 0)
731  return TARGET_XFER_EOF;
732  if (!bfd_get_section_contents (core_bfd, section, readbuf,
733  (file_ptr) offset, size))
734  {
735  warning (_("Couldn't read StackGhost cookie in core file."));
736  return TARGET_XFER_E_IO;
737  }
738 
739  *xfered_len = (ULONGEST) size;
740  return TARGET_XFER_OK;
741 
742  }
743  return TARGET_XFER_E_IO;
744 
746  if (core_gdbarch
748  {
749  if (writebuf)
750  return TARGET_XFER_E_IO;
751  else
752  {
754  readbuf,
755  offset, len);
756 
757  if (*xfered_len == 0)
758  return TARGET_XFER_EOF;
759  else
760  return TARGET_XFER_OK;
761  }
762  }
763  /* FALL THROUGH */
764 
766  if (core_gdbarch
768  {
769  if (writebuf)
770  return TARGET_XFER_E_IO;
771  else
772  {
773  *xfered_len
775  readbuf, offset,
776  len);
777 
778  if (*xfered_len == 0)
779  return TARGET_XFER_EOF;
780  else
781  return TARGET_XFER_OK;
782  }
783  }
784  /* FALL THROUGH */
785 
786  case TARGET_OBJECT_SPU:
787  if (readbuf && annex)
788  {
789  /* When the SPU contexts are stored in a core file, BFD
790  represents this with a fake section called
791  "SPU/<annex>". */
792 
793  struct bfd_section *section;
794  bfd_size_type size;
795  char sectionstr[100];
796 
797  xsnprintf (sectionstr, sizeof sectionstr, "SPU/%s", annex);
798 
799  section = bfd_get_section_by_name (core_bfd, sectionstr);
800  if (section == NULL)
801  return TARGET_XFER_E_IO;
802 
803  size = bfd_section_size (core_bfd, section);
804  if (offset >= size)
805  return TARGET_XFER_EOF;
806  size -= offset;
807  if (size > len)
808  size = len;
809 
810  if (size == 0)
811  return TARGET_XFER_EOF;
812  if (!bfd_get_section_contents (core_bfd, section, readbuf,
813  (file_ptr) offset, size))
814  {
815  warning (_("Couldn't read SPU section in core file."));
816  return TARGET_XFER_E_IO;
817  }
818 
819  *xfered_len = (ULONGEST) size;
820  return TARGET_XFER_OK;
821  }
822  else if (readbuf)
823  {
824  /* NULL annex requests list of all present spuids. */
825  struct spuid_list list;
826 
827  list.buf = readbuf;
828  list.offset = offset;
829  list.len = len;
830  list.pos = 0;
831  list.written = 0;
832  bfd_map_over_sections (core_bfd, add_to_spuid_list, &list);
833 
834  if (list.written == 0)
835  return TARGET_XFER_EOF;
836  else
837  {
838  *xfered_len = (ULONGEST) list.written;
839  return TARGET_XFER_OK;
840  }
841  }
842  return TARGET_XFER_E_IO;
843 
845  if (readbuf)
846  {
847  if (core_gdbarch
849  {
851  offset, len);
852 
853  if (l >= 0)
854  {
855  *xfered_len = l;
856  if (l == 0)
857  return TARGET_XFER_EOF;
858  else
859  return TARGET_XFER_OK;
860  }
861  }
862  }
863  return TARGET_XFER_E_IO;
864 
865  default:
866  return ops->beneath->to_xfer_partial (ops->beneath, object,
867  annex, readbuf,
868  writebuf, offset, len,
869  xfered_len);
870  }
871 }
872 
873 
874 /* If mourn is being called in all the right places, this could be say
875  `gdb internal error' (since generic_mourn calls
876  breakpoint_init_inferior). */
877 
878 static int
879 ignore (struct target_ops *ops, struct gdbarch *gdbarch,
880  struct bp_target_info *bp_tgt)
881 {
882  return 0;
883 }
884 
885 /* Implement the to_remove_breakpoint method. */
886 
887 static int
889  struct bp_target_info *bp_tgt,
890  enum remove_bp_reason reason)
891 {
892  return 0;
893 }
894 
895 
896 /* Okay, let's be honest: threads gleaned from a core file aren't
897  exactly lively, are they? On the other hand, if we don't claim
898  that each & every one is alive, then we don't get any of them
899  to appear in an "info thread" command, which is quite a useful
900  behaviour.
901  */
902 static int
904 {
905  return 1;
906 }
907 
908 /* Ask the current architecture what it knows about this core file.
909  That will be used, in turn, to pick a better architecture. This
910  wrapper could be avoided if targets got a chance to specialize
911  core_ops. */
912 
913 static const struct target_desc *
915 {
917  {
918  const struct target_desc *result;
919 
921  target, core_bfd);
922  if (result != NULL)
923  return result;
924  }
925 
926  return target->beneath->to_read_description (target->beneath);
927 }
928 
929 static const char *
930 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
931 {
932  static char buf[64];
933  struct inferior *inf;
934  int pid;
935 
936  /* The preferred way is to have a gdbarch/OS specific
937  implementation. */
938  if (core_gdbarch
940  return gdbarch_core_pid_to_str (core_gdbarch, ptid);
941 
942  /* Otherwise, if we don't have one, we'll just fallback to
943  "process", with normal_pid_to_str. */
944 
945  /* Try the LWPID field first. */
946  pid = ptid_get_lwp (ptid);
947  if (pid != 0)
948  return normal_pid_to_str (pid_to_ptid (pid));
949 
950  /* Otherwise, this isn't a "threaded" core -- use the PID field, but
951  only if it isn't a fake PID. */
952  inf = find_inferior_ptid (ptid);
953  if (inf != NULL && !inf->fake_pid_p)
954  return normal_pid_to_str (ptid);
955 
956  /* No luck. We simply don't have a valid PID to print. */
957  xsnprintf (buf, sizeof buf, "<main task>");
958  return buf;
959 }
960 
961 static const char *
962 core_thread_name (struct target_ops *self, struct thread_info *thr)
963 {
964  if (core_gdbarch
967  return NULL;
968 }
969 
970 static int
972 {
973  return (core_bfd != NULL);
974 }
975 
976 static int
978 {
979  return (core_bfd != NULL);
980 }
981 
982 static int
984 {
985  return (core_bfd != NULL);
986 }
987 
988 /* Implement the to_info_proc method. */
989 
990 static void
991 core_info_proc (struct target_ops *ops, const char *args,
992  enum info_proc_what request)
993 {
994  struct gdbarch *gdbarch = get_current_arch ();
995 
996  /* Since this is the core file target, call the 'core_info_proc'
997  method on gdbarch, not 'info_proc'. */
999  gdbarch_core_info_proc (gdbarch, args, request);
1000 }
1001 
1002 /* Fill in core_ops with its defined operations and properties. */
1003 
1004 static void
1006 {
1007  core_ops.to_shortname = "core";
1008  core_ops.to_longname = "Local core dump file";
1009  core_ops.to_doc =
1010  "Use a core file as a target. Specify the filename of the core file.";
1029 
1030  if (core_target)
1031  internal_error (__FILE__, __LINE__,
1032  _("init_core_ops: core target already exists (\"%s\")."),
1034  core_target = &core_ops;
1035 }
1036 
1037 void
1039 {
1040  init_core_ops ();
1041 
1043 }
int default_check_format(bfd *abfd)
Definition: corelow.c:162
struct thread_info * add_thread(ptid_t ptid)
Definition: thread.c:333
const struct target_desc *(* to_read_description)(struct target_ops *ops) TARGET_DEFAULT_RETURN(NULL)
Definition: target.h:790
const char * to_longname
Definition: target.h:416
struct frame_info * get_selected_frame(const char *message)
Definition: frame.c:1638
void(* core_read_registers)(struct regcache *regcache, char *core_reg_sect, unsigned core_reg_size, int which, CORE_ADDR reg_addr)
Definition: gdbcore.h:215
void post_create_inferior(struct target_ops *target, int from_tty)
Definition: infcmd.c:435
bfd_vma CORE_ADDR
Definition: common-types.h:41
int gdbarch_core_xfer_shared_libraries_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3702
int ptid_get_pid(const ptid_t &ptid)
Definition: ptid.c:47
void xfree(void *)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
Definition: gnu-nat.c:1824
void clear_exit_convenience_vars(void)
Definition: infrun.c:9077
struct target_section * sections_end
Definition: target.h:2335
int(* to_has_memory)(struct target_ops *)
Definition: target.h:658
void warning(const char *fmt,...)
Definition: errors.c:26
static void core_close_cleanup(void *ignore)
Definition: corelow.c:217
int(* to_has_stack)(struct target_ops *)
Definition: target.h:659
void push_target(struct target_ops *t)
Definition: target.c:642
static struct target_section_table * core_data
Definition: corelow.c:75
int(* to_insert_breakpoint)(struct target_ops *, struct gdbarch *, struct bp_target_info *) TARGET_DEFAULT_FUNC(memory_insert_breakpoint)
Definition: target.h:466
int build_section_table(struct bfd *some_bfd, struct target_section **start, struct target_section **end)
Definition: exec.c:509
int unpush_target(struct target_ops *t)
Definition: target.c:689
struct core_fns * next
Definition: gdbcore.h:225
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
#define CORELOW_PID
Definition: corelow.c:94
const struct target_desc * gdbarch_core_read_description(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
Definition: gdbarch.c:4062
static struct core_fns * sniff_core_bfd(bfd *)
Definition: corelow.c:126
ULONGEST gdbarch_core_xfer_shared_libraries_aix(struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
Definition: gdbarch.c:3733
void(* to_close)(struct target_ops *)
Definition: target.h:431
const char *(* to_pid_to_str)(struct target_ops *, ptid_t) TARGET_DEFAULT_FUNC(default_pid_to_str)
Definition: target.h:630
void _initialize_corelow(void)
Definition: corelow.c:1038
gdb_byte * buf
Definition: corelow.c:632
void filename_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
Definition: completer.c:152
int gdbarch_core_xfer_shared_libraries_aix_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3726
struct inferior * find_inferior_ptid(ptid_t ptid)
Definition: inferior.c:321
struct thread_info * first_thread_of_process(int pid)
Definition: thread.c:643
int gdbarch_num_regs(struct gdbarch *gdbarch)
Definition: gdbarch.c:2039
void target_fetch_registers(struct regcache *regcache, int regno)
Definition: target.c:3437
struct internalvar * lookup_internalvar(const char *name)
Definition: value.c:2212
ULONGEST gdbarch_core_xfer_shared_libraries(struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
Definition: gdbarch.c:3709
#define _(String)
Definition: gdb_locale.h:35
static void get_core_register_section(struct regcache *regcache, const struct regset *regset, const char *name, int min_size, int which, const char *human_name, int required)
Definition: corelow.c:495
unsigned flags
Definition: regset.h:47
enum target_xfer_status section_table_xfer_memory_partial(gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len, struct target_section *sections, struct target_section *sections_end, const char *section_name)
Definition: exec.c:776
#define END_CATCH
static int core_remove_breakpoint(struct target_ops *ops, struct gdbarch *gdbarch, struct bp_target_info *bp_tgt, enum remove_bp_reason reason)
Definition: corelow.c:888
struct regcache * get_current_regcache(void)
Definition: regcache.c:446
void printf_filtered(const char *format,...)
Definition: utils.c:2045
static void core_info_proc(struct target_ops *ops, const char *args, enum info_proc_what request)
Definition: corelow.c:991
ptid_t ptid_build(int pid, long lwp, long tid)
Definition: ptid.c:31
void(* to_files_info)(struct target_ops *) TARGET_DEFAULT_IGNORE()
Definition: target.h:464
Definition: regset.h:34
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
const char * normal_pid_to_str(ptid_t ptid)
Definition: target.c:3234
#define TRY
int thread_count(void)
Definition: thread.c:567
void switch_to_thread(ptid_t ptid)
Definition: thread.c:1445
const char *const name
Definition: aarch64-tdep.c:76
ULONGEST pos
Definition: corelow.c:635
#define OPS_MAGIC
Definition: target.h:1270
int gdbarch_iterate_over_regset_sections_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3630
#define CATCH(EXCEPTION, MASK)
static const char * core_pid_to_str(struct target_ops *ops, ptid_t ptid)
Definition: corelow.c:930
int write_files
Definition: exec.c:62
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
char * gnutarget
Definition: corefile.c:442
void gdb_bfd_unref(struct bfd *abfd)
Definition: gdb_bfd.c:561
void set_gdbarch_from_file(bfd *abfd)
Definition: arch-utils.c:590
gdb_bfd_ref_ptr gdb_bfd_fopen(const char *filename, const char *target, const char *mode, int fd)
Definition: gdb_bfd.c:773
#define exec_bfd
Definition: exec.h:33
void fprintf_filtered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2008
static void add_to_spuid_list(bfd *abfd, asection *asect, void *list_p)
Definition: corelow.c:640
static void add_to_thread_list(bfd *, asection *, void *)
Definition: corelow.c:226
Definition: ptid.h:35
int gdbarch_core_info_proc_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:4795
static struct target_ops core_ops
Definition: corelow.c:91
void exception_print(struct ui_file *file, struct gdb_exception e)
Definition: exceptions.c:109
int gdbarch_core_pid_to_str_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3750
void clear_solib(void)
Definition: solib.c:1203
ptid_t pid_to_ptid(int pid)
Definition: ptid.c:39
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
Definition: cleanups.c:116
int(* core_sniffer)(struct core_fns *, bfd *)
Definition: gdbcore.h:192
struct target_section * sections
Definition: target.h:2334
target_xfer_status
Definition: target.h:206
void add_target_with_completer(struct target_ops *t, completer_ftype *completer)
Definition: target.c:368
enum gdb_signal gdb_signal_from_host(int)
Definition: signals.c:116
#define REGSET_VARIABLE_SIZE
Definition: regset.h:52
static int core_has_memory(struct target_ops *ops)
Definition: corelow.c:971
Definition: gnu-nat.c:174
struct gdbarch * get_current_arch(void)
Definition: arch-utils.c:798
const char * gdbarch_core_thread_name(struct gdbarch *gdbarch, struct thread_info *thr)
Definition: gdbarch.c:3781
const char * to_doc
Definition: target.h:417
static int startswith(const char *string, const char *pattern)
Definition: common-utils.h:107
int gdbarch_gdb_signal_from_target_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:4168
struct thread_info * add_thread_silent(ptid_t ptid)
Definition: thread.c:266
const char * gdb_signal_to_name(enum gdb_signal)
Definition: signals.c:78
ptid_t ptid
Definition: gdbthread.h:219
void deprecated_add_core_fns(struct core_fns *cf)
Definition: corelow.c:102
enum target_xfer_status(* to_xfer_partial)(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) TARGET_DEFAULT_RETURN(TARGET_XFER_E_IO)
Definition: target.h:739
info_proc_what
Definition: defs.h:399
static enum target_xfer_status core_xfer_partial(struct target_ops *ops, enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
Definition: corelow.c:661
void(* to_detach)(struct target_ops *ops, const char *, int) TARGET_DEFAULT_IGNORE()
Definition: target.h:443
supply_regset_ftype * supply_regset
Definition: regset.h:42
int gdbarch_core_thread_name_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3774
static void core_open(const char *arg, int from_tty)
Definition: corelow.c:270
long ptid_get_lwp(const ptid_t &ptid)
Definition: ptid.c:55
target_object
Definition: target.h:132
ULONGEST written
Definition: corelow.c:636
void gdbarch_core_info_proc(struct gdbarch *gdbarch, const char *args, enum info_proc_what what)
Definition: gdbarch.c:4802
int(* check_format)(bfd *)
Definition: gdbcore.h:186
#define gdb_assert(expr)
Definition: gdb_assert.h:32
struct target_ops * core_target
Definition: corefile.c:58
static void core_detach(struct target_ops *ops, const char *args, int from_tty)
Definition: corelow.c:467
void thread_command(const char *tidstr, int from_tty)
Definition: thread.c:1795
void print_stack_frame(struct frame_info *, int print_level, enum print_what print_what, int set_current_sal)
Definition: stack.c:165
char * current_directory
Definition: top.c:133
bfd_byte gdb_byte
Definition: common-types.h:38
static const char * core_thread_name(struct target_ops *self, struct thread_info *thr)
Definition: corelow.c:962
void target_update_thread_list(void)
Definition: target.c:3310
struct gdbarch * gdbarch_from_bfd(bfd *abfd)
Definition: arch-utils.c:577
#define O_BINARY
Definition: defs.h:106
void discard_cleanups(struct cleanup *old_chain)
Definition: cleanups.c:212
LONGEST len
Definition: corelow.c:634
ptid_t null_ptid
Definition: ptid.c:25
void(* to_fetch_registers)(struct target_ops *, struct regcache *, int) TARGET_DEFAULT_IGNORE()
Definition: target.h:457
void void void void void void void void void perror_with_name(const char *string) ATTRIBUTE_NORETURN
Definition: utils.c:692
static struct core_fns * core_vec
Definition: corelow.c:62
enum register_status regcache_register_status(const struct regcache *regcache, int regnum)
Definition: regcache.c:359
static struct core_fns * core_file_fns
Definition: corelow.c:57
#define gdb_stderr
Definition: utils.h:344
#define XCNEW(T)
Definition: poison.h:121
pid_t pid
Definition: gnu-nat.c:187
int xsnprintf(char *str, size_t size, const char *format,...)
Definition: common-utils.c:134
enum gdb_signal gdbarch_gdb_signal_from_target(struct gdbarch *gdbarch, int signo)
Definition: gdbarch.c:4175
ptid_t inferior_ptid
Definition: infcmd.c:94
void set_internalvar_integer(struct internalvar *var, LONGEST l)
Definition: value.c:2442
enum strata to_stratum
Definition: target.h:656
static void get_core_registers_cb(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
Definition: corelow.c:558
void(* to_open)(const char *, int)
Definition: target.h:426
int offset
Definition: agent.c:65
void registers_changed(void)
Definition: regcache.c:522
static void init_core_ops(void)
Definition: corelow.c:1005
void validate_files(void)
Definition: corefile.c:153
static void core_close(struct target_ops *self)
Definition: corelow.c:188
gdbarch * arch() const
Definition: regcache.c:221
int(* to_remove_breakpoint)(struct target_ops *, struct gdbarch *, struct bp_target_info *, enum remove_bp_reason) TARGET_DEFAULT_FUNC(memory_remove_breakpoint)
Definition: target.h:469
int gdbarch_core_xfer_siginfo_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3798
static int gdb_check_format(bfd *)
Definition: corelow.c:170
LONGEST gdbarch_core_xfer_siginfo(struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
Definition: gdbarch.c:3805
int gdb_open_cloexec(const char *filename, int flags, unsigned long mode)
Definition: filestuff.c:283
int ptid_equal(const ptid_t &ptid1, const ptid_t &ptid2)
Definition: ptid.c:71
struct inferior * current_inferior(void)
Definition: inferior.c:58
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
Definition: regcache.c:1004
const char * to_shortname
Definition: target.h:415
unsigned long long ULONGEST
Definition: common-types.h:53
const char * gdbarch_core_pid_to_str(struct gdbarch *gdbarch, ptid_t ptid)
Definition: gdbarch.c:3757
void exit_inferior_silent(int pid)
Definition: inferior.c:241
static int ignore(struct target_ops *ops, struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
Definition: corelow.c:879
int to_magic
Definition: target.h:1261
#define O_LARGEFILE
Definition: corelow.c:50
static int core_has_stack(struct target_ops *ops)
Definition: corelow.c:977
ULONGEST offset
Definition: corelow.c:633
static int core_thread_alive(struct target_ops *ops, ptid_t ptid)
Definition: corelow.c:903
const char * gdb_signal_to_string(enum gdb_signal)
Definition: signals.c:68
char * args
Definition: inferior.h:352
static const struct target_desc * core_read_description(struct target_ops *target)
Definition: corelow.c:914
bfd * core_bfd
Definition: corefile.c:54
int(* to_thread_alive)(struct target_ops *, ptid_t ptid) TARGET_DEFAULT_RETURN(0)
Definition: target.h:626
void(* to_info_proc)(struct target_ops *, const char *, enum info_proc_what)
Definition: target.h:943
void * arg
Definition: cleanups.c:43
void target_preopen(int from_tty)
Definition: target.c:2121
void reinit_frame_cache(void)
Definition: frame.c:1809
static void core_files_info(struct target_ops *)
Definition: corelow.c:625
ptid_t ptid() const
Definition: regcache.h:325
int(* to_has_registers)(struct target_ops *)
Definition: target.h:660
int default_core_sniffer(struct core_fns *our_fns, bfd *abfd)
Definition: corelow.c:113
bool fake_pid_p
Definition: inferior.h:330
void error(const char *fmt,...)
Definition: errors.c:38
const char *(* to_thread_name)(struct target_ops *, struct thread_info *) TARGET_DEFAULT_RETURN(NULL)
Definition: target.h:634
size_t size
Definition: go32-nat.c:242
remove_bp_reason
Definition: breakpoint.h:47
int gdbarch_core_read_description_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:4055
long long LONGEST
Definition: common-types.h:52
struct target_ops * beneath
Definition: target.h:414
static void get_core_registers(struct target_ops *ops, struct regcache *regcache, int regno)
Definition: corelow.c:591
void inferior_appeared(struct inferior *inf, int pid)
Definition: inferior.c:268
void print_section_info(struct target_section_table *t, bfd *abfd)
Definition: exec.c:878
void init_thread_list(void)
Definition: thread.c:221
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
Definition: defs.h:604
static struct gdbarch * core_gdbarch
Definition: corelow.c:67
void gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
Definition: gdbarch.c:3637
static int core_has_registers(struct target_ops *ops)
Definition: corelow.c:983