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