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