1 /* Core dump and executable file functions below target vector, for GDB.
3 Copyright (C) 1986-2023 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
21 #include "arch-utils.h"
24 #include "frame.h" /* required by inferior.h */
31 #include "process-stratum-target.h"
33 #include "gdbthread.h"
38 #include "readline/tilde.h"
41 #include "filenames.h"
42 #include "progspace.h"
45 #include "completer.h"
46 #include "gdbsupport/filestuff.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>
54 #include "xml-tdesc.h"
61 /* The core file target. */
63 static const target_info core_target_info
= {
65 N_("Local core dump file"),
66 N_("Use a core file as a target.\n\
67 Specify the filename of the core file.")
70 class core_target final
: public process_stratum_target
75 const target_info
&info () const override
76 { return core_target_info
; }
78 void close () override
;
79 void detach (inferior
*, int) override
;
80 void fetch_registers (struct regcache
*, int) override
;
82 enum target_xfer_status
xfer_partial (enum target_object object
,
85 const gdb_byte
*writebuf
,
86 ULONGEST offset
, ULONGEST len
,
87 ULONGEST
*xfered_len
) override
;
88 void files_info () override
;
90 bool thread_alive (ptid_t ptid
) override
;
91 const struct target_desc
*read_description () override
;
93 std::string
pid_to_str (ptid_t
) override
;
95 const char *thread_name (struct thread_info
*) override
;
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; }
103 bool info_proc (const char *, enum info_proc_what
) override
;
105 bool supports_memory_tagging () override
;
107 /* Core file implementation of fetch_memtags. Fetch the memory tags from
109 bool fetch_memtags (CORE_ADDR address
, size_t len
,
110 gdb::byte_vector
&tags
, int type
) override
;
114 /* Getter, see variable definition. */
115 struct gdbarch
*core_gdbarch ()
117 return m_core_gdbarch
;
120 /* See definition. */
121 void get_core_register_section (struct regcache
*regcache
,
122 const struct regset
*regset
,
124 int section_min_size
,
125 const char *human_name
,
128 /* See definition. */
129 void info_proc_mappings (struct gdbarch
*gdbarch
);
131 private: /* per-core data */
133 /* Get rid of the core inferior. */
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
142 target_section_table m_core_section_table
;
144 /* File-backed address space mappings: some core files include
145 information about memory mapped files. */
146 target_section_table m_core_file_mappings
;
148 /* Unavailable mappings. These correspond to pathnames which either
149 weren't found or could not be opened. Knowing these addresses can
151 std::vector
<mem_range
> m_core_unavailable_mappings
;
153 /* Build m_core_file_mappings. Called from the constructor. */
154 void build_file_mappings ();
156 /* Helper method for xfer_partial. */
157 enum target_xfer_status
xfer_memory_via_mappings (gdb_byte
*readbuf
,
158 const gdb_byte
*writebuf
,
161 ULONGEST
*xfered_len
);
163 /* FIXME: kettenis/20031023: Eventually this field should
165 struct gdbarch
*m_core_gdbarch
= NULL
;
168 core_target::core_target ()
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
);
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 ();
178 if (tdesc
!= nullptr)
180 struct gdbarch_info info
;
181 info
.abfd
= core_bfd
;
182 info
.target_desc
= tdesc
;
183 m_core_gdbarch
= gdbarch_find_by_info (info
);
187 || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch
))
188 error (_("\"%s\": Core file format not supported"),
189 bfd_get_filename (core_bfd
));
191 /* Find the data section */
192 m_core_section_table
= build_section_table (core_bfd
);
194 build_file_mappings ();
197 /* Construct the target_section_table for file-backed mappings if
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
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. */
212 core_target::build_file_mappings ()
214 std::unordered_map
<std::string
, struct bfd
*> bfd_map
;
215 std::unordered_set
<std::string
> unavailable_paths
;
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
,
221 /* After determining the number of mappings, read_core_file_mappings
222 will invoke this lambda. */
227 /* read_core_file_mappings will invoke this lambda for each mapping
229 [&] (int num
, ULONGEST start
, ULONGEST end
, ULONGEST file_ofs
,
230 const char *filename
, const bfd_build_id
*build_id
)
232 /* Architecture-specific read_core_mapping methods are expected to
233 weed out non-file-backed mappings. */
234 gdb_assert (filename
!= nullptr);
236 struct bfd
*bfd
= bfd_map
[filename
];
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
);
246 if (expanded_fname
== nullptr && build_id
!= nullptr)
247 debuginfod_exec_query (build_id
->data
, build_id
->size
,
248 filename
, &expanded_fname
);
250 if (expanded_fname
== nullptr)
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 "
261 bfd
= bfd_map
[filename
] = bfd_openr (expanded_fname
.get (),
264 if (bfd
== nullptr || !bfd_check_format (bfd
, bfd_object
))
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
276 warning (_("Can't open file %s which was expanded to %s "
277 "during file-backed mapping note processing"),
278 filename
, expanded_fname
.get ());
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
);
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");
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);
301 /* Set target_section fields. */
302 m_core_file_mappings
.emplace_back (start
, end
, sec
);
304 /* If this is a bfd of a shared library, record its soname
306 if (build_id
!= nullptr)
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
);
316 normalize_mem_ranges (&m_core_unavailable_mappings
);
319 /* An arbitrary identifier for the core inferior. */
320 #define CORELOW_PID 1
323 core_target::clear_core ()
327 switch_to_no_thread (); /* Avoid confusion from thread
329 exit_inferior_silent (current_inferior ());
331 /* Clear out solib state while the bfd is still open. See
332 comments in clear_solib in solib.c. */
335 current_program_space
->cbfd
.reset (nullptr);
339 /* Close the core target. */
342 core_target::close ()
346 /* Core targets are heap-allocated (see core_target_open), so here
347 we delete ourselves. */
351 /* Look for sections whose names start with `.reg/' so that we can
352 extract the list of threads in a core file. */
355 add_to_thread_list (asection
*asect
, asection
*reg_sect
)
359 bool fake_pid_p
= false;
360 struct inferior
*inf
;
362 if (!startswith (bfd_section_name (asect
), ".reg/"))
365 core_tid
= atoi (bfd_section_name (asect
) + 5);
367 pid
= bfd_core_file_pid (core_bfd
);
376 inf
= current_inferior ();
379 inferior_appeared (inf
, pid
);
380 inf
->fake_pid_p
= fake_pid_p
;
383 ptid_t
ptid (pid
, lwpid
);
385 thread_info
*thr
= add_thread (inf
->process_target (), ptid
);
387 /* Warning, Will Robinson, looking at BFD private data! */
390 && asect
->filepos
== reg_sect
->filepos
) /* Did we find .reg? */
391 switch_to_thread (thr
); /* Yes, make it current. */
394 /* Issue a message saying we have no core to debug, if FROM_TTY. */
397 maybe_say_no_core_file_now (int from_tty
)
400 gdb_printf (_("No core file now.\n"));
403 /* Backward compatibility with old way of specifying core files. */
406 core_file_command (const char *filename
, int from_tty
)
408 dont_repeat (); /* Either way, seems bogus. */
410 if (filename
== NULL
)
412 if (core_bfd
!= NULL
)
414 target_detach (current_inferior (), from_tty
);
415 gdb_assert (core_bfd
== NULL
);
418 maybe_say_no_core_file_now (from_tty
);
421 core_target_open (filename
, from_tty
);
424 /* Locate (and load) an executable file (and symbols) given the core file
428 locate_exec_from_corefile_build_id (bfd
*abfd
, int from_tty
)
430 const bfd_build_id
*build_id
= build_id_bfd_get (abfd
);
431 if (build_id
== nullptr)
434 gdb_bfd_ref_ptr execbfd
435 = build_id_to_exec_bfd (build_id
->size
, build_id
->data
);
437 if (execbfd
== nullptr)
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
);
446 execbfd
= gdb_bfd_open (execpath
.get (), gnutarget
);
448 if (execbfd
== nullptr)
449 warning (_("\"%s\" from debuginfod cannot be opened as bfd: %s"),
451 gdb_bfd_errmsg (bfd_get_error (), nullptr).c_str ());
452 else if (!build_id_verify (execbfd
.get (), build_id
->size
,
454 execbfd
.reset (nullptr);
458 if (execbfd
!= nullptr)
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));
469 core_target_open (const char *arg
, int from_tty
)
476 target_preopen (from_tty
);
480 error (_("No core file specified. (Use `detach' "
481 "to stop debugging a core file.)"));
483 error (_("No core file specified."));
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 ());
491 flags
= O_BINARY
| O_LARGEFILE
;
496 scratch_chan
= gdb_open_cloexec (filename
.get (), flags
, 0).release ();
497 if (scratch_chan
< 0)
498 perror_with_name (filename
.get ());
500 gdb_bfd_ref_ptr
temp_bfd (gdb_bfd_fopen (filename
.get (), gnutarget
,
501 write_files
? FOPEN_RUB
: FOPEN_RB
,
503 if (temp_bfd
== NULL
)
504 perror_with_name (filename
.get ());
506 if (!bfd_check_format (temp_bfd
.get (), bfd_core
))
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
512 error (_("\"%s\" is not a core dump: %s"),
513 filename
.get (), bfd_errmsg (bfd_get_error ()));
516 current_program_space
->cbfd
= std::move (temp_bfd
);
518 core_target
*target
= new core_target ();
520 /* Own the target until it is successfully pushed. */
521 target_ops_up
target_holder (target
);
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
);
532 current_inferior ()->push_target (std::move (target_holder
));
534 switch_to_no_thread ();
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 ();
544 /* Build up thread list from BFD sections, and possibly set the
545 current thread to the .reg/NN section matching the .reg
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
);
551 if (inferior_ptid
== null_ptid
)
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 ());
563 inferior_appeared (current_inferior (), CORELOW_PID
);
564 thread
= add_thread_silent (target
, ptid_t (CORELOW_PID
));
567 switch_to_thread (thread
);
570 if (current_program_space
->exec_bfd () == nullptr)
571 locate_exec_from_corefile_build_id (core_bfd
, from_tty
);
573 post_create_inferior (from_tty
);
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
581 target_update_thread_list ();
584 catch (const gdb_exception_error
&except
)
586 exception_print (gdb_stderr
, except
);
589 p
= bfd_core_file_failing_command (core_bfd
);
591 gdb_printf (_("Core was generated by `%s'.\n"), p
);
593 /* Clearing any previous state of convenience variables. */
594 clear_exit_convenience_vars ();
596 siggy
= bfd_core_file_failing_signal (core_bfd
);
599 gdbarch
*core_gdbarch
= target
->core_gdbarch ();
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
,
611 : gdb_signal_from_host (siggy
));
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"));
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"),
625 /* Fetch all registers from core file. */
626 target_fetch_registers (get_current_regcache (), -1);
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);
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)
639 thread_command (NULL
, from_tty
);
641 catch (const gdb_exception_error
&except
)
643 exception_print (gdb_stderr
, except
);
649 core_target::detach (inferior
*inf
, int from_tty
)
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. */
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);
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
);
668 /* Try to retrieve registers from a section in core_bfd, and supply
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.
677 HUMAN_NAME is a human-readable name for the kind of registers the
678 NAME section contains, for use in error messages.
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. */
684 core_target::get_core_register_section (struct regcache
*regcache
,
685 const struct regset
*regset
,
687 int section_min_size
,
688 const char *human_name
,
691 gdb_assert (regset
!= nullptr);
693 struct bfd_section
*section
;
695 bool variable_size_section
= (regset
->flags
& REGSET_VARIABLE_SIZE
);
697 thread_section_name
section_name (name
, regcache
->ptid ());
699 section
= bfd_get_section_by_name (core_bfd
, section_name
.c_str ());
703 warning (_("Couldn't find %s registers in core file."),
708 size
= bfd_section_size (section
);
709 if (size
< section_min_size
)
711 warning (_("Section `%s' in core file too small."),
712 section_name
.c_str ());
715 if (size
!= section_min_size
&& !variable_size_section
)
717 warning (_("Unexpected size of section `%s' in core file."),
718 section_name
.c_str ());
721 gdb::byte_vector
contents (size
);
722 if (!bfd_get_section_contents (core_bfd
, section
, contents
.data (),
725 warning (_("Couldn't read %s registers from `%s' section in core file."),
726 human_name
, section_name
.c_str ());
730 regset
->supply_regset (regset
, regcache
, -1, contents
.data (), size
);
733 /* Data passed to gdbarch_iterate_over_regset_sections's callback. */
734 struct get_core_registers_cb_data
737 struct regcache
*regcache
;
740 /* Callback for get_core_registers that handles a single core file
741 register note section. */
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
)
748 gdb_assert (regset
!= nullptr);
750 auto *data
= (get_core_registers_cb_data
*) cb_data
;
751 bool required
= false;
752 bool variable_size_section
= (regset
->flags
& REGSET_VARIABLE_SIZE
);
754 if (!variable_size_section
)
755 gdb_assert (supply_size
== collect_size
);
757 if (strcmp (sect_name
, ".reg") == 0)
760 if (human_name
== NULL
)
761 human_name
= "general-purpose";
763 else if (strcmp (sect_name
, ".reg2") == 0)
765 if (human_name
== NULL
)
766 human_name
= "floating-point";
769 data
->target
->get_core_register_section (data
->regcache
, regset
, sect_name
,
770 supply_size
, human_name
, required
);
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
778 /* We just get all the registers, so we don't use regno. */
781 core_target::fetch_registers (struct regcache
*regcache
, int regno
)
783 if (!(m_core_gdbarch
!= nullptr
784 && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch
)))
786 gdb_printf (gdb_stderr
,
787 "Can't fetch registers from this type of core file\n");
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
);
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
);
804 core_target::files_info ()
806 print_section_info (&m_core_section_table
, core_bfd
);
809 /* Helper method for core_target::xfer_partial. */
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
)
817 enum target_xfer_status xfer_status
;
819 xfer_status
= (section_table_xfer_memory_partial
821 offset
, len
, xfered_len
,
822 m_core_file_mappings
));
824 if (xfer_status
== TARGET_XFER_OK
|| m_core_unavailable_mappings
.empty ())
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. */
835 ULONGEST memaddr
= offset
;
836 ULONGEST memend
= offset
+ len
;
838 for (const auto &mr
: m_core_unavailable_mappings
)
840 if (address_in_mem_range (memaddr
, &mr
))
842 if (!address_in_mem_range (memend
, &mr
))
843 len
= mr
.start
+ mr
.length
- memaddr
;
845 xfer_status
= this->beneath ()->xfer_partial (TARGET_OBJECT_MEMORY
,
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
)
866 case TARGET_OBJECT_MEMORY
:
868 enum target_xfer_status xfer_status
;
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
)
875 return ((s
->the_bfd_section
->flags
& SEC_HAS_CONTENTS
) != 0);
877 xfer_status
= section_table_xfer_memory_partial
879 offset
, len
, xfered_len
,
880 m_core_section_table
,
882 if (xfer_status
== TARGET_XFER_OK
)
883 return TARGET_XFER_OK
;
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
891 We also check unavailable mappings due to Docker/AUFS driver
893 if (!m_core_file_mappings
.empty ()
894 || !m_core_unavailable_mappings
.empty ())
896 xfer_status
= xfer_memory_via_mappings (readbuf
, writebuf
, offset
,
900 xfer_status
= this->beneath ()->xfer_partial (object
, annex
, readbuf
,
901 writebuf
, offset
, len
,
903 if (xfer_status
== TARGET_XFER_OK
)
904 return TARGET_XFER_OK
;
906 /* Finally, attempt to access data in core file sections with
907 no contents. These will typically read as all zero. */
908 auto no_contents_cb
= [&] (const struct target_section
*s
)
910 return !has_contents_cb (s
);
912 xfer_status
= section_table_xfer_memory_partial
914 offset
, len
, xfered_len
,
915 m_core_section_table
,
920 case TARGET_OBJECT_AUXV
:
923 /* When the aux vector is stored in core file, BFD
924 represents this with a fake section called ".auxv". */
926 struct bfd_section
*section
;
929 section
= bfd_get_section_by_name (core_bfd
, ".auxv");
931 return TARGET_XFER_E_IO
;
933 size
= bfd_section_size (section
);
935 return TARGET_XFER_EOF
;
941 return TARGET_XFER_EOF
;
942 if (!bfd_get_section_contents (core_bfd
, section
, readbuf
,
943 (file_ptr
) offset
, size
))
945 warning (_("Couldn't read NT_AUXV note in core file."));
946 return TARGET_XFER_E_IO
;
949 *xfered_len
= (ULONGEST
) size
;
950 return TARGET_XFER_OK
;
952 return TARGET_XFER_E_IO
;
954 case TARGET_OBJECT_WCOOKIE
:
957 /* When the StackGhost cookie is stored in core file, BFD
958 represents this with a fake section called
961 struct bfd_section
*section
;
964 section
= bfd_get_section_by_name (core_bfd
, ".wcookie");
966 return TARGET_XFER_E_IO
;
968 size
= bfd_section_size (section
);
970 return TARGET_XFER_EOF
;
976 return TARGET_XFER_EOF
;
977 if (!bfd_get_section_contents (core_bfd
, section
, readbuf
,
978 (file_ptr
) offset
, size
))
980 warning (_("Couldn't read StackGhost cookie in core file."));
981 return TARGET_XFER_E_IO
;
984 *xfered_len
= (ULONGEST
) size
;
985 return TARGET_XFER_OK
;
988 return TARGET_XFER_E_IO
;
990 case TARGET_OBJECT_LIBRARIES
:
991 if (m_core_gdbarch
!= nullptr
992 && gdbarch_core_xfer_shared_libraries_p (m_core_gdbarch
))
995 return TARGET_XFER_E_IO
;
998 *xfered_len
= gdbarch_core_xfer_shared_libraries (m_core_gdbarch
,
1002 if (*xfered_len
== 0)
1003 return TARGET_XFER_EOF
;
1005 return TARGET_XFER_OK
;
1008 return TARGET_XFER_E_IO
;
1010 case TARGET_OBJECT_LIBRARIES_AIX
:
1011 if (m_core_gdbarch
!= nullptr
1012 && gdbarch_core_xfer_shared_libraries_aix_p (m_core_gdbarch
))
1015 return TARGET_XFER_E_IO
;
1019 = gdbarch_core_xfer_shared_libraries_aix (m_core_gdbarch
,
1023 if (*xfered_len
== 0)
1024 return TARGET_XFER_EOF
;
1026 return TARGET_XFER_OK
;
1029 return TARGET_XFER_E_IO
;
1031 case TARGET_OBJECT_SIGNAL_INFO
:
1034 if (m_core_gdbarch
!= nullptr
1035 && gdbarch_core_xfer_siginfo_p (m_core_gdbarch
))
1037 LONGEST l
= gdbarch_core_xfer_siginfo (m_core_gdbarch
, readbuf
,
1044 return TARGET_XFER_EOF
;
1046 return TARGET_XFER_OK
;
1050 return TARGET_XFER_E_IO
;
1053 return this->beneath ()->xfer_partial (object
, annex
, readbuf
,
1054 writebuf
, offset
, len
,
1061 /* Okay, let's be honest: threads gleaned from a core file aren't
1062 exactly lively, are they? On the other hand, if we don't claim
1063 that each & every one is alive, then we don't get any of them
1064 to appear in an "info thread" command, which is quite a useful
1068 core_target::thread_alive (ptid_t ptid
)
1073 /* Ask the current architecture what it knows about this core file.
1074 That will be used, in turn, to pick a better architecture. This
1075 wrapper could be avoided if targets got a chance to specialize
1078 const struct target_desc
*
1079 core_target::read_description ()
1081 /* If the core file contains a target description note then we will use
1082 that in preference to anything else. */
1083 bfd_size_type tdesc_note_size
= 0;
1084 struct bfd_section
*tdesc_note_section
1085 = bfd_get_section_by_name (core_bfd
, ".gdb-tdesc");
1086 if (tdesc_note_section
!= nullptr)
1087 tdesc_note_size
= bfd_section_size (tdesc_note_section
);
1088 if (tdesc_note_size
> 0)
1090 gdb::char_vector
contents (tdesc_note_size
+ 1);
1091 if (bfd_get_section_contents (core_bfd
, tdesc_note_section
,
1092 contents
.data (), (file_ptr
) 0,
1095 /* Ensure we have a null terminator. */
1096 contents
[tdesc_note_size
] = '\0';
1097 const struct target_desc
*result
1098 = string_read_description_xml (contents
.data ());
1099 if (result
!= nullptr)
1104 if (m_core_gdbarch
&& gdbarch_core_read_description_p (m_core_gdbarch
))
1106 const struct target_desc
*result
;
1108 result
= gdbarch_core_read_description (m_core_gdbarch
, this, core_bfd
);
1113 return this->beneath ()->read_description ();
1117 core_target::pid_to_str (ptid_t ptid
)
1119 struct inferior
*inf
;
1122 /* The preferred way is to have a gdbarch/OS specific
1124 if (m_core_gdbarch
!= nullptr
1125 && gdbarch_core_pid_to_str_p (m_core_gdbarch
))
1126 return gdbarch_core_pid_to_str (m_core_gdbarch
, ptid
);
1128 /* Otherwise, if we don't have one, we'll just fallback to
1129 "process", with normal_pid_to_str. */
1131 /* Try the LWPID field first. */
1134 return normal_pid_to_str (ptid_t (pid
));
1136 /* Otherwise, this isn't a "threaded" core -- use the PID field, but
1137 only if it isn't a fake PID. */
1138 inf
= find_inferior_ptid (this, ptid
);
1139 if (inf
!= NULL
&& !inf
->fake_pid_p
)
1140 return normal_pid_to_str (ptid
);
1142 /* No luck. We simply don't have a valid PID to print. */
1143 return "<main task>";
1147 core_target::thread_name (struct thread_info
*thr
)
1149 if (m_core_gdbarch
!= nullptr
1150 && gdbarch_core_thread_name_p (m_core_gdbarch
))
1151 return gdbarch_core_thread_name (m_core_gdbarch
, thr
);
1156 core_target::has_memory ()
1158 return (core_bfd
!= NULL
);
1162 core_target::has_stack ()
1164 return (core_bfd
!= NULL
);
1168 core_target::has_registers ()
1170 return (core_bfd
!= NULL
);
1173 /* Implement the to_info_proc method. */
1176 core_target::info_proc (const char *args
, enum info_proc_what request
)
1178 struct gdbarch
*gdbarch
= get_current_arch ();
1180 /* Since this is the core file target, call the 'core_info_proc'
1181 method on gdbarch, not 'info_proc'. */
1182 if (gdbarch_core_info_proc_p (gdbarch
))
1183 gdbarch_core_info_proc (gdbarch
, args
, request
);
1188 /* Implementation of the "supports_memory_tagging" target_ops method. */
1191 core_target::supports_memory_tagging ()
1193 /* Look for memory tag sections. If they exist, that means this core file
1194 supports memory tagging. */
1196 return (bfd_get_section_by_name (core_bfd
, "memtag") != nullptr);
1199 /* Implementation of the "fetch_memtags" target_ops method. */
1202 core_target::fetch_memtags (CORE_ADDR address
, size_t len
,
1203 gdb::byte_vector
&tags
, int type
)
1205 struct gdbarch
*gdbarch
= target_gdbarch ();
1207 /* Make sure we have a way to decode the memory tag notes. */
1208 if (!gdbarch_decode_memtag_section_p (gdbarch
))
1209 error (_("gdbarch_decode_memtag_section not implemented for this "
1212 memtag_section_info info
;
1213 info
.memtag_section
= nullptr;
1215 while (get_next_core_memtag_section (core_bfd
, info
.memtag_section
,
1218 size_t adjusted_length
1219 = (address
+ len
< info
.end_address
) ? len
: (info
.end_address
- address
);
1221 /* Decode the memory tag note and return the tags. */
1222 gdb::byte_vector tags_read
1223 = gdbarch_decode_memtag_section (gdbarch
, info
.memtag_section
, type
,
1224 address
, adjusted_length
);
1226 /* Transfer over the tags that have been read. */
1227 tags
.insert (tags
.end (), tags_read
.begin (), tags_read
.end ());
1229 /* ADDRESS + LEN may cross the boundaries of a particular memory tag
1230 segment. Check if we need to fetch tags from a different section. */
1231 if (!tags_read
.empty () && (address
+ len
) < info
.end_address
)
1234 /* There are more tags to fetch. Update ADDRESS and LEN. */
1235 len
-= (info
.end_address
- address
);
1236 address
= info
.end_address
;
1242 /* Get a pointer to the current core target. If not connected to a
1243 core target, return NULL. */
1245 static core_target
*
1246 get_current_core_target ()
1248 target_ops
*proc_target
= current_inferior ()->process_target ();
1249 return dynamic_cast<core_target
*> (proc_target
);
1252 /* Display file backed mappings from core file. */
1255 core_target::info_proc_mappings (struct gdbarch
*gdbarch
)
1257 if (!m_core_file_mappings
.empty ())
1259 gdb_printf (_("Mapped address spaces:\n\n"));
1260 if (gdbarch_addr_bit (gdbarch
) == 32)
1262 gdb_printf ("\t%10s %10s %10s %10s %s\n",
1265 " Size", " Offset", "objfile");
1269 gdb_printf (" %18s %18s %10s %10s %s\n",
1272 " Size", " Offset", "objfile");
1276 for (const target_section
&tsp
: m_core_file_mappings
)
1278 ULONGEST start
= tsp
.addr
;
1279 ULONGEST end
= tsp
.endaddr
;
1280 ULONGEST file_ofs
= tsp
.the_bfd_section
->filepos
;
1281 const char *filename
= bfd_get_filename (tsp
.the_bfd_section
->owner
);
1283 if (gdbarch_addr_bit (gdbarch
) == 32)
1284 gdb_printf ("\t%10s %10s %10s %10s %s\n",
1285 paddress (gdbarch
, start
),
1286 paddress (gdbarch
, end
),
1287 hex_string (end
- start
),
1288 hex_string (file_ofs
),
1291 gdb_printf (" %18s %18s %10s %10s %s\n",
1292 paddress (gdbarch
, start
),
1293 paddress (gdbarch
, end
),
1294 hex_string (end
- start
),
1295 hex_string (file_ofs
),
1300 /* Implement "maintenance print core-file-backed-mappings" command.
1302 If mappings are loaded, the results should be similar to the
1303 mappings shown by "info proc mappings". This command is mainly a
1304 debugging tool for GDB developers to make sure that the expected
1305 mappings are present after loading a core file. For Linux, the
1306 output provided by this command will be very similar (if not
1307 identical) to that provided by "info proc mappings". This is not
1308 necessarily the case for other OSes which might provide
1309 more/different information in the "info proc mappings" output. */
1312 maintenance_print_core_file_backed_mappings (const char *args
, int from_tty
)
1314 core_target
*targ
= get_current_core_target ();
1315 if (targ
!= nullptr)
1316 targ
->info_proc_mappings (targ
->core_gdbarch ());
1319 void _initialize_corelow ();
1321 _initialize_corelow ()
1323 add_target (core_target_info
, core_target_open
, filename_completer
);
1324 add_cmd ("core-file-backed-mappings", class_maintenance
,
1325 maintenance_print_core_file_backed_mappings
,
1326 _("Print core file's file-backed mappings."),
1327 &maintenanceprintlist
);