Add skip_fortran_tests to more Fortran testcases
[deliverable/binutils-gdb.git] / gdb / corelow.c
CommitLineData
c906108c 1/* Core dump and executable file functions below target vector, for GDB.
4646aa9d 2
b811d2c2 3 Copyright (C) 1986-2020 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
d55e5aa6 21#include "arch-utils.h"
4de283e4
TT
22#include <signal.h>
23#include <fcntl.h>
24#include "frame.h" /* required by inferior.h */
d55e5aa6
TT
25#include "inferior.h"
26#include "infrun.h"
4de283e4
TT
27#include "symtab.h"
28#include "command.h"
29#include "bfd.h"
30#include "target.h"
d55e5aa6 31#include "process-stratum-target.h"
4de283e4
TT
32#include "gdbcore.h"
33#include "gdbthread.h"
4e052eda 34#include "regcache.h"
0e24ac5d 35#include "regset.h"
d55e5aa6 36#include "symfile.h"
4de283e4 37#include "exec.h"
e0eac551 38#include "readline/tilde.h"
4de283e4 39#include "solib.h"
db082f59 40#include "solist.h"
4de283e4
TT
41#include "filenames.h"
42#include "progspace.h"
43#include "objfiles.h"
44#include "gdb_bfd.h"
45#include "completer.h"
268a13a5 46#include "gdbsupport/filestuff.h"
aa2d5a42 47#include "build-id.h"
ff8577f6 48#include "gdbsupport/pathstuff.h"
db082f59 49#include <unordered_map>
09c2f5d4 50#include "gdbcmd.h"
8e860359 51
ee28ca0f
AC
52#ifndef O_LARGEFILE
53#define O_LARGEFILE 0
54#endif
55
f6ac5f3d
PA
56/* The core file target. */
57
d9f719f1
PA
58static const target_info core_target_info = {
59 "core",
60 N_("Local core dump file"),
590042fc
PW
61 N_("Use a core file as a target.\n\
62Specify the filename of the core file.")
d9f719f1
PA
63};
64
3b3dac9b 65class core_target final : public process_stratum_target
f6ac5f3d
PA
66{
67public:
15244507
PA
68 core_target ();
69 ~core_target () override;
f6ac5f3d 70
d9f719f1
PA
71 const target_info &info () const override
72 { return core_target_info; }
f6ac5f3d 73
f6ac5f3d
PA
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
57810aa7 86 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
87 const struct target_desc *read_description () override;
88
a068643d 89 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
90
91 const char *thread_name (struct thread_info *) override;
92
2735d421 93 bool has_all_memory () override { return true; }
57810aa7
PA
94 bool has_memory () override;
95 bool has_stack () override;
96 bool has_registers () override;
5018ce90 97 bool has_execution (inferior *inf) override { return false; }
f3d11a9a 98
f6ac5f3d 99 bool info_proc (const char *, enum info_proc_what) override;
f6ac5f3d 100
15244507
PA
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,
dbd534fe 113 int section_min_size,
15244507
PA
114 const char *human_name,
115 bool required);
116
09c2f5d4
KB
117 /* See definition. */
118 void info_proc_mappings (struct gdbarch *gdbarch);
119
15244507
PA
120private: /* 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
db082f59
KB
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 /* Build m_core_file_mappings. Called from the constructor. */
135 void build_file_mappings ();
136
15244507
PA
137 /* FIXME: kettenis/20031023: Eventually this field should
138 disappear. */
139 struct gdbarch *m_core_gdbarch = NULL;
140};
c906108c 141
15244507
PA
142core_target::core_target ()
143{
15244507 144 m_core_gdbarch = gdbarch_from_bfd (core_bfd);
2acceee2 145
6ba0a321
CB
146 if (!m_core_gdbarch
147 || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
148 error (_("\"%s\": Core file format not supported"),
149 bfd_get_filename (core_bfd));
2acceee2 150
15244507
PA
151 /* Find the data section */
152 if (build_section_table (core_bfd,
153 &m_core_section_table.sections,
154 &m_core_section_table.sections_end))
155 error (_("\"%s\": Can't find sections: %s"),
156 bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
db082f59
KB
157
158 build_file_mappings ();
15244507 159}
0e24ac5d 160
15244507
PA
161core_target::~core_target ()
162{
163 xfree (m_core_section_table.sections);
db082f59
KB
164 xfree (m_core_file_mappings.sections);
165}
166
167/* Construct the target_section_table for file-backed mappings if
168 they exist.
169
170 For each unique path in the note, we'll open a BFD with a bfd
171 target of "binary". This is an unstructured bfd target upon which
172 we'll impose a structure from the mappings in the architecture-specific
173 mappings note. A BFD section is allocated and initialized for each
174 file-backed mapping.
175
176 We take care to not share already open bfds with other parts of
177 GDB; in particular, we don't want to add new sections to existing
178 BFDs. We do, however, ensure that the BFDs that we allocate here
179 will go away (be deallocated) when the core target is detached. */
180
181void
182core_target::build_file_mappings ()
183{
184 std::unordered_map<std::string, struct bfd *> bfd_map;
185
186 /* See linux_read_core_file_mappings() in linux-tdep.c for an example
187 read_core_file_mappings method. */
188 gdbarch_read_core_file_mappings (m_core_gdbarch, core_bfd,
189
190 /* After determining the number of mappings, read_core_file_mappings
191 will invoke this lambda which allocates target_section storage for
192 the mappings. */
193 [&] (ULONGEST count)
194 {
195 m_core_file_mappings.sections = XNEWVEC (struct target_section, count);
196 m_core_file_mappings.sections_end = m_core_file_mappings.sections;
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, const void *other)
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 warning (_("Can't open file %s during file-backed mapping "
220 "note processing"),
b5582ab7 221 filename);
db082f59
KB
222 return;
223 }
224
225 bfd = bfd_map[filename] = bfd_openr (expanded_fname.get (),
226 "binary");
227
228 if (bfd == nullptr || !bfd_check_format (bfd, bfd_object))
229 {
230 /* If we get here, there's a good chance that it's due to
231 an internal error. We issue a warning instead of an
232 internal error because of the possibility that the
233 file was removed in between checking for its
234 existence during the expansion in exec_file_find()
235 and the calls to bfd_openr() / bfd_check_format().
236 Output both the path from the core file note along
237 with its expansion to make debugging this problem
238 easier. */
239 warning (_("Can't open file %s which was expanded to %s "
240 "during file-backed mapping note processing"),
241 filename, expanded_fname.get ());
242 if (bfd != nullptr)
243 bfd_close (bfd);
244 return;
245 }
246 /* Ensure that the bfd will be closed when core_bfd is closed.
247 This can be checked before/after a core file detach via
248 "maint info bfds". */
249 gdb_bfd_record_inclusion (core_bfd, bfd);
250 }
251
252 /* Make new BFD section. All sections have the same name,
253 which is permitted by bfd_make_section_anyway(). */
254 asection *sec = bfd_make_section_anyway (bfd, "load");
255 if (sec == nullptr)
256 error (_("Can't make section"));
257 sec->filepos = file_ofs;
258 bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS);
259 bfd_set_section_size (sec, end - start);
260 bfd_set_section_vma (sec, start);
261 bfd_set_section_lma (sec, start);
262 bfd_set_section_alignment (sec, 2);
263
264 /* Set target_section fields. */
265 struct target_section *ts = m_core_file_mappings.sections_end++;
266 ts->addr = start;
267 ts->endaddr = end;
268 ts->owner = nullptr;
269 ts->the_bfd_section = sec;
270 });
15244507 271}
0e24ac5d 272
4efb68b1 273static void add_to_thread_list (bfd *, asection *, void *);
c906108c 274
7f9f62ba
PA
275/* An arbitrary identifier for the core inferior. */
276#define CORELOW_PID 1
277
15244507 278/* Close the core target. */
c906108c 279
15244507
PA
280void
281core_target::close ()
c906108c 282{
c906108c
SS
283 if (core_bfd)
284 {
60db1b85
PA
285 switch_to_no_thread (); /* Avoid confusion from thread
286 stuff. */
00431a78 287 exit_inferior_silent (current_inferior ());
c906108c 288
aff410f1
MS
289 /* Clear out solib state while the bfd is still open. See
290 comments in clear_solib in solib.c. */
a77053c2 291 clear_solib ();
7a292a7a 292
06333fea 293 current_program_space->cbfd.reset (nullptr);
c906108c 294 }
c906108c 295
15244507
PA
296 /* Core targets are heap-allocated (see core_target_open), so here
297 we delete ourselves. */
298 delete this;
74b7792f
AC
299}
300
aff410f1
MS
301/* Look for sections whose names start with `.reg/' so that we can
302 extract the list of threads in a core file. */
c906108c
SS
303
304static void
4efb68b1 305add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
c906108c 306{
3cdd9356
PA
307 int core_tid;
308 int pid, lwpid;
c906108c 309 asection *reg_sect = (asection *) reg_sect_arg;
9ab8741a 310 bool fake_pid_p = false;
88f38a04 311 struct inferior *inf;
c906108c 312
fd361982 313 if (!startswith (bfd_section_name (asect), ".reg/"))
c906108c
SS
314 return;
315
fd361982 316 core_tid = atoi (bfd_section_name (asect) + 5);
c906108c 317
261b8d08
PA
318 pid = bfd_core_file_pid (core_bfd);
319 if (pid == 0)
3cdd9356 320 {
9ab8741a 321 fake_pid_p = true;
3cdd9356 322 pid = CORELOW_PID;
3cdd9356 323 }
0de3b513 324
261b8d08
PA
325 lwpid = core_tid;
326
88f38a04
PA
327 inf = current_inferior ();
328 if (inf->pid == 0)
329 {
330 inferior_appeared (inf, pid);
331 inf->fake_pid_p = fake_pid_p;
332 }
3cdd9356 333
60db1b85 334 ptid_t ptid (pid, lwpid);
3cdd9356 335
60db1b85 336 thread_info *thr = add_thread (inf->process_target (), ptid);
c906108c
SS
337
338/* Warning, Will Robinson, looking at BFD private data! */
339
340 if (reg_sect != NULL
aff410f1 341 && asect->filepos == reg_sect->filepos) /* Did we find .reg? */
60db1b85 342 switch_to_thread (thr); /* Yes, make it current. */
c906108c
SS
343}
344
451953fa
PA
345/* Issue a message saying we have no core to debug, if FROM_TTY. */
346
347static void
348maybe_say_no_core_file_now (int from_tty)
349{
350 if (from_tty)
351 printf_filtered (_("No core file now.\n"));
352}
353
30baf67b 354/* Backward compatibility with old way of specifying core files. */
451953fa
PA
355
356void
357core_file_command (const char *filename, int from_tty)
358{
359 dont_repeat (); /* Either way, seems bogus. */
360
361 if (filename == NULL)
362 {
363 if (core_bfd != NULL)
364 {
365 target_detach (current_inferior (), from_tty);
366 gdb_assert (core_bfd == NULL);
367 }
368 else
369 maybe_say_no_core_file_now (from_tty);
370 }
371 else
372 core_target_open (filename, from_tty);
373}
374
aa2d5a42
KS
375/* Locate (and load) an executable file (and symbols) given the core file
376 BFD ABFD. */
377
378static void
379locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
380{
381 const bfd_build_id *build_id = build_id_bfd_get (abfd);
382 if (build_id == nullptr)
383 return;
384
385 gdb_bfd_ref_ptr execbfd
386 = build_id_to_exec_bfd (build_id->size, build_id->data);
387
388 if (execbfd != nullptr)
389 {
390 exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
391 symbol_file_add_main (bfd_get_filename (execbfd.get ()),
392 symfile_add_flag (from_tty ? SYMFILE_VERBOSE : 0));
393 }
394}
395
d9f719f1 396/* See gdbcore.h. */
c906108c 397
f6ac5f3d 398void
d9f719f1 399core_target_open (const char *arg, int from_tty)
c906108c
SS
400{
401 const char *p;
402 int siggy;
c906108c 403 int scratch_chan;
ee28ca0f 404 int flags;
c906108c
SS
405
406 target_preopen (from_tty);
014f9477 407 if (!arg)
c906108c 408 {
8a3fe4f8 409 if (core_bfd)
3e43a32a
MS
410 error (_("No core file specified. (Use `detach' "
411 "to stop debugging a core file.)"));
8a3fe4f8
AC
412 else
413 error (_("No core file specified."));
c906108c
SS
414 }
415
ee0c3293
TT
416 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
417 if (!IS_ABSOLUTE_PATH (filename.get ()))
ff8577f6 418 filename = gdb_abspath (filename.get ());
c906108c 419
ee28ca0f
AC
420 flags = O_BINARY | O_LARGEFILE;
421 if (write_files)
422 flags |= O_RDWR;
423 else
424 flags |= O_RDONLY;
ee0c3293 425 scratch_chan = gdb_open_cloexec (filename.get (), flags, 0);
c906108c 426 if (scratch_chan < 0)
ee0c3293 427 perror_with_name (filename.get ());
c906108c 428
ee0c3293 429 gdb_bfd_ref_ptr temp_bfd (gdb_bfd_fopen (filename.get (), gnutarget,
192b62ce
TT
430 write_files ? FOPEN_RUB : FOPEN_RB,
431 scratch_chan));
c906108c 432 if (temp_bfd == NULL)
ee0c3293 433 perror_with_name (filename.get ());
c906108c 434
6ba0a321 435 if (!bfd_check_format (temp_bfd.get (), bfd_core))
c906108c
SS
436 {
437 /* Do it after the err msg */
aff410f1
MS
438 /* FIXME: should be checking for errors from bfd_close (for one
439 thing, on error it does not free all the storage associated
440 with the bfd). */
8a3fe4f8 441 error (_("\"%s\" is not a core dump: %s"),
ee0c3293 442 filename.get (), bfd_errmsg (bfd_get_error ()));
c906108c
SS
443 }
444
06333fea 445 current_program_space->cbfd = std::move (temp_bfd);
c906108c 446
15244507 447 core_target *target = new core_target ();
0e24ac5d 448
15244507
PA
449 /* Own the target until it is successfully pushed. */
450 target_ops_up target_holder (target);
2acceee2 451
c906108c
SS
452 validate_files ();
453
2f1b5984
MK
454 /* If we have no exec file, try to set the architecture from the
455 core file. We don't do this unconditionally since an exec file
456 typically contains more information that helps us determine the
457 architecture than a core file. */
458 if (!exec_bfd)
459 set_gdbarch_from_file (core_bfd);
cbda0a99 460
dea57a62 461 push_target (std::move (target_holder));
c906108c 462
60db1b85 463 switch_to_no_thread ();
0de3b513 464
739fc47a
PA
465 /* Need to flush the register cache (and the frame cache) from a
466 previous debug session. If inferior_ptid ends up the same as the
467 last debug session --- e.g., b foo; run; gcore core1; step; gcore
468 core2; core core1; core core2 --- then there's potential for
469 get_current_regcache to return the cached regcache of the
470 previous session, and the frame cache being stale. */
471 registers_changed ();
472
0de3b513
PA
473 /* Build up thread list from BFD sections, and possibly set the
474 current thread to the .reg/NN section matching the .reg
aff410f1 475 section. */
0de3b513
PA
476 bfd_map_over_sections (core_bfd, add_to_thread_list,
477 bfd_get_section_by_name (core_bfd, ".reg"));
478
d7e15655 479 if (inferior_ptid == null_ptid)
3cdd9356
PA
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. */
00431a78 487 thread_info *thread = first_thread_of_inferior (current_inferior ());
c5504eaf 488
3cdd9356
PA
489 if (thread == NULL)
490 {
c45ceae0 491 inferior_appeared (current_inferior (), CORELOW_PID);
60db1b85 492 thread = add_thread_silent (target, ptid_t (CORELOW_PID));
3cdd9356 493 }
60db1b85
PA
494
495 switch_to_thread (thread);
3cdd9356
PA
496 }
497
aa2d5a42
KS
498 if (exec_bfd == nullptr)
499 locate_exec_from_corefile_build_id (core_bfd, from_tty);
500
15244507 501 post_create_inferior (target, from_tty);
959b8724 502
0de3b513
PA
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. */
a70b8144 507 try
8e7b59a5 508 {
e8032dde 509 target_update_thread_list ();
8e7b59a5
KS
510 }
511
230d2906 512 catch (const gdb_exception_error &except)
492d29ea
PA
513 {
514 exception_print (gdb_stderr, except);
515 }
0de3b513 516
c906108c
SS
517 p = bfd_core_file_failing_command (core_bfd);
518 if (p)
a3f17187 519 printf_filtered (_("Core was generated by `%s'.\n"), p);
c906108c 520
0c557179
SDJ
521 /* Clearing any previous state of convenience variables. */
522 clear_exit_convenience_vars ();
523
c906108c
SS
524 siggy = bfd_core_file_failing_signal (core_bfd);
525 if (siggy > 0)
423ec54c 526 {
15244507
PA
527 gdbarch *core_gdbarch = target->core_gdbarch ();
528
22203bbf 529 /* If we don't have a CORE_GDBARCH to work with, assume a native
1f8cf220
PA
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. */
2ea28649 535 enum gdb_signal sig = (core_gdbarch != NULL
1f8cf220
PA
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));
423ec54c 540
ad97bfc5 541 printf_filtered (_("Program terminated with signal %s, %s"),
2d503272 542 gdb_signal_to_name (sig), gdb_signal_to_string (sig));
ad97bfc5
JB
543 if (gdbarch_report_signal_info_p (core_gdbarch))
544 gdbarch_report_signal_info (core_gdbarch, current_uiout, sig);
545 printf_filtered (_(".\n"));
0c557179
SDJ
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);
423ec54c 551 }
c906108c 552
87ab71f0
PA
553 /* Fetch all registers from core file. */
554 target_fetch_registers (get_current_regcache (), -1);
c906108c 555
87ab71f0
PA
556 /* Now, set up the frame cache, and print the top of stack. */
557 reinit_frame_cache ();
08d72866 558 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
f0e8c4c5
JK
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. */
5b6d1e4f 563 if (thread_count (target) >= 2)
f0e8c4c5 564 {
a70b8144 565 try
f0e8c4c5
JK
566 {
567 thread_command (NULL, from_tty);
568 }
230d2906 569 catch (const gdb_exception_error &except)
492d29ea
PA
570 {
571 exception_print (gdb_stderr, except);
572 }
f0e8c4c5 573 }
c906108c
SS
574}
575
f6ac5f3d
PA
576void
577core_target::detach (inferior *inf, int from_tty)
c906108c 578{
15244507
PA
579 /* Note that 'this' is dangling after this call. unpush_target
580 closes the target, and our close implementation deletes
581 'this'. */
f6ac5f3d 582 unpush_target (this);
15244507 583
66452beb
PW
584 /* Clear the register cache and the frame cache. */
585 registers_changed ();
c906108c 586 reinit_frame_cache ();
451953fa 587 maybe_say_no_core_file_now (from_tty);
c906108c
SS
588}
589
de57eccd 590/* Try to retrieve registers from a section in core_bfd, and supply
6ba0a321 591 them to REGSET.
de57eccd 592
11a33714
SM
593 If ptid's lwp member is zero, do the single-threaded
594 thing: look for a section named NAME. If ptid's lwp
0de3b513
PA
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
11a33714 597 representation of ptid's lwp member.
de57eccd
JM
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
15244507
PA
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. */
de57eccd 604
15244507
PA
605void
606core_target::get_core_register_section (struct regcache *regcache,
607 const struct regset *regset,
608 const char *name,
dbd534fe 609 int section_min_size,
15244507
PA
610 const char *human_name,
611 bool required)
de57eccd 612{
6ba0a321
CB
613 gdb_assert (regset != nullptr);
614
7be0c536 615 struct bfd_section *section;
de57eccd 616 bfd_size_type size;
6ba0a321 617 bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
de57eccd 618
3c3ae77e 619 thread_section_name section_name (name, regcache->ptid ());
de57eccd 620
3c3ae77e 621 section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
de57eccd
JM
622 if (! section)
623 {
624 if (required)
aff410f1
MS
625 warning (_("Couldn't find %s registers in core file."),
626 human_name);
de57eccd
JM
627 return;
628 }
629
fd361982 630 size = bfd_section_size (section);
dbd534fe 631 if (size < section_min_size)
8f0435f7 632 {
3c3ae77e
PA
633 warning (_("Section `%s' in core file too small."),
634 section_name.c_str ());
8f0435f7
AA
635 return;
636 }
dbd534fe 637 if (size != section_min_size && !variable_size_section)
f962539a
AA
638 {
639 warning (_("Unexpected size of section `%s' in core file."),
3c3ae77e 640 section_name.c_str ());
f962539a 641 }
8f0435f7 642
0cac9354 643 gdb::byte_vector contents (size);
d8b2f9e3
SM
644 if (!bfd_get_section_contents (core_bfd, section, contents.data (),
645 (file_ptr) 0, size))
de57eccd 646 {
8a3fe4f8 647 warning (_("Couldn't read %s registers from `%s' section in core file."),
3c3ae77e 648 human_name, section_name.c_str ());
de57eccd
JM
649 return;
650 }
651
6ba0a321 652 regset->supply_regset (regset, regcache, -1, contents.data (), size);
de57eccd
JM
653}
654
15244507
PA
655/* Data passed to gdbarch_iterate_over_regset_sections's callback. */
656struct get_core_registers_cb_data
657{
658 core_target *target;
659 struct regcache *regcache;
660};
661
5aa82d05
AA
662/* Callback for get_core_registers that handles a single core file
663 register note section. */
664
665static void
a616bb94 666get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
8f0435f7 667 const struct regset *regset,
5aa82d05
AA
668 const char *human_name, void *cb_data)
669{
6ba0a321
CB
670 gdb_assert (regset != nullptr);
671
15244507
PA
672 auto *data = (get_core_registers_cb_data *) cb_data;
673 bool required = false;
6ba0a321 674 bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE);
a616bb94
AH
675
676 if (!variable_size_section)
677 gdb_assert (supply_size == collect_size);
5aa82d05
AA
678
679 if (strcmp (sect_name, ".reg") == 0)
8f0435f7 680 {
15244507 681 required = true;
8f0435f7
AA
682 if (human_name == NULL)
683 human_name = "general-purpose";
684 }
5aa82d05 685 else if (strcmp (sect_name, ".reg2") == 0)
8f0435f7
AA
686 {
687 if (human_name == NULL)
688 human_name = "floating-point";
689 }
690
15244507 691 data->target->get_core_register_section (data->regcache, regset, sect_name,
6ba0a321 692 supply_size, human_name, required);
5aa82d05 693}
de57eccd 694
c906108c
SS
695/* Get the registers out of a core file. This is the machine-
696 independent part. Fetch_core_registers is the machine-dependent
aff410f1
MS
697 part, typically implemented in the xm-file for each
698 architecture. */
c906108c
SS
699
700/* We just get all the registers, so we don't use regno. */
701
f6ac5f3d
PA
702void
703core_target::fetch_registers (struct regcache *regcache, int regno)
c906108c 704{
15244507 705 if (!(m_core_gdbarch != nullptr
6ba0a321 706 && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)))
c906108c
SS
707 {
708 fprintf_filtered (gdb_stderr,
c5aa993b 709 "Can't fetch registers from this type of core file\n");
c906108c
SS
710 return;
711 }
712
6ba0a321
CB
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);
c906108c 718
ee99023e 719 /* Mark all registers not found in the core as unavailable. */
6ba0a321 720 for (int i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
0ec9f114 721 if (regcache->get_register_status (i) == REG_UNKNOWN)
73e1c03f 722 regcache->raw_supply (i, NULL);
c906108c
SS
723}
724
f6ac5f3d
PA
725void
726core_target::files_info ()
c906108c 727{
15244507 728 print_section_info (&m_core_section_table, core_bfd);
c906108c 729}
e2544d02 730\f
f6ac5f3d
PA
731enum target_xfer_status
732core_target::xfer_partial (enum target_object object, const char *annex,
733 gdb_byte *readbuf, const gdb_byte *writebuf,
734 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
e2544d02
RM
735{
736 switch (object)
737 {
738 case TARGET_OBJECT_MEMORY:
2735d421
KB
739 {
740 enum target_xfer_status xfer_status;
741
742 /* Try accessing memory contents from core file data,
743 restricting consideration to those sections for which
744 the BFD section flag SEC_HAS_CONTENTS is set. */
745 auto has_contents_cb = [] (const struct target_section *s)
746 {
747 return ((s->the_bfd_section->flags & SEC_HAS_CONTENTS) != 0);
748 };
749 xfer_status = section_table_xfer_memory_partial
750 (readbuf, writebuf,
751 offset, len, xfered_len,
752 m_core_section_table.sections,
753 m_core_section_table.sections_end,
754 has_contents_cb);
755 if (xfer_status == TARGET_XFER_OK)
756 return TARGET_XFER_OK;
757
db082f59
KB
758 /* Check file backed mappings. If they're available, use
759 core file provided mappings (e.g. from .note.linuxcore.file
760 or the like) as this should provide a more accurate
761 result. If not, check the stratum beneath us, which should
762 be the file stratum. */
763 if (m_core_file_mappings.sections != nullptr)
764 xfer_status = section_table_xfer_memory_partial
765 (readbuf, writebuf,
766 offset, len, xfered_len,
767 m_core_file_mappings.sections,
768 m_core_file_mappings.sections_end);
769 else
770 xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf,
771 writebuf, offset, len,
772 xfered_len);
2735d421
KB
773 if (xfer_status == TARGET_XFER_OK)
774 return TARGET_XFER_OK;
e2544d02 775
2735d421
KB
776 /* Finally, attempt to access data in core file sections with
777 no contents. These will typically read as all zero. */
778 auto no_contents_cb = [&] (const struct target_section *s)
779 {
780 return !has_contents_cb (s);
781 };
782 xfer_status = section_table_xfer_memory_partial
783 (readbuf, writebuf,
784 offset, len, xfered_len,
785 m_core_section_table.sections,
786 m_core_section_table.sections_end,
787 no_contents_cb);
788
789 return xfer_status;
790 }
e2544d02
RM
791 case TARGET_OBJECT_AUXV:
792 if (readbuf)
793 {
794 /* When the aux vector is stored in core file, BFD
795 represents this with a fake section called ".auxv". */
796
c4c5b7ba 797 struct bfd_section *section;
e2544d02 798 bfd_size_type size;
e2544d02
RM
799
800 section = bfd_get_section_by_name (core_bfd, ".auxv");
801 if (section == NULL)
2ed4b548 802 return TARGET_XFER_E_IO;
e2544d02 803
fd361982 804 size = bfd_section_size (section);
e2544d02 805 if (offset >= size)
9b409511 806 return TARGET_XFER_EOF;
e2544d02
RM
807 size -= offset;
808 if (size > len)
809 size = len;
9b409511
YQ
810
811 if (size == 0)
812 return TARGET_XFER_EOF;
813 if (!bfd_get_section_contents (core_bfd, section, readbuf,
814 (file_ptr) offset, size))
e2544d02 815 {
8a3fe4f8 816 warning (_("Couldn't read NT_AUXV note in core file."));
2ed4b548 817 return TARGET_XFER_E_IO;
e2544d02
RM
818 }
819
9b409511
YQ
820 *xfered_len = (ULONGEST) size;
821 return TARGET_XFER_OK;
e2544d02 822 }
2ed4b548 823 return TARGET_XFER_E_IO;
e2544d02 824
403e1656
MK
825 case TARGET_OBJECT_WCOOKIE:
826 if (readbuf)
827 {
828 /* When the StackGhost cookie is stored in core file, BFD
aff410f1
MS
829 represents this with a fake section called
830 ".wcookie". */
403e1656
MK
831
832 struct bfd_section *section;
833 bfd_size_type size;
403e1656
MK
834
835 section = bfd_get_section_by_name (core_bfd, ".wcookie");
836 if (section == NULL)
2ed4b548 837 return TARGET_XFER_E_IO;
403e1656 838
fd361982 839 size = bfd_section_size (section);
403e1656 840 if (offset >= size)
96c4f946 841 return TARGET_XFER_EOF;
403e1656
MK
842 size -= offset;
843 if (size > len)
844 size = len;
9b409511
YQ
845
846 if (size == 0)
847 return TARGET_XFER_EOF;
848 if (!bfd_get_section_contents (core_bfd, section, readbuf,
849 (file_ptr) offset, size))
403e1656 850 {
8a3fe4f8 851 warning (_("Couldn't read StackGhost cookie in core file."));
2ed4b548 852 return TARGET_XFER_E_IO;
403e1656
MK
853 }
854
9b409511
YQ
855 *xfered_len = (ULONGEST) size;
856 return TARGET_XFER_OK;
857
403e1656 858 }
2ed4b548 859 return TARGET_XFER_E_IO;
403e1656 860
de584861 861 case TARGET_OBJECT_LIBRARIES:
15244507
PA
862 if (m_core_gdbarch != nullptr
863 && gdbarch_core_xfer_shared_libraries_p (m_core_gdbarch))
de584861
PA
864 {
865 if (writebuf)
2ed4b548 866 return TARGET_XFER_E_IO;
9b409511
YQ
867 else
868 {
15244507 869 *xfered_len = gdbarch_core_xfer_shared_libraries (m_core_gdbarch,
9b409511
YQ
870 readbuf,
871 offset, len);
872
873 if (*xfered_len == 0)
874 return TARGET_XFER_EOF;
875 else
876 return TARGET_XFER_OK;
877 }
de584861
PA
878 }
879 /* FALL THROUGH */
880
356a5233 881 case TARGET_OBJECT_LIBRARIES_AIX:
15244507
PA
882 if (m_core_gdbarch != nullptr
883 && gdbarch_core_xfer_shared_libraries_aix_p (m_core_gdbarch))
356a5233
JB
884 {
885 if (writebuf)
2ed4b548 886 return TARGET_XFER_E_IO;
9b409511
YQ
887 else
888 {
889 *xfered_len
15244507 890 = gdbarch_core_xfer_shared_libraries_aix (m_core_gdbarch,
9b409511
YQ
891 readbuf, offset,
892 len);
893
894 if (*xfered_len == 0)
895 return TARGET_XFER_EOF;
896 else
897 return TARGET_XFER_OK;
898 }
356a5233
JB
899 }
900 /* FALL THROUGH */
901
9015683b
TT
902 case TARGET_OBJECT_SIGNAL_INFO:
903 if (readbuf)
9b409511 904 {
15244507
PA
905 if (m_core_gdbarch != nullptr
906 && gdbarch_core_xfer_siginfo_p (m_core_gdbarch))
9b409511 907 {
15244507 908 LONGEST l = gdbarch_core_xfer_siginfo (m_core_gdbarch, readbuf,
382b69bb
JB
909 offset, len);
910
911 if (l >= 0)
912 {
913 *xfered_len = l;
914 if (l == 0)
915 return TARGET_XFER_EOF;
916 else
917 return TARGET_XFER_OK;
918 }
9b409511
YQ
919 }
920 }
2ed4b548 921 return TARGET_XFER_E_IO;
9015683b 922
e2544d02 923 default:
b6a8c27b
PA
924 return this->beneath ()->xfer_partial (object, annex, readbuf,
925 writebuf, offset, len,
926 xfered_len);
e2544d02
RM
927 }
928}
929
c906108c 930\f
c906108c
SS
931
932/* Okay, let's be honest: threads gleaned from a core file aren't
933 exactly lively, are they? On the other hand, if we don't claim
934 that each & every one is alive, then we don't get any of them
935 to appear in an "info thread" command, which is quite a useful
936 behaviour.
c5aa993b 937 */
57810aa7 938bool
f6ac5f3d 939core_target::thread_alive (ptid_t ptid)
c906108c 940{
57810aa7 941 return true;
c906108c
SS
942}
943
4eb0ad19
DJ
944/* Ask the current architecture what it knows about this core file.
945 That will be used, in turn, to pick a better architecture. This
946 wrapper could be avoided if targets got a chance to specialize
15244507 947 core_target. */
4eb0ad19 948
f6ac5f3d
PA
949const struct target_desc *
950core_target::read_description ()
4eb0ad19 951{
15244507 952 if (m_core_gdbarch && gdbarch_core_read_description_p (m_core_gdbarch))
2117c711
TT
953 {
954 const struct target_desc *result;
955
15244507 956 result = gdbarch_core_read_description (m_core_gdbarch, this, core_bfd);
2117c711
TT
957 if (result != NULL)
958 return result;
959 }
4eb0ad19 960
b6a8c27b 961 return this->beneath ()->read_description ();
4eb0ad19
DJ
962}
963
a068643d 964std::string
f6ac5f3d 965core_target::pid_to_str (ptid_t ptid)
0de3b513 966{
88f38a04 967 struct inferior *inf;
a5ee0f0c 968 int pid;
0de3b513 969
a5ee0f0c
PA
970 /* The preferred way is to have a gdbarch/OS specific
971 implementation. */
15244507
PA
972 if (m_core_gdbarch != nullptr
973 && gdbarch_core_pid_to_str_p (m_core_gdbarch))
974 return gdbarch_core_pid_to_str (m_core_gdbarch, ptid);
c5504eaf 975
a5ee0f0c
PA
976 /* Otherwise, if we don't have one, we'll just fallback to
977 "process", with normal_pid_to_str. */
28439f5e 978
a5ee0f0c 979 /* Try the LWPID field first. */
e38504b3 980 pid = ptid.lwp ();
a5ee0f0c 981 if (pid != 0)
f2907e49 982 return normal_pid_to_str (ptid_t (pid));
a5ee0f0c
PA
983
984 /* Otherwise, this isn't a "threaded" core -- use the PID field, but
985 only if it isn't a fake PID. */
5b6d1e4f 986 inf = find_inferior_ptid (this, ptid);
88f38a04 987 if (inf != NULL && !inf->fake_pid_p)
a5ee0f0c 988 return normal_pid_to_str (ptid);
0de3b513 989
a5ee0f0c 990 /* No luck. We simply don't have a valid PID to print. */
a068643d 991 return "<main task>";
0de3b513
PA
992}
993
f6ac5f3d
PA
994const char *
995core_target::thread_name (struct thread_info *thr)
4dfc5dbc 996{
15244507
PA
997 if (m_core_gdbarch != nullptr
998 && gdbarch_core_thread_name_p (m_core_gdbarch))
999 return gdbarch_core_thread_name (m_core_gdbarch, thr);
4dfc5dbc
JB
1000 return NULL;
1001}
1002
57810aa7 1003bool
f6ac5f3d 1004core_target::has_memory ()
c35b1492
PA
1005{
1006 return (core_bfd != NULL);
1007}
1008
57810aa7 1009bool
f6ac5f3d 1010core_target::has_stack ()
c35b1492
PA
1011{
1012 return (core_bfd != NULL);
1013}
1014
57810aa7 1015bool
f6ac5f3d 1016core_target::has_registers ()
c35b1492
PA
1017{
1018 return (core_bfd != NULL);
1019}
1020
451b7c33
TT
1021/* Implement the to_info_proc method. */
1022
f6ac5f3d
PA
1023bool
1024core_target::info_proc (const char *args, enum info_proc_what request)
451b7c33
TT
1025{
1026 struct gdbarch *gdbarch = get_current_arch ();
1027
1028 /* Since this is the core file target, call the 'core_info_proc'
1029 method on gdbarch, not 'info_proc'. */
1030 if (gdbarch_core_info_proc_p (gdbarch))
1031 gdbarch_core_info_proc (gdbarch, args, request);
c906108c 1032
f6ac5f3d 1033 return true;
c906108c
SS
1034}
1035
09c2f5d4
KB
1036/* Get a pointer to the current core target. If not connected to a
1037 core target, return NULL. */
1038
1039static core_target *
1040get_current_core_target ()
1041{
1042 target_ops *proc_target = current_inferior ()->process_target ();
1043 return dynamic_cast<core_target *> (proc_target);
1044}
1045
1046/* Display file backed mappings from core file. */
1047
1048void
1049core_target::info_proc_mappings (struct gdbarch *gdbarch)
1050{
1051 if (m_core_file_mappings.sections != m_core_file_mappings.sections_end)
1052 {
1053 printf_filtered (_("Mapped address spaces:\n\n"));
1054 if (gdbarch_addr_bit (gdbarch) == 32)
1055 {
1056 printf_filtered ("\t%10s %10s %10s %10s %s\n",
1057 "Start Addr",
1058 " End Addr",
1059 " Size", " Offset", "objfile");
1060 }
1061 else
1062 {
1063 printf_filtered (" %18s %18s %10s %10s %s\n",
1064 "Start Addr",
1065 " End Addr",
1066 " Size", " Offset", "objfile");
1067 }
1068 }
1069
1070 for (const struct target_section *tsp = m_core_file_mappings.sections;
1071 tsp < m_core_file_mappings.sections_end;
1072 tsp++)
1073 {
1074 ULONGEST start = tsp->addr;
1075 ULONGEST end = tsp->endaddr;
1076 ULONGEST file_ofs = tsp->the_bfd_section->filepos;
1077 const char *filename = bfd_get_filename (tsp->the_bfd_section->owner);
1078
1079 if (gdbarch_addr_bit (gdbarch) == 32)
1080 printf_filtered ("\t%10s %10s %10s %10s %s\n",
1081 paddress (gdbarch, start),
1082 paddress (gdbarch, end),
1083 hex_string (end - start),
1084 hex_string (file_ofs),
1085 filename);
1086 else
1087 printf_filtered (" %18s %18s %10s %10s %s\n",
1088 paddress (gdbarch, start),
1089 paddress (gdbarch, end),
1090 hex_string (end - start),
1091 hex_string (file_ofs),
1092 filename);
1093 }
1094}
1095
1096/* Implement "maintenance print core-file-backed-mappings" command.
1097
1098 If mappings are loaded, the results should be similar to the
1099 mappings shown by "info proc mappings". This command is mainly a
1100 debugging tool for GDB developers to make sure that the expected
1101 mappings are present after loading a core file. For Linux, the
1102 output provided by this command will be very similar (if not
1103 identical) to that provided by "info proc mappings". This is not
1104 necessarily the case for other OSes which might provide
1105 more/different information in the "info proc mappings" output. */
1106
1107static void
1108maintenance_print_core_file_backed_mappings (const char *args, int from_tty)
1109{
1110 core_target *targ = get_current_core_target ();
1111 if (targ != nullptr)
1112 targ->info_proc_mappings (targ->core_gdbarch ());
1113}
1114
6c265988 1115void _initialize_corelow ();
c906108c 1116void
6c265988 1117_initialize_corelow ()
c906108c 1118{
d9f719f1 1119 add_target (core_target_info, core_target_open, filename_completer);
09c2f5d4
KB
1120 add_cmd ("core-file-backed-mappings", class_maintenance,
1121 maintenance_print_core_file_backed_mappings,
513487e1 1122 _("Print core file's file-backed mappings."),
09c2f5d4 1123 &maintenanceprintlist);
c906108c 1124}
This page took 1.455151 seconds and 4 git commands to generate.