]> Git Repo - binutils.git/blob - gdb/corelow.c
gdb: remove SYMBOL_CLASS macro, add getter
[binutils.git] / gdb / corelow.c
1 /* Core dump and executable file functions below target vector, for GDB.
2
3    Copyright (C) 1986-2022 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 #include "frame.h"              /* required by inferior.h */
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "symtab.h"
28 #include "command.h"
29 #include "bfd.h"
30 #include "target.h"
31 #include "process-stratum-target.h"
32 #include "gdbcore.h"
33 #include "gdbthread.h"
34 #include "regcache.h"
35 #include "regset.h"
36 #include "symfile.h"
37 #include "exec.h"
38 #include "readline/tilde.h"
39 #include "solib.h"
40 #include "solist.h"
41 #include "filenames.h"
42 #include "progspace.h"
43 #include "objfiles.h"
44 #include "gdb_bfd.h"
45 #include "completer.h"
46 #include "gdbsupport/filestuff.h"
47 #include "build-id.h"
48 #include "gdbsupport/pathstuff.h"
49 #include <unordered_map>
50 #include <unordered_set>
51 #include "gdbcmd.h"
52 #include "xml-tdesc.h"
53
54 #ifndef O_LARGEFILE
55 #define O_LARGEFILE 0
56 #endif
57
58 /* The core file target.  */
59
60 static const target_info core_target_info = {
61   "core",
62   N_("Local core dump file"),
63   N_("Use a core file as a target.\n\
64 Specify the filename of the core file.")
65 };
66
67 class core_target final : public process_stratum_target
68 {
69 public:
70   core_target ();
71
72   const target_info &info () const override
73   { return core_target_info; }
74
75   void close () override;
76   void detach (inferior *, int) override;
77   void fetch_registers (struct regcache *, int) override;
78
79   enum target_xfer_status xfer_partial (enum target_object object,
80                                         const char *annex,
81                                         gdb_byte *readbuf,
82                                         const gdb_byte *writebuf,
83                                         ULONGEST offset, ULONGEST len,
84                                         ULONGEST *xfered_len) override;
85   void files_info () override;
86
87   bool thread_alive (ptid_t ptid) override;
88   const struct target_desc *read_description () override;
89
90   std::string pid_to_str (ptid_t) override;
91
92   const char *thread_name (struct thread_info *) override;
93
94   bool has_all_memory () override { return true; }
95   bool has_memory () override;
96   bool has_stack () override;
97   bool has_registers () override;
98   bool has_execution (inferior *inf) override { return false; }
99
100   bool info_proc (const char *, enum info_proc_what) override;
101
102   /* A few helpers.  */
103
104   /* Getter, see variable definition.  */
105   struct gdbarch *core_gdbarch ()
106   {
107     return m_core_gdbarch;
108   }
109
110   /* See definition.  */
111   void get_core_register_section (struct regcache *regcache,
112                                   const struct regset *regset,
113                                   const char *name,
114                                   int section_min_size,
115                                   const char *human_name,
116                                   bool required);
117
118   /* See definition.  */
119   void info_proc_mappings (struct gdbarch *gdbarch);
120
121 private: /* per-core data */
122
123   /* The core's section table.  Note that these target sections are
124      *not* mapped in the current address spaces' set of target
125      sections --- those should come only from pure executable or
126      shared library bfds.  The core bfd sections are an implementation
127      detail of the core target, just like ptrace is for unix child
128      targets.  */
129   target_section_table m_core_section_table;
130
131   /* File-backed address space mappings: some core files include
132      information about memory mapped files.  */
133   target_section_table m_core_file_mappings;
134
135   /* Unavailable mappings.  These correspond to pathnames which either
136      weren't found or could not be opened.  Knowing these addresses can
137      still be useful.  */
138   std::vector<mem_range> m_core_unavailable_mappings;
139
140   /* Build m_core_file_mappings.  Called from the constructor.  */
141   void build_file_mappings ();
142
143   /* Helper method for xfer_partial.  */
144   enum target_xfer_status xfer_memory_via_mappings (gdb_byte *readbuf,
145                                                     const gdb_byte *writebuf,
146                                                     ULONGEST offset,
147                                                     ULONGEST len,
148                                                     ULONGEST *xfered_len);
149
150   /* FIXME: kettenis/20031023: Eventually this field should
151      disappear.  */
152   struct gdbarch *m_core_gdbarch = NULL;
153 };
154
155 core_target::core_target ()
156 {
157   /* Find a first arch based on the BFD.  We need the initial gdbarch so
158      we can setup the hooks to find a target description.  */
159   m_core_gdbarch = gdbarch_from_bfd (core_bfd);
160
161   /* If the arch is able to read a target description from the core, it
162      could yield a more specific gdbarch.  */
163   const struct target_desc *tdesc = read_description ();
164
165   if (tdesc != nullptr)
166     {
167       struct gdbarch_info info;
168       info.abfd = core_bfd;
169       info.target_desc = tdesc;
170       m_core_gdbarch = gdbarch_find_by_info (info);
171     }
172
173   if (!m_core_gdbarch
174       || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
175     error (_("\"%s\": Core file format not supported"),
176            bfd_get_filename (core_bfd));
177
178   /* Find the data section */
179   m_core_section_table = build_section_table (core_bfd);
180
181   build_file_mappings ();
182 }
183
184 /* Construct the target_section_table for file-backed mappings if
185    they exist.
186
187    For each unique path in the note, we'll open a BFD with a bfd
188    target of "binary".  This is an unstructured bfd target upon which
189    we'll impose a structure from the mappings in the architecture-specific
190    mappings note.  A BFD section is allocated and initialized for each
191    file-backed mapping.
192
193    We take care to not share already open bfds with other parts of
194    GDB; in particular, we don't want to add new sections to existing
195    BFDs.  We do, however, ensure that the BFDs that we allocate here
196    will go away (be deallocated) when the core target is detached.  */
197
198 void
199 core_target::build_file_mappings ()
200 {
201   std::unordered_map<std::string, struct bfd *> bfd_map;
202   std::unordered_set<std::string> unavailable_paths;
203
204   /* See linux_read_core_file_mappings() in linux-tdep.c for an example
205      read_core_file_mappings method.  */
206   gdbarch_read_core_file_mappings (m_core_gdbarch, core_bfd,
207
208     /* After determining the number of mappings, read_core_file_mappings
209        will invoke this lambda.  */
210     [&] (ULONGEST)
211       {
212       },
213
214     /* read_core_file_mappings will invoke this lambda for each mapping
215        that it finds.  */
216     [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs,
217          const char *filename, const bfd_build_id *build_id)
218       {
219         /* Architecture-specific read_core_mapping methods are expected to
220            weed out non-file-backed mappings.  */
221         gdb_assert (filename != nullptr);
222
223         struct bfd *bfd = bfd_map[filename];
224         if (bfd == nullptr)
225           {
226             /* Use exec_file_find() to do sysroot expansion.  It'll
227                also strip the potential sysroot "target:" prefix.  If
228                there is no sysroot, an equivalent (possibly more
229                canonical) pathname will be provided.  */
230             gdb::unique_xmalloc_ptr<char> expanded_fname
231               = exec_file_find (filename, NULL);
232             if (expanded_fname == nullptr)
233               {
234                 m_core_unavailable_mappings.emplace_back (start, end - start);
235                 /* Print just one warning per path.  */
236                 if (unavailable_paths.insert (filename).second)
237                   warning (_("Can't open file %s during file-backed mapping "
238                              "note processing"),
239                            filename);
240                 return;
241               }
242
243             bfd = bfd_map[filename] = bfd_openr (expanded_fname.get (),
244                                                  "binary");
245
246             if (bfd == nullptr || !bfd_check_format (bfd, bfd_object))
247               {
248                 m_core_unavailable_mappings.emplace_back (start, end - start);
249                 /* If we get here, there's a good chance that it's due to
250                    an internal error.  We issue a warning instead of an
251                    internal error because of the possibility that the
252                    file was removed in between checking for its
253                    existence during the expansion in exec_file_find()
254                    and the calls to bfd_openr() / bfd_check_format(). 
255                    Output both the path from the core file note along
256                    with its expansion to make debugging this problem
257                    easier.  */
258                 warning (_("Can't open file %s which was expanded to %s "
259                            "during file-backed mapping note processing"),
260                          filename, expanded_fname.get ());
261                 if (bfd != nullptr)
262                   bfd_close (bfd);
263                 return;
264               }
265             /* Ensure that the bfd will be closed when core_bfd is closed. 
266                This can be checked before/after a core file detach via
267                "maint info bfds".  */
268             gdb_bfd_record_inclusion (core_bfd, bfd);
269           }
270
271         /* Make new BFD section.  All sections have the same name,
272            which is permitted by bfd_make_section_anyway().  */
273         asection *sec = bfd_make_section_anyway (bfd, "load");
274         if (sec == nullptr)
275           error (_("Can't make section"));
276         sec->filepos = file_ofs;
277         bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS);
278         bfd_set_section_size (sec, end - start);
279         bfd_set_section_vma (sec, start);
280         bfd_set_section_lma (sec, start);
281         bfd_set_section_alignment (sec, 2);
282
283         /* Set target_section fields.  */
284         m_core_file_mappings.emplace_back (start, end, sec);
285       });
286
287   normalize_mem_ranges (&m_core_unavailable_mappings);
288 }
289
290 /* An arbitrary identifier for the core inferior.  */
291 #define CORELOW_PID 1
292
293 /* Close the core target.  */
294
295 void
296 core_target::close ()
297 {
298   if (core_bfd)
299     {
300       switch_to_no_thread ();    /* Avoid confusion from thread
301                                     stuff.  */
302       exit_inferior_silent (current_inferior ());
303
304       /* Clear out solib state while the bfd is still open.  See
305          comments in clear_solib in solib.c.  */
306       clear_solib ();
307
308       current_program_space->cbfd.reset (nullptr);
309     }
310
311   /* Core targets are heap-allocated (see core_target_open), so here
312      we delete ourselves.  */
313   delete this;
314 }
315
316 /* Look for sections whose names start with `.reg/' so that we can
317    extract the list of threads in a core file.  */
318
319 static void
320 add_to_thread_list (asection *asect, asection *reg_sect)
321 {
322   int core_tid;
323   int pid, lwpid;
324   bool fake_pid_p = false;
325   struct inferior *inf;
326
327   if (!startswith (bfd_section_name (asect), ".reg/"))
328     return;
329
330   core_tid = atoi (bfd_section_name (asect) + 5);
331
332   pid = bfd_core_file_pid (core_bfd);
333   if (pid == 0)
334     {
335       fake_pid_p = true;
336       pid = CORELOW_PID;
337     }
338
339   lwpid = core_tid;
340
341   inf = current_inferior ();
342   if (inf->pid == 0)
343     {
344       inferior_appeared (inf, pid);
345       inf->fake_pid_p = fake_pid_p;
346     }
347
348   ptid_t ptid (pid, lwpid);
349
350   thread_info *thr = add_thread (inf->process_target (), ptid);
351
352 /* Warning, Will Robinson, looking at BFD private data! */
353
354   if (reg_sect != NULL
355       && asect->filepos == reg_sect->filepos)   /* Did we find .reg?  */
356     switch_to_thread (thr);                     /* Yes, make it current.  */
357 }
358
359 /* Issue a message saying we have no core to debug, if FROM_TTY.  */
360
361 static void
362 maybe_say_no_core_file_now (int from_tty)
363 {
364   if (from_tty)
365     printf_filtered (_("No core file now.\n"));
366 }
367
368 /* Backward compatibility with old way of specifying core files.  */
369
370 void
371 core_file_command (const char *filename, int from_tty)
372 {
373   dont_repeat ();               /* Either way, seems bogus.  */
374
375   if (filename == NULL)
376     {
377       if (core_bfd != NULL)
378         {
379           target_detach (current_inferior (), from_tty);
380           gdb_assert (core_bfd == NULL);
381         }
382       else
383         maybe_say_no_core_file_now (from_tty);
384     }
385   else
386     core_target_open (filename, from_tty);
387 }
388
389 /* Locate (and load) an executable file (and symbols) given the core file
390    BFD ABFD.  */
391
392 static void
393 locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
394 {
395   const bfd_build_id *build_id = build_id_bfd_get (abfd);
396   if (build_id == nullptr)
397     return;
398
399   gdb_bfd_ref_ptr execbfd
400     = build_id_to_exec_bfd (build_id->size, build_id->data);
401
402   if (execbfd != nullptr)
403     {
404       exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
405       symbol_file_add_main (bfd_get_filename (execbfd.get ()),
406                             symfile_add_flag (from_tty ? SYMFILE_VERBOSE : 0));
407     }
408 }
409
410 /* See gdbcore.h.  */
411
412 void
413 core_target_open (const char *arg, int from_tty)
414 {
415   const char *p;
416   int siggy;
417   int scratch_chan;
418   int flags;
419
420   target_preopen (from_tty);
421   if (!arg)
422     {
423       if (core_bfd)
424         error (_("No core file specified.  (Use `detach' "
425                  "to stop debugging a core file.)"));
426       else
427         error (_("No core file specified."));
428     }
429
430   gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
431   if (strlen (filename.get ()) != 0
432       && !IS_ABSOLUTE_PATH (filename.get ()))
433     filename = gdb_abspath (filename.get ());
434
435   flags = O_BINARY | O_LARGEFILE;
436   if (write_files)
437     flags |= O_RDWR;
438   else
439     flags |= O_RDONLY;
440   scratch_chan = gdb_open_cloexec (filename.get (), flags, 0).release ();
441   if (scratch_chan < 0)
442     perror_with_name (filename.get ());
443
444   gdb_bfd_ref_ptr temp_bfd (gdb_bfd_fopen (filename.get (), gnutarget,
445                                            write_files ? FOPEN_RUB : FOPEN_RB,
446                                            scratch_chan));
447   if (temp_bfd == NULL)
448     perror_with_name (filename.get ());
449
450   if (!bfd_check_format (temp_bfd.get (), bfd_core))
451     {
452       /* Do it after the err msg */
453       /* FIXME: should be checking for errors from bfd_close (for one
454          thing, on error it does not free all the storage associated
455          with the bfd).  */
456       error (_("\"%s\" is not a core dump: %s"),
457              filename.get (), bfd_errmsg (bfd_get_error ()));
458     }
459
460   current_program_space->cbfd = std::move (temp_bfd);
461
462   core_target *target = new core_target ();
463
464   /* Own the target until it is successfully pushed.  */
465   target_ops_up target_holder (target);
466
467   validate_files ();
468
469   /* If we have no exec file, try to set the architecture from the
470      core file.  We don't do this unconditionally since an exec file
471      typically contains more information that helps us determine the
472      architecture than a core file.  */
473   if (!current_program_space->exec_bfd ())
474     set_gdbarch_from_file (core_bfd);
475
476   current_inferior ()->push_target (std::move (target_holder));
477
478   switch_to_no_thread ();
479
480   /* Need to flush the register cache (and the frame cache) from a
481      previous debug session.  If inferior_ptid ends up the same as the
482      last debug session --- e.g., b foo; run; gcore core1; step; gcore
483      core2; core core1; core core2 --- then there's potential for
484      get_current_regcache to return the cached regcache of the
485      previous session, and the frame cache being stale.  */
486   registers_changed ();
487
488   /* Build up thread list from BFD sections, and possibly set the
489      current thread to the .reg/NN section matching the .reg
490      section.  */
491   asection *reg_sect = bfd_get_section_by_name (core_bfd, ".reg");
492   for (asection *sect : gdb_bfd_sections (core_bfd))
493     add_to_thread_list (sect, reg_sect);
494
495   if (inferior_ptid == null_ptid)
496     {
497       /* Either we found no .reg/NN section, and hence we have a
498          non-threaded core (single-threaded, from gdb's perspective),
499          or for some reason add_to_thread_list couldn't determine
500          which was the "main" thread.  The latter case shouldn't
501          usually happen, but we're dealing with input here, which can
502          always be broken in different ways.  */
503       thread_info *thread = first_thread_of_inferior (current_inferior ());
504
505       if (thread == NULL)
506         {
507           inferior_appeared (current_inferior (), CORELOW_PID);
508           thread = add_thread_silent (target, ptid_t (CORELOW_PID));
509         }
510
511       switch_to_thread (thread);
512     }
513
514   if (current_program_space->exec_bfd () == nullptr)
515     locate_exec_from_corefile_build_id (core_bfd, from_tty);
516
517   post_create_inferior (from_tty);
518
519   /* Now go through the target stack looking for threads since there
520      may be a thread_stratum target loaded on top of target core by
521      now.  The layer above should claim threads found in the BFD
522      sections.  */
523   try
524     {
525       target_update_thread_list ();
526     }
527
528   catch (const gdb_exception_error &except)
529     {
530       exception_print (gdb_stderr, except);
531     }
532
533   p = bfd_core_file_failing_command (core_bfd);
534   if (p)
535     printf_filtered (_("Core was generated by `%s'.\n"), p);
536
537   /* Clearing any previous state of convenience variables.  */
538   clear_exit_convenience_vars ();
539
540   siggy = bfd_core_file_failing_signal (core_bfd);
541   if (siggy > 0)
542     {
543       gdbarch *core_gdbarch = target->core_gdbarch ();
544
545       /* If we don't have a CORE_GDBARCH to work with, assume a native
546          core (map gdb_signal from host signals).  If we do have
547          CORE_GDBARCH to work with, but no gdb_signal_from_target
548          implementation for that gdbarch, as a fallback measure,
549          assume the host signal mapping.  It'll be correct for native
550          cores, but most likely incorrect for cross-cores.  */
551       enum gdb_signal sig = (core_gdbarch != NULL
552                              && gdbarch_gdb_signal_from_target_p (core_gdbarch)
553                              ? gdbarch_gdb_signal_from_target (core_gdbarch,
554                                                                siggy)
555                              : gdb_signal_from_host (siggy));
556
557       printf_filtered (_("Program terminated with signal %s, %s"),
558                        gdb_signal_to_name (sig), gdb_signal_to_string (sig));
559       if (gdbarch_report_signal_info_p (core_gdbarch))
560         gdbarch_report_signal_info (core_gdbarch, current_uiout, sig);
561       printf_filtered (_(".\n"));
562
563       /* Set the value of the internal variable $_exitsignal,
564          which holds the signal uncaught by the inferior.  */
565       set_internalvar_integer (lookup_internalvar ("_exitsignal"),
566                                siggy);
567     }
568
569   /* Fetch all registers from core file.  */
570   target_fetch_registers (get_current_regcache (), -1);
571
572   /* Now, set up the frame cache, and print the top of stack.  */
573   reinit_frame_cache ();
574   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
575
576   /* Current thread should be NUM 1 but the user does not know that.
577      If a program is single threaded gdb in general does not mention
578      anything about threads.  That is why the test is >= 2.  */
579   if (thread_count (target) >= 2)
580     {
581       try
582         {
583           thread_command (NULL, from_tty);
584         }
585       catch (const gdb_exception_error &except)
586         {
587           exception_print (gdb_stderr, except);
588         }
589     }
590 }
591
592 void
593 core_target::detach (inferior *inf, int from_tty)
594 {
595   /* Note that 'this' is dangling after this call.  unpush_target
596      closes the target, and our close implementation deletes
597      'this'.  */
598   inf->unpush_target (this);
599
600   /* Clear the register cache and the frame cache.  */
601   registers_changed ();
602   reinit_frame_cache ();
603   maybe_say_no_core_file_now (from_tty);
604 }
605
606 /* Try to retrieve registers from a section in core_bfd, and supply
607    them to REGSET.
608
609    If ptid's lwp member is zero, do the single-threaded
610    thing: look for a section named NAME.  If ptid's lwp
611    member is non-zero, do the multi-threaded thing: look for a section
612    named "NAME/LWP", where LWP is the shortest ASCII decimal
613    representation of ptid's lwp member.
614
615    HUMAN_NAME is a human-readable name for the kind of registers the
616    NAME section contains, for use in error messages.
617
618    If REQUIRED is true, print an error if the core file doesn't have a
619    section by the appropriate name.  Otherwise, just do nothing.  */
620
621 void
622 core_target::get_core_register_section (struct regcache *regcache,
623                                         const struct regset *regset,
624                                         const char *name,
625                                         int section_min_size,
626                                         const char *human_name,
627                                         bool required)
628 {
629   gdb_assert (regset != nullptr);
630
631   struct bfd_section *section;
632   bfd_size_type size;
633   bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
634
635   thread_section_name section_name (name, regcache->ptid ());
636
637   section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
638   if (! section)
639     {
640       if (required)
641         warning (_("Couldn't find %s registers in core file."),
642                  human_name);
643       return;
644     }
645
646   size = bfd_section_size (section);
647   if (size < section_min_size)
648     {
649       warning (_("Section `%s' in core file too small."),
650                section_name.c_str ());
651       return;
652     }
653   if (size != section_min_size && !variable_size_section)
654     {
655       warning (_("Unexpected size of section `%s' in core file."),
656                section_name.c_str ());
657     }
658
659   gdb::byte_vector contents (size);
660   if (!bfd_get_section_contents (core_bfd, section, contents.data (),
661                                  (file_ptr) 0, size))
662     {
663       warning (_("Couldn't read %s registers from `%s' section in core file."),
664                human_name, section_name.c_str ());
665       return;
666     }
667
668   regset->supply_regset (regset, regcache, -1, contents.data (), size);
669 }
670
671 /* Data passed to gdbarch_iterate_over_regset_sections's callback.  */
672 struct get_core_registers_cb_data
673 {
674   core_target *target;
675   struct regcache *regcache;
676 };
677
678 /* Callback for get_core_registers that handles a single core file
679    register note section. */
680
681 static void
682 get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
683                        const struct regset *regset,
684                        const char *human_name, void *cb_data)
685 {
686   gdb_assert (regset != nullptr);
687
688   auto *data = (get_core_registers_cb_data *) cb_data;
689   bool required = false;
690   bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
691
692   if (!variable_size_section)
693     gdb_assert (supply_size == collect_size);
694
695   if (strcmp (sect_name, ".reg") == 0)
696     {
697       required = true;
698       if (human_name == NULL)
699         human_name = "general-purpose";
700     }
701   else if (strcmp (sect_name, ".reg2") == 0)
702     {
703       if (human_name == NULL)
704         human_name = "floating-point";
705     }
706
707   data->target->get_core_register_section (data->regcache, regset, sect_name,
708                                            supply_size, human_name, required);
709 }
710
711 /* Get the registers out of a core file.  This is the machine-
712    independent part.  Fetch_core_registers is the machine-dependent
713    part, typically implemented in the xm-file for each
714    architecture.  */
715
716 /* We just get all the registers, so we don't use regno.  */
717
718 void
719 core_target::fetch_registers (struct regcache *regcache, int regno)
720 {
721   if (!(m_core_gdbarch != nullptr
722         && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)))
723     {
724       fprintf_filtered (gdb_stderr,
725                      "Can't fetch registers from this type of core file\n");
726       return;
727     }
728
729   struct gdbarch *gdbarch = regcache->arch ();
730   get_core_registers_cb_data data = { this, regcache };
731   gdbarch_iterate_over_regset_sections (gdbarch,
732                                         get_core_registers_cb,
733                                         (void *) &data, NULL);
734
735   /* Mark all registers not found in the core as unavailable.  */
736   for (int i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
737     if (regcache->get_register_status (i) == REG_UNKNOWN)
738       regcache->raw_supply (i, NULL);
739 }
740
741 void
742 core_target::files_info ()
743 {
744   print_section_info (&m_core_section_table, core_bfd);
745 }
746 \f
747 /* Helper method for core_target::xfer_partial.  */
748
749 enum target_xfer_status
750 core_target::xfer_memory_via_mappings (gdb_byte *readbuf,
751                                        const gdb_byte *writebuf,
752                                        ULONGEST offset, ULONGEST len,
753                                        ULONGEST *xfered_len)
754 {
755   enum target_xfer_status xfer_status;
756
757   xfer_status = (section_table_xfer_memory_partial
758                    (readbuf, writebuf,
759                     offset, len, xfered_len,
760                     m_core_file_mappings));
761
762   if (xfer_status == TARGET_XFER_OK || m_core_unavailable_mappings.empty ())
763     return xfer_status;
764
765   /* There are instances - e.g. when debugging within a docker
766      container using the AUFS storage driver - where the pathnames
767      obtained from the note section are incorrect.  Despite the path
768      being wrong, just knowing the start and end addresses of the
769      mappings is still useful; we can attempt an access of the file
770      stratum constrained to the address ranges corresponding to the
771      unavailable mappings.  */
772
773   ULONGEST memaddr = offset;
774   ULONGEST memend = offset + len;
775
776   for (const auto &mr : m_core_unavailable_mappings)
777     {
778       if (address_in_mem_range (memaddr, &mr))
779         {
780           if (!address_in_mem_range (memend, &mr))
781             len = mr.start + mr.length - memaddr;
782
783           xfer_status = this->beneath ()->xfer_partial (TARGET_OBJECT_MEMORY,
784                                                         NULL,
785                                                         readbuf,
786                                                         writebuf,
787                                                         offset,
788                                                         len,
789                                                         xfered_len);
790           break;
791         }
792     }
793
794   return xfer_status;
795 }
796
797 enum target_xfer_status
798 core_target::xfer_partial (enum target_object object, const char *annex,
799                            gdb_byte *readbuf, const gdb_byte *writebuf,
800                            ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
801 {
802   switch (object)
803     {
804     case TARGET_OBJECT_MEMORY:
805       {
806         enum target_xfer_status xfer_status;
807
808         /* Try accessing memory contents from core file data,
809            restricting consideration to those sections for which
810            the BFD section flag SEC_HAS_CONTENTS is set.  */
811         auto has_contents_cb = [] (const struct target_section *s)
812           {
813             return ((s->the_bfd_section->flags & SEC_HAS_CONTENTS) != 0);
814           };
815         xfer_status = section_table_xfer_memory_partial
816                         (readbuf, writebuf,
817                          offset, len, xfered_len,
818                          m_core_section_table,
819                          has_contents_cb);
820         if (xfer_status == TARGET_XFER_OK)
821           return TARGET_XFER_OK;
822
823         /* Check file backed mappings.  If they're available, use
824            core file provided mappings (e.g. from .note.linuxcore.file
825            or the like) as this should provide a more accurate
826            result.  If not, check the stratum beneath us, which should
827            be the file stratum.
828
829            We also check unavailable mappings due to Docker/AUFS driver
830            issues.  */
831         if (!m_core_file_mappings.empty ()
832             || !m_core_unavailable_mappings.empty ())
833           {
834             xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
835                                                     len, xfered_len);
836           }
837         else
838           xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf,
839                                                         writebuf, offset, len,
840                                                         xfered_len);
841         if (xfer_status == TARGET_XFER_OK)
842           return TARGET_XFER_OK;
843
844         /* Finally, attempt to access data in core file sections with
845            no contents.  These will typically read as all zero.  */
846         auto no_contents_cb = [&] (const struct target_section *s)
847           {
848             return !has_contents_cb (s);
849           };
850         xfer_status = section_table_xfer_memory_partial
851                         (readbuf, writebuf,
852                          offset, len, xfered_len,
853                          m_core_section_table,
854                          no_contents_cb);
855
856         return xfer_status;
857       }
858     case TARGET_OBJECT_AUXV:
859       if (readbuf)
860         {
861           /* When the aux vector is stored in core file, BFD
862              represents this with a fake section called ".auxv".  */
863
864           struct bfd_section *section;
865           bfd_size_type size;
866
867           section = bfd_get_section_by_name (core_bfd, ".auxv");
868           if (section == NULL)
869             return TARGET_XFER_E_IO;
870
871           size = bfd_section_size (section);
872           if (offset >= size)
873             return TARGET_XFER_EOF;
874           size -= offset;
875           if (size > len)
876             size = len;
877
878           if (size == 0)
879             return TARGET_XFER_EOF;
880           if (!bfd_get_section_contents (core_bfd, section, readbuf,
881                                          (file_ptr) offset, size))
882             {
883               warning (_("Couldn't read NT_AUXV note in core file."));
884               return TARGET_XFER_E_IO;
885             }
886
887           *xfered_len = (ULONGEST) size;
888           return TARGET_XFER_OK;
889         }
890       return TARGET_XFER_E_IO;
891
892     case TARGET_OBJECT_WCOOKIE:
893       if (readbuf)
894         {
895           /* When the StackGhost cookie is stored in core file, BFD
896              represents this with a fake section called
897              ".wcookie".  */
898
899           struct bfd_section *section;
900           bfd_size_type size;
901
902           section = bfd_get_section_by_name (core_bfd, ".wcookie");
903           if (section == NULL)
904             return TARGET_XFER_E_IO;
905
906           size = bfd_section_size (section);
907           if (offset >= size)
908             return TARGET_XFER_EOF;
909           size -= offset;
910           if (size > len)
911             size = len;
912
913           if (size == 0)
914             return TARGET_XFER_EOF;
915           if (!bfd_get_section_contents (core_bfd, section, readbuf,
916                                          (file_ptr) offset, size))
917             {
918               warning (_("Couldn't read StackGhost cookie in core file."));
919               return TARGET_XFER_E_IO;
920             }
921
922           *xfered_len = (ULONGEST) size;
923           return TARGET_XFER_OK;
924
925         }
926       return TARGET_XFER_E_IO;
927
928     case TARGET_OBJECT_LIBRARIES:
929       if (m_core_gdbarch != nullptr
930           && gdbarch_core_xfer_shared_libraries_p (m_core_gdbarch))
931         {
932           if (writebuf)
933             return TARGET_XFER_E_IO;
934           else
935             {
936               *xfered_len = gdbarch_core_xfer_shared_libraries (m_core_gdbarch,
937                                                                 readbuf,
938                                                                 offset, len);
939
940               if (*xfered_len == 0)
941                 return TARGET_XFER_EOF;
942               else
943                 return TARGET_XFER_OK;
944             }
945         }
946       /* FALL THROUGH */
947
948     case TARGET_OBJECT_LIBRARIES_AIX:
949       if (m_core_gdbarch != nullptr
950           && gdbarch_core_xfer_shared_libraries_aix_p (m_core_gdbarch))
951         {
952           if (writebuf)
953             return TARGET_XFER_E_IO;
954           else
955             {
956               *xfered_len
957                 = gdbarch_core_xfer_shared_libraries_aix (m_core_gdbarch,
958                                                           readbuf, offset,
959                                                           len);
960
961               if (*xfered_len == 0)
962                 return TARGET_XFER_EOF;
963               else
964                 return TARGET_XFER_OK;
965             }
966         }
967       /* FALL THROUGH */
968
969     case TARGET_OBJECT_SIGNAL_INFO:
970       if (readbuf)
971         {
972           if (m_core_gdbarch != nullptr
973               && gdbarch_core_xfer_siginfo_p (m_core_gdbarch))
974             {
975               LONGEST l = gdbarch_core_xfer_siginfo  (m_core_gdbarch, readbuf,
976                                                       offset, len);
977
978               if (l >= 0)
979                 {
980                   *xfered_len = l;
981                   if (l == 0)
982                     return TARGET_XFER_EOF;
983                   else
984                     return TARGET_XFER_OK;
985                 }
986             }
987         }
988       return TARGET_XFER_E_IO;
989
990     default:
991       return this->beneath ()->xfer_partial (object, annex, readbuf,
992                                              writebuf, offset, len,
993                                              xfered_len);
994     }
995 }
996
997 \f
998
999 /* Okay, let's be honest: threads gleaned from a core file aren't
1000    exactly lively, are they?  On the other hand, if we don't claim
1001    that each & every one is alive, then we don't get any of them
1002    to appear in an "info thread" command, which is quite a useful
1003    behaviour.
1004  */
1005 bool
1006 core_target::thread_alive (ptid_t ptid)
1007 {
1008   return true;
1009 }
1010
1011 /* Ask the current architecture what it knows about this core file.
1012    That will be used, in turn, to pick a better architecture.  This
1013    wrapper could be avoided if targets got a chance to specialize
1014    core_target.  */
1015
1016 const struct target_desc *
1017 core_target::read_description ()
1018 {
1019   /* If the core file contains a target description note then we will use
1020      that in preference to anything else.  */
1021   bfd_size_type tdesc_note_size = 0;
1022   struct bfd_section *tdesc_note_section
1023     = bfd_get_section_by_name (core_bfd, ".gdb-tdesc");
1024   if (tdesc_note_section != nullptr)
1025     tdesc_note_size = bfd_section_size (tdesc_note_section);
1026   if (tdesc_note_size > 0)
1027     {
1028       gdb::char_vector contents (tdesc_note_size + 1);
1029       if (bfd_get_section_contents (core_bfd, tdesc_note_section,
1030                                     contents.data (), (file_ptr) 0,
1031                                     tdesc_note_size))
1032         {
1033           /* Ensure we have a null terminator.  */
1034           contents[tdesc_note_size] = '\0';
1035           const struct target_desc *result
1036             = string_read_description_xml (contents.data ());
1037           if (result != nullptr)
1038             return result;
1039         }
1040     }
1041
1042   if (m_core_gdbarch && gdbarch_core_read_description_p (m_core_gdbarch))
1043     {
1044       const struct target_desc *result;
1045
1046       result = gdbarch_core_read_description (m_core_gdbarch, this, core_bfd);
1047       if (result != NULL)
1048         return result;
1049     }
1050
1051   return this->beneath ()->read_description ();
1052 }
1053
1054 std::string
1055 core_target::pid_to_str (ptid_t ptid)
1056 {
1057   struct inferior *inf;
1058   int pid;
1059
1060   /* The preferred way is to have a gdbarch/OS specific
1061      implementation.  */
1062   if (m_core_gdbarch != nullptr
1063       && gdbarch_core_pid_to_str_p (m_core_gdbarch))
1064     return gdbarch_core_pid_to_str (m_core_gdbarch, ptid);
1065
1066   /* Otherwise, if we don't have one, we'll just fallback to
1067      "process", with normal_pid_to_str.  */
1068
1069   /* Try the LWPID field first.  */
1070   pid = ptid.lwp ();
1071   if (pid != 0)
1072     return normal_pid_to_str (ptid_t (pid));
1073
1074   /* Otherwise, this isn't a "threaded" core -- use the PID field, but
1075      only if it isn't a fake PID.  */
1076   inf = find_inferior_ptid (this, ptid);
1077   if (inf != NULL && !inf->fake_pid_p)
1078     return normal_pid_to_str (ptid);
1079
1080   /* No luck.  We simply don't have a valid PID to print.  */
1081   return "<main task>";
1082 }
1083
1084 const char *
1085 core_target::thread_name (struct thread_info *thr)
1086 {
1087   if (m_core_gdbarch != nullptr
1088       && gdbarch_core_thread_name_p (m_core_gdbarch))
1089     return gdbarch_core_thread_name (m_core_gdbarch, thr);
1090   return NULL;
1091 }
1092
1093 bool
1094 core_target::has_memory ()
1095 {
1096   return (core_bfd != NULL);
1097 }
1098
1099 bool
1100 core_target::has_stack ()
1101 {
1102   return (core_bfd != NULL);
1103 }
1104
1105 bool
1106 core_target::has_registers ()
1107 {
1108   return (core_bfd != NULL);
1109 }
1110
1111 /* Implement the to_info_proc method.  */
1112
1113 bool
1114 core_target::info_proc (const char *args, enum info_proc_what request)
1115 {
1116   struct gdbarch *gdbarch = get_current_arch ();
1117
1118   /* Since this is the core file target, call the 'core_info_proc'
1119      method on gdbarch, not 'info_proc'.  */
1120   if (gdbarch_core_info_proc_p (gdbarch))
1121     gdbarch_core_info_proc (gdbarch, args, request);
1122
1123   return true;
1124 }
1125
1126 /* Get a pointer to the current core target.  If not connected to a
1127    core target, return NULL.  */
1128
1129 static core_target *
1130 get_current_core_target ()
1131 {
1132   target_ops *proc_target = current_inferior ()->process_target ();
1133   return dynamic_cast<core_target *> (proc_target);
1134 }
1135
1136 /* Display file backed mappings from core file.  */
1137
1138 void
1139 core_target::info_proc_mappings (struct gdbarch *gdbarch)
1140 {
1141   if (!m_core_file_mappings.empty ())
1142     {
1143       printf_filtered (_("Mapped address spaces:\n\n"));
1144       if (gdbarch_addr_bit (gdbarch) == 32)
1145         {
1146           printf_filtered ("\t%10s %10s %10s %10s %s\n",
1147                            "Start Addr",
1148                            "  End Addr",
1149                            "      Size", "    Offset", "objfile");
1150         }
1151       else
1152         {
1153           printf_filtered ("  %18s %18s %10s %10s %s\n",
1154                            "Start Addr",
1155                            "  End Addr",
1156                            "      Size", "    Offset", "objfile");
1157         }
1158     }
1159
1160   for (const target_section &tsp : m_core_file_mappings)
1161     {
1162       ULONGEST start = tsp.addr;
1163       ULONGEST end = tsp.endaddr;
1164       ULONGEST file_ofs = tsp.the_bfd_section->filepos;
1165       const char *filename = bfd_get_filename (tsp.the_bfd_section->owner);
1166
1167       if (gdbarch_addr_bit (gdbarch) == 32)
1168         printf_filtered ("\t%10s %10s %10s %10s %s\n",
1169                          paddress (gdbarch, start),
1170                          paddress (gdbarch, end),
1171                          hex_string (end - start),
1172                          hex_string (file_ofs),
1173                          filename);
1174       else
1175         printf_filtered ("  %18s %18s %10s %10s %s\n",
1176                          paddress (gdbarch, start),
1177                          paddress (gdbarch, end),
1178                          hex_string (end - start),
1179                          hex_string (file_ofs),
1180                          filename);
1181     }
1182 }
1183
1184 /* Implement "maintenance print core-file-backed-mappings" command.  
1185
1186    If mappings are loaded, the results should be similar to the
1187    mappings shown by "info proc mappings".  This command is mainly a
1188    debugging tool for GDB developers to make sure that the expected
1189    mappings are present after loading a core file.  For Linux, the
1190    output provided by this command will be very similar (if not
1191    identical) to that provided by "info proc mappings".  This is not
1192    necessarily the case for other OSes which might provide
1193    more/different information in the "info proc mappings" output.  */
1194
1195 static void
1196 maintenance_print_core_file_backed_mappings (const char *args, int from_tty)
1197 {
1198   core_target *targ = get_current_core_target ();
1199   if (targ != nullptr)
1200     targ->info_proc_mappings (targ->core_gdbarch ());
1201 }
1202
1203 void _initialize_corelow ();
1204 void
1205 _initialize_corelow ()
1206 {
1207   add_target (core_target_info, core_target_open, filename_completer);
1208   add_cmd ("core-file-backed-mappings", class_maintenance,
1209            maintenance_print_core_file_backed_mappings,
1210            _("Print core file's file-backed mappings."),
1211            &maintenanceprintlist);
1212 }
This page took 0.094539 seconds and 4 git commands to generate.