Accept -Wno- prefix in ARI
[deliverable/binutils-gdb.git] / gdb / corelow.c
CommitLineData
c906108c 1/* Core dump and executable file functions below target vector, for GDB.
4646aa9d 2
42a4f53d 3 Copyright (C) 1986-2019 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
TT
39#include "solib.h"
40#include "filenames.h"
41#include "progspace.h"
42#include "objfiles.h"
43#include "gdb_bfd.h"
44#include "completer.h"
268a13a5 45#include "gdbsupport/filestuff.h"
aa2d5a42 46#include "build-id.h"
8e860359 47
ee28ca0f
AC
48#ifndef O_LARGEFILE
49#define O_LARGEFILE 0
50#endif
51
15244507
PA
52static core_fns *sniff_core_bfd (gdbarch *core_gdbarch,
53 bfd *abfd);
54
f6ac5f3d
PA
55/* The core file target. */
56
d9f719f1
PA
57static const target_info core_target_info = {
58 "core",
59 N_("Local core dump file"),
590042fc
PW
60 N_("Use a core file as a target.\n\
61Specify the filename of the core file.")
d9f719f1
PA
62};
63
3b3dac9b 64class core_target final : public process_stratum_target
f6ac5f3d
PA
65{
66public:
15244507
PA
67 core_target ();
68 ~core_target () override;
f6ac5f3d 69
d9f719f1
PA
70 const target_info &info () const override
71 { return core_target_info; }
f6ac5f3d 72
f6ac5f3d
PA
73 void close () override;
74 void detach (inferior *, int) override;
75 void fetch_registers (struct regcache *, int) override;
76
77 enum target_xfer_status xfer_partial (enum target_object object,
78 const char *annex,
79 gdb_byte *readbuf,
80 const gdb_byte *writebuf,
81 ULONGEST offset, ULONGEST len,
82 ULONGEST *xfered_len) override;
83 void files_info () override;
84
57810aa7 85 bool thread_alive (ptid_t ptid) override;
f6ac5f3d
PA
86 const struct target_desc *read_description () override;
87
a068643d 88 std::string pid_to_str (ptid_t) override;
f6ac5f3d
PA
89
90 const char *thread_name (struct thread_info *) override;
91
f3d11a9a 92 bool has_all_memory () override { return false; }
57810aa7
PA
93 bool has_memory () override;
94 bool has_stack () override;
95 bool has_registers () override;
f3d11a9a
PA
96 bool has_execution (ptid_t) override { return false; }
97
f6ac5f3d 98 bool info_proc (const char *, enum info_proc_what) override;
f6ac5f3d 99
15244507
PA
100 /* A few helpers. */
101
102 /* Getter, see variable definition. */
103 struct gdbarch *core_gdbarch ()
104 {
105 return m_core_gdbarch;
106 }
107
108 /* See definition. */
109 void get_core_register_section (struct regcache *regcache,
110 const struct regset *regset,
111 const char *name,
dbd534fe 112 int section_min_size,
15244507
PA
113 int which,
114 const char *human_name,
115 bool required);
116
117private: /* per-core data */
118
119 /* The core's section table. Note that these target sections are
120 *not* mapped in the current address spaces' set of target
121 sections --- those should come only from pure executable or
122 shared library bfds. The core bfd sections are an implementation
123 detail of the core target, just like ptrace is for unix child
124 targets. */
125 target_section_table m_core_section_table {};
126
127 /* The core_fns for a core file handler that is prepared to read the
128 core file currently open on core_bfd. */
129 core_fns *m_core_vec = NULL;
130
131 /* FIXME: kettenis/20031023: Eventually this field should
132 disappear. */
133 struct gdbarch *m_core_gdbarch = NULL;
134};
c906108c 135
15244507
PA
136core_target::core_target ()
137{
15244507 138 m_core_gdbarch = gdbarch_from_bfd (core_bfd);
2acceee2 139
15244507
PA
140 /* Find a suitable core file handler to munch on core_bfd */
141 m_core_vec = sniff_core_bfd (m_core_gdbarch, core_bfd);
2acceee2 142
15244507
PA
143 /* Find the data section */
144 if (build_section_table (core_bfd,
145 &m_core_section_table.sections,
146 &m_core_section_table.sections_end))
147 error (_("\"%s\": Can't find sections: %s"),
148 bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ()));
149}
0e24ac5d 150
15244507
PA
151core_target::~core_target ()
152{
153 xfree (m_core_section_table.sections);
154}
0e24ac5d 155
15244507
PA
156/* List of all available core_fns. On gdb startup, each core file
157 register reader calls deprecated_add_core_fns() to register
158 information on each core format it is prepared to read. */
07b82ea5 159
15244507 160static struct core_fns *core_file_fns = NULL;
2acceee2 161
020cc13c 162static int gdb_check_format (bfd *);
2acceee2 163
4efb68b1 164static void add_to_thread_list (bfd *, asection *, void *);
c906108c 165
7f9f62ba
PA
166/* An arbitrary identifier for the core inferior. */
167#define CORELOW_PID 1
168
aff410f1
MS
169/* Link a new core_fns into the global core_file_fns list. Called on
170 gdb startup by the _initialize routine in each core file register
b021a221 171 reader, to register information about each format the reader is
aff410f1 172 prepared to handle. */
c906108c
SS
173
174void
00e32a35 175deprecated_add_core_fns (struct core_fns *cf)
c906108c 176{
c5aa993b 177 cf->next = core_file_fns;
c906108c
SS
178 core_file_fns = cf;
179}
180
2acceee2
JM
181/* The default function that core file handlers can use to examine a
182 core file BFD and decide whether or not to accept the job of
aff410f1 183 reading the core file. */
2acceee2
JM
184
185int
fba45db2 186default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
2acceee2
JM
187{
188 int result;
189
190 result = (bfd_get_flavour (abfd) == our_fns -> core_flavour);
191 return (result);
192}
193
194/* Walk through the list of core functions to find a set that can
06b9f45f 195 handle the core file open on ABFD. Returns pointer to set that is
aff410f1 196 selected. */
2acceee2
JM
197
198static struct core_fns *
15244507 199sniff_core_bfd (struct gdbarch *core_gdbarch, bfd *abfd)
2acceee2
JM
200{
201 struct core_fns *cf;
202 struct core_fns *yummy = NULL;
45eba0ab 203 int matches = 0;
2acceee2 204
aff410f1
MS
205 /* Don't sniff if we have support for register sets in
206 CORE_GDBARCH. */
29082443 207 if (core_gdbarch && gdbarch_iterate_over_regset_sections_p (core_gdbarch))
0e24ac5d
MK
208 return NULL;
209
2acceee2
JM
210 for (cf = core_file_fns; cf != NULL; cf = cf->next)
211 {
212 if (cf->core_sniffer (cf, abfd))
213 {
214 yummy = cf;
215 matches++;
216 }
217 }
218 if (matches > 1)
219 {
8a3fe4f8 220 warning (_("\"%s\": ambiguous core format, %d handlers match"),
2acceee2
JM
221 bfd_get_filename (abfd), matches);
222 }
223 else if (matches == 0)
06b9f45f
JK
224 error (_("\"%s\": no core file handler recognizes format"),
225 bfd_get_filename (abfd));
226
2acceee2
JM
227 return (yummy);
228}
229
230/* The default is to reject every core file format we see. Either
231 BFD has to recognize it, or we have to provide a function in the
aff410f1 232 core file handler that recognizes it. */
2acceee2
JM
233
234int
fba45db2 235default_check_format (bfd *abfd)
2acceee2
JM
236{
237 return (0);
238}
239
aff410f1 240/* Attempt to recognize core file formats that BFD rejects. */
2acceee2 241
020cc13c 242static int
fba45db2 243gdb_check_format (bfd *abfd)
2acceee2
JM
244{
245 struct core_fns *cf;
246
247 for (cf = core_file_fns; cf != NULL; cf = cf->next)
248 {
249 if (cf->check_format (abfd))
250 {
81a9a963 251 return (1);
2acceee2
JM
252 }
253 }
81a9a963 254 return (0);
2acceee2 255}
c906108c 256
15244507 257/* Close the core target. */
c906108c 258
15244507
PA
259void
260core_target::close ()
c906108c 261{
c906108c
SS
262 if (core_bfd)
263 {
aff410f1
MS
264 inferior_ptid = null_ptid; /* Avoid confusion from thread
265 stuff. */
00431a78 266 exit_inferior_silent (current_inferior ());
c906108c 267
aff410f1
MS
268 /* Clear out solib state while the bfd is still open. See
269 comments in clear_solib in solib.c. */
a77053c2 270 clear_solib ();
7a292a7a 271
06333fea 272 current_program_space->cbfd.reset (nullptr);
c906108c 273 }
c906108c 274
15244507
PA
275 /* Core targets are heap-allocated (see core_target_open), so here
276 we delete ourselves. */
277 delete this;
74b7792f
AC
278}
279
aff410f1
MS
280/* Look for sections whose names start with `.reg/' so that we can
281 extract the list of threads in a core file. */
c906108c
SS
282
283static void
4efb68b1 284add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
c906108c 285{
0de3b513 286 ptid_t ptid;
3cdd9356
PA
287 int core_tid;
288 int pid, lwpid;
c906108c 289 asection *reg_sect = (asection *) reg_sect_arg;
9ab8741a 290 bool fake_pid_p = false;
88f38a04 291 struct inferior *inf;
c906108c 292
fd361982 293 if (!startswith (bfd_section_name (asect), ".reg/"))
c906108c
SS
294 return;
295
fd361982 296 core_tid = atoi (bfd_section_name (asect) + 5);
c906108c 297
261b8d08
PA
298 pid = bfd_core_file_pid (core_bfd);
299 if (pid == 0)
3cdd9356 300 {
9ab8741a 301 fake_pid_p = true;
3cdd9356 302 pid = CORELOW_PID;
3cdd9356 303 }
0de3b513 304
261b8d08
PA
305 lwpid = core_tid;
306
88f38a04
PA
307 inf = current_inferior ();
308 if (inf->pid == 0)
309 {
310 inferior_appeared (inf, pid);
311 inf->fake_pid_p = fake_pid_p;
312 }
3cdd9356 313
fd79271b 314 ptid = ptid_t (pid, lwpid, 0);
3cdd9356
PA
315
316 add_thread (ptid);
c906108c
SS
317
318/* Warning, Will Robinson, looking at BFD private data! */
319
320 if (reg_sect != NULL
aff410f1
MS
321 && asect->filepos == reg_sect->filepos) /* Did we find .reg? */
322 inferior_ptid = ptid; /* Yes, make it current. */
c906108c
SS
323}
324
451953fa
PA
325/* Issue a message saying we have no core to debug, if FROM_TTY. */
326
327static void
328maybe_say_no_core_file_now (int from_tty)
329{
330 if (from_tty)
331 printf_filtered (_("No core file now.\n"));
332}
333
30baf67b 334/* Backward compatibility with old way of specifying core files. */
451953fa
PA
335
336void
337core_file_command (const char *filename, int from_tty)
338{
339 dont_repeat (); /* Either way, seems bogus. */
340
341 if (filename == NULL)
342 {
343 if (core_bfd != NULL)
344 {
345 target_detach (current_inferior (), from_tty);
346 gdb_assert (core_bfd == NULL);
347 }
348 else
349 maybe_say_no_core_file_now (from_tty);
350 }
351 else
352 core_target_open (filename, from_tty);
353}
354
aa2d5a42
KS
355/* Locate (and load) an executable file (and symbols) given the core file
356 BFD ABFD. */
357
358static void
359locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
360{
361 const bfd_build_id *build_id = build_id_bfd_get (abfd);
362 if (build_id == nullptr)
363 return;
364
365 gdb_bfd_ref_ptr execbfd
366 = build_id_to_exec_bfd (build_id->size, build_id->data);
367
368 if (execbfd != nullptr)
369 {
370 exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
371 symbol_file_add_main (bfd_get_filename (execbfd.get ()),
372 symfile_add_flag (from_tty ? SYMFILE_VERBOSE : 0));
373 }
374}
375
d9f719f1 376/* See gdbcore.h. */
c906108c 377
f6ac5f3d 378void
d9f719f1 379core_target_open (const char *arg, int from_tty)
c906108c
SS
380{
381 const char *p;
382 int siggy;
c906108c 383 int scratch_chan;
ee28ca0f 384 int flags;
c906108c
SS
385
386 target_preopen (from_tty);
014f9477 387 if (!arg)
c906108c 388 {
8a3fe4f8 389 if (core_bfd)
3e43a32a
MS
390 error (_("No core file specified. (Use `detach' "
391 "to stop debugging a core file.)"));
8a3fe4f8
AC
392 else
393 error (_("No core file specified."));
c906108c
SS
394 }
395
ee0c3293
TT
396 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
397 if (!IS_ABSOLUTE_PATH (filename.get ()))
398 filename.reset (concat (current_directory, "/",
399 filename.get (), (char *) NULL));
c906108c 400
ee28ca0f
AC
401 flags = O_BINARY | O_LARGEFILE;
402 if (write_files)
403 flags |= O_RDWR;
404 else
405 flags |= O_RDONLY;
ee0c3293 406 scratch_chan = gdb_open_cloexec (filename.get (), flags, 0);
c906108c 407 if (scratch_chan < 0)
ee0c3293 408 perror_with_name (filename.get ());
c906108c 409
ee0c3293 410 gdb_bfd_ref_ptr temp_bfd (gdb_bfd_fopen (filename.get (), gnutarget,
192b62ce
TT
411 write_files ? FOPEN_RUB : FOPEN_RB,
412 scratch_chan));
c906108c 413 if (temp_bfd == NULL)
ee0c3293 414 perror_with_name (filename.get ());
c906108c 415
192b62ce
TT
416 if (!bfd_check_format (temp_bfd.get (), bfd_core)
417 && !gdb_check_format (temp_bfd.get ()))
c906108c
SS
418 {
419 /* Do it after the err msg */
aff410f1
MS
420 /* FIXME: should be checking for errors from bfd_close (for one
421 thing, on error it does not free all the storage associated
422 with the bfd). */
8a3fe4f8 423 error (_("\"%s\" is not a core dump: %s"),
ee0c3293 424 filename.get (), bfd_errmsg (bfd_get_error ()));
c906108c
SS
425 }
426
06333fea 427 current_program_space->cbfd = std::move (temp_bfd);
c906108c 428
15244507 429 core_target *target = new core_target ();
0e24ac5d 430
15244507
PA
431 /* Own the target until it is successfully pushed. */
432 target_ops_up target_holder (target);
2acceee2 433
c906108c
SS
434 validate_files ();
435
2f1b5984
MK
436 /* If we have no exec file, try to set the architecture from the
437 core file. We don't do this unconditionally since an exec file
438 typically contains more information that helps us determine the
439 architecture than a core file. */
440 if (!exec_bfd)
441 set_gdbarch_from_file (core_bfd);
cbda0a99 442
dea57a62 443 push_target (std::move (target_holder));
c906108c 444
3cdd9356 445 inferior_ptid = null_ptid;
0de3b513 446
739fc47a
PA
447 /* Need to flush the register cache (and the frame cache) from a
448 previous debug session. If inferior_ptid ends up the same as the
449 last debug session --- e.g., b foo; run; gcore core1; step; gcore
450 core2; core core1; core core2 --- then there's potential for
451 get_current_regcache to return the cached regcache of the
452 previous session, and the frame cache being stale. */
453 registers_changed ();
454
0de3b513
PA
455 /* Build up thread list from BFD sections, and possibly set the
456 current thread to the .reg/NN section matching the .reg
aff410f1 457 section. */
0de3b513
PA
458 bfd_map_over_sections (core_bfd, add_to_thread_list,
459 bfd_get_section_by_name (core_bfd, ".reg"));
460
d7e15655 461 if (inferior_ptid == null_ptid)
3cdd9356
PA
462 {
463 /* Either we found no .reg/NN section, and hence we have a
464 non-threaded core (single-threaded, from gdb's perspective),
465 or for some reason add_to_thread_list couldn't determine
466 which was the "main" thread. The latter case shouldn't
467 usually happen, but we're dealing with input here, which can
468 always be broken in different ways. */
00431a78 469 thread_info *thread = first_thread_of_inferior (current_inferior ());
c5504eaf 470
3cdd9356
PA
471 if (thread == NULL)
472 {
c45ceae0 473 inferior_appeared (current_inferior (), CORELOW_PID);
f2907e49 474 inferior_ptid = ptid_t (CORELOW_PID);
3cdd9356
PA
475 add_thread_silent (inferior_ptid);
476 }
477 else
00431a78 478 switch_to_thread (thread);
3cdd9356
PA
479 }
480
aa2d5a42
KS
481 if (exec_bfd == nullptr)
482 locate_exec_from_corefile_build_id (core_bfd, from_tty);
483
15244507 484 post_create_inferior (target, from_tty);
959b8724 485
0de3b513
PA
486 /* Now go through the target stack looking for threads since there
487 may be a thread_stratum target loaded on top of target core by
488 now. The layer above should claim threads found in the BFD
489 sections. */
a70b8144 490 try
8e7b59a5 491 {
e8032dde 492 target_update_thread_list ();
8e7b59a5
KS
493 }
494
230d2906 495 catch (const gdb_exception_error &except)
492d29ea
PA
496 {
497 exception_print (gdb_stderr, except);
498 }
0de3b513 499
c906108c
SS
500 p = bfd_core_file_failing_command (core_bfd);
501 if (p)
a3f17187 502 printf_filtered (_("Core was generated by `%s'.\n"), p);
c906108c 503
0c557179
SDJ
504 /* Clearing any previous state of convenience variables. */
505 clear_exit_convenience_vars ();
506
c906108c
SS
507 siggy = bfd_core_file_failing_signal (core_bfd);
508 if (siggy > 0)
423ec54c 509 {
15244507
PA
510 gdbarch *core_gdbarch = target->core_gdbarch ();
511
22203bbf 512 /* If we don't have a CORE_GDBARCH to work with, assume a native
1f8cf220
PA
513 core (map gdb_signal from host signals). If we do have
514 CORE_GDBARCH to work with, but no gdb_signal_from_target
515 implementation for that gdbarch, as a fallback measure,
516 assume the host signal mapping. It'll be correct for native
517 cores, but most likely incorrect for cross-cores. */
2ea28649 518 enum gdb_signal sig = (core_gdbarch != NULL
1f8cf220
PA
519 && gdbarch_gdb_signal_from_target_p (core_gdbarch)
520 ? gdbarch_gdb_signal_from_target (core_gdbarch,
521 siggy)
522 : gdb_signal_from_host (siggy));
423ec54c 523
2d503272
PM
524 printf_filtered (_("Program terminated with signal %s, %s.\n"),
525 gdb_signal_to_name (sig), gdb_signal_to_string (sig));
0c557179
SDJ
526
527 /* Set the value of the internal variable $_exitsignal,
528 which holds the signal uncaught by the inferior. */
529 set_internalvar_integer (lookup_internalvar ("_exitsignal"),
530 siggy);
423ec54c 531 }
c906108c 532
87ab71f0
PA
533 /* Fetch all registers from core file. */
534 target_fetch_registers (get_current_regcache (), -1);
c906108c 535
87ab71f0
PA
536 /* Now, set up the frame cache, and print the top of stack. */
537 reinit_frame_cache ();
08d72866 538 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
f0e8c4c5
JK
539
540 /* Current thread should be NUM 1 but the user does not know that.
541 If a program is single threaded gdb in general does not mention
542 anything about threads. That is why the test is >= 2. */
543 if (thread_count () >= 2)
544 {
a70b8144 545 try
f0e8c4c5
JK
546 {
547 thread_command (NULL, from_tty);
548 }
230d2906 549 catch (const gdb_exception_error &except)
492d29ea
PA
550 {
551 exception_print (gdb_stderr, except);
552 }
f0e8c4c5 553 }
c906108c
SS
554}
555
f6ac5f3d
PA
556void
557core_target::detach (inferior *inf, int from_tty)
c906108c 558{
15244507
PA
559 /* Note that 'this' is dangling after this call. unpush_target
560 closes the target, and our close implementation deletes
561 'this'. */
f6ac5f3d 562 unpush_target (this);
15244507 563
66452beb
PW
564 /* Clear the register cache and the frame cache. */
565 registers_changed ();
c906108c 566 reinit_frame_cache ();
451953fa 567 maybe_say_no_core_file_now (from_tty);
c906108c
SS
568}
569
de57eccd 570/* Try to retrieve registers from a section in core_bfd, and supply
15244507
PA
571 them to m_core_vec->core_read_registers, as the register set
572 numbered WHICH.
de57eccd 573
11a33714
SM
574 If ptid's lwp member is zero, do the single-threaded
575 thing: look for a section named NAME. If ptid's lwp
0de3b513
PA
576 member is non-zero, do the multi-threaded thing: look for a section
577 named "NAME/LWP", where LWP is the shortest ASCII decimal
11a33714 578 representation of ptid's lwp member.
de57eccd
JM
579
580 HUMAN_NAME is a human-readable name for the kind of registers the
581 NAME section contains, for use in error messages.
582
15244507
PA
583 If REQUIRED is true, print an error if the core file doesn't have a
584 section by the appropriate name. Otherwise, just do nothing. */
de57eccd 585
15244507
PA
586void
587core_target::get_core_register_section (struct regcache *regcache,
588 const struct regset *regset,
589 const char *name,
dbd534fe 590 int section_min_size,
15244507
PA
591 int which,
592 const char *human_name,
593 bool required)
de57eccd 594{
7be0c536 595 struct bfd_section *section;
de57eccd
JM
596 bfd_size_type size;
597 char *contents;
874a1c8c
AT
598 bool variable_size_section = (regset != NULL
599 && regset->flags & REGSET_VARIABLE_SIZE);
de57eccd 600
3c3ae77e 601 thread_section_name section_name (name, regcache->ptid ());
de57eccd 602
3c3ae77e 603 section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
de57eccd
JM
604 if (! section)
605 {
606 if (required)
aff410f1
MS
607 warning (_("Couldn't find %s registers in core file."),
608 human_name);
de57eccd
JM
609 return;
610 }
611
fd361982 612 size = bfd_section_size (section);
dbd534fe 613 if (size < section_min_size)
8f0435f7 614 {
3c3ae77e
PA
615 warning (_("Section `%s' in core file too small."),
616 section_name.c_str ());
8f0435f7
AA
617 return;
618 }
dbd534fe 619 if (size != section_min_size && !variable_size_section)
f962539a
AA
620 {
621 warning (_("Unexpected size of section `%s' in core file."),
3c3ae77e 622 section_name.c_str ());
f962539a 623 }
8f0435f7 624
224c3ddb 625 contents = (char *) alloca (size);
de57eccd
JM
626 if (! bfd_get_section_contents (core_bfd, section, contents,
627 (file_ptr) 0, size))
628 {
8a3fe4f8 629 warning (_("Couldn't read %s registers from `%s' section in core file."),
3c3ae77e 630 human_name, section_name.c_str ());
de57eccd
JM
631 return;
632 }
633
8f0435f7
AA
634 if (regset != NULL)
635 {
9eefc95f 636 regset->supply_regset (regset, regcache, -1, contents, size);
0e24ac5d
MK
637 return;
638 }
639
15244507
PA
640 gdb_assert (m_core_vec != nullptr);
641 m_core_vec->core_read_registers (regcache, contents, size, which,
fd361982 642 (CORE_ADDR) bfd_section_vma (section));
de57eccd
JM
643}
644
15244507
PA
645/* Data passed to gdbarch_iterate_over_regset_sections's callback. */
646struct get_core_registers_cb_data
647{
648 core_target *target;
649 struct regcache *regcache;
650};
651
5aa82d05
AA
652/* Callback for get_core_registers that handles a single core file
653 register note section. */
654
655static void
a616bb94 656get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
8f0435f7 657 const struct regset *regset,
5aa82d05
AA
658 const char *human_name, void *cb_data)
659{
15244507
PA
660 auto *data = (get_core_registers_cb_data *) cb_data;
661 bool required = false;
a616bb94
AH
662 bool variable_size_section = (regset != NULL
663 && regset->flags & REGSET_VARIABLE_SIZE);
664
665 if (!variable_size_section)
666 gdb_assert (supply_size == collect_size);
5aa82d05
AA
667
668 if (strcmp (sect_name, ".reg") == 0)
8f0435f7 669 {
15244507 670 required = true;
8f0435f7
AA
671 if (human_name == NULL)
672 human_name = "general-purpose";
673 }
5aa82d05 674 else if (strcmp (sect_name, ".reg2") == 0)
8f0435f7
AA
675 {
676 if (human_name == NULL)
677 human_name = "floating-point";
678 }
679
680 /* The 'which' parameter is only used when no regset is provided.
681 Thus we just set it to -1. */
15244507 682 data->target->get_core_register_section (data->regcache, regset, sect_name,
a616bb94
AH
683 supply_size, -1, human_name,
684 required);
5aa82d05 685}
de57eccd 686
c906108c
SS
687/* Get the registers out of a core file. This is the machine-
688 independent part. Fetch_core_registers is the machine-dependent
aff410f1
MS
689 part, typically implemented in the xm-file for each
690 architecture. */
c906108c
SS
691
692/* We just get all the registers, so we don't use regno. */
693
f6ac5f3d
PA
694void
695core_target::fetch_registers (struct regcache *regcache, int regno)
c906108c 696{
9c5ea4d9 697 int i;
5aa82d05 698 struct gdbarch *gdbarch;
c906108c 699
15244507
PA
700 if (!(m_core_gdbarch != nullptr
701 && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))
702 && (m_core_vec == NULL || m_core_vec->core_read_registers == NULL))
c906108c
SS
703 {
704 fprintf_filtered (gdb_stderr,
c5aa993b 705 "Can't fetch registers from this type of core file\n");
c906108c
SS
706 return;
707 }
708
ac7936df 709 gdbarch = regcache->arch ();
5aa82d05 710 if (gdbarch_iterate_over_regset_sections_p (gdbarch))
15244507
PA
711 {
712 get_core_registers_cb_data data = { this, regcache };
713 gdbarch_iterate_over_regset_sections (gdbarch,
714 get_core_registers_cb,
715 (void *) &data, NULL);
716 }
1b1818e4
UW
717 else
718 {
8f0435f7
AA
719 get_core_register_section (regcache, NULL,
720 ".reg", 0, 0, "general-purpose", 1);
721 get_core_register_section (regcache, NULL,
722 ".reg2", 0, 2, "floating-point", 0);
1b1818e4 723 }
c906108c 724
ee99023e 725 /* Mark all registers not found in the core as unavailable. */
ac7936df 726 for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
0ec9f114 727 if (regcache->get_register_status (i) == REG_UNKNOWN)
73e1c03f 728 regcache->raw_supply (i, NULL);
c906108c
SS
729}
730
f6ac5f3d
PA
731void
732core_target::files_info ()
c906108c 733{
15244507 734 print_section_info (&m_core_section_table, core_bfd);
c906108c 735}
e2544d02 736\f
f6ac5f3d
PA
737enum target_xfer_status
738core_target::xfer_partial (enum target_object object, const char *annex,
739 gdb_byte *readbuf, const gdb_byte *writebuf,
740 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
e2544d02
RM
741{
742 switch (object)
743 {
744 case TARGET_OBJECT_MEMORY:
15244507
PA
745 return (section_table_xfer_memory_partial
746 (readbuf, writebuf,
747 offset, len, xfered_len,
748 m_core_section_table.sections,
749 m_core_section_table.sections_end,
750 NULL));
e2544d02
RM
751
752 case TARGET_OBJECT_AUXV:
753 if (readbuf)
754 {
755 /* When the aux vector is stored in core file, BFD
756 represents this with a fake section called ".auxv". */
757
c4c5b7ba 758 struct bfd_section *section;
e2544d02 759 bfd_size_type size;
e2544d02
RM
760
761 section = bfd_get_section_by_name (core_bfd, ".auxv");
762 if (section == NULL)
2ed4b548 763 return TARGET_XFER_E_IO;
e2544d02 764
fd361982 765 size = bfd_section_size (section);
e2544d02 766 if (offset >= size)
9b409511 767 return TARGET_XFER_EOF;
e2544d02
RM
768 size -= offset;
769 if (size > len)
770 size = len;
9b409511
YQ
771
772 if (size == 0)
773 return TARGET_XFER_EOF;
774 if (!bfd_get_section_contents (core_bfd, section, readbuf,
775 (file_ptr) offset, size))
e2544d02 776 {
8a3fe4f8 777 warning (_("Couldn't read NT_AUXV note in core file."));
2ed4b548 778 return TARGET_XFER_E_IO;
e2544d02
RM
779 }
780
9b409511
YQ
781 *xfered_len = (ULONGEST) size;
782 return TARGET_XFER_OK;
e2544d02 783 }
2ed4b548 784 return TARGET_XFER_E_IO;
e2544d02 785
403e1656
MK
786 case TARGET_OBJECT_WCOOKIE:
787 if (readbuf)
788 {
789 /* When the StackGhost cookie is stored in core file, BFD
aff410f1
MS
790 represents this with a fake section called
791 ".wcookie". */
403e1656
MK
792
793 struct bfd_section *section;
794 bfd_size_type size;
403e1656
MK
795
796 section = bfd_get_section_by_name (core_bfd, ".wcookie");
797 if (section == NULL)
2ed4b548 798 return TARGET_XFER_E_IO;
403e1656 799
fd361982 800 size = bfd_section_size (section);
403e1656 801 if (offset >= size)
96c4f946 802 return TARGET_XFER_EOF;
403e1656
MK
803 size -= offset;
804 if (size > len)
805 size = len;
9b409511
YQ
806
807 if (size == 0)
808 return TARGET_XFER_EOF;
809 if (!bfd_get_section_contents (core_bfd, section, readbuf,
810 (file_ptr) offset, size))
403e1656 811 {
8a3fe4f8 812 warning (_("Couldn't read StackGhost cookie in core file."));
2ed4b548 813 return TARGET_XFER_E_IO;
403e1656
MK
814 }
815
9b409511
YQ
816 *xfered_len = (ULONGEST) size;
817 return TARGET_XFER_OK;
818
403e1656 819 }
2ed4b548 820 return TARGET_XFER_E_IO;
403e1656 821
de584861 822 case TARGET_OBJECT_LIBRARIES:
15244507
PA
823 if (m_core_gdbarch != nullptr
824 && gdbarch_core_xfer_shared_libraries_p (m_core_gdbarch))
de584861
PA
825 {
826 if (writebuf)
2ed4b548 827 return TARGET_XFER_E_IO;
9b409511
YQ
828 else
829 {
15244507 830 *xfered_len = gdbarch_core_xfer_shared_libraries (m_core_gdbarch,
9b409511
YQ
831 readbuf,
832 offset, len);
833
834 if (*xfered_len == 0)
835 return TARGET_XFER_EOF;
836 else
837 return TARGET_XFER_OK;
838 }
de584861
PA
839 }
840 /* FALL THROUGH */
841
356a5233 842 case TARGET_OBJECT_LIBRARIES_AIX:
15244507
PA
843 if (m_core_gdbarch != nullptr
844 && gdbarch_core_xfer_shared_libraries_aix_p (m_core_gdbarch))
356a5233
JB
845 {
846 if (writebuf)
2ed4b548 847 return TARGET_XFER_E_IO;
9b409511
YQ
848 else
849 {
850 *xfered_len
15244507 851 = gdbarch_core_xfer_shared_libraries_aix (m_core_gdbarch,
9b409511
YQ
852 readbuf, offset,
853 len);
854
855 if (*xfered_len == 0)
856 return TARGET_XFER_EOF;
857 else
858 return TARGET_XFER_OK;
859 }
356a5233
JB
860 }
861 /* FALL THROUGH */
862
9015683b
TT
863 case TARGET_OBJECT_SIGNAL_INFO:
864 if (readbuf)
9b409511 865 {
15244507
PA
866 if (m_core_gdbarch != nullptr
867 && gdbarch_core_xfer_siginfo_p (m_core_gdbarch))
9b409511 868 {
15244507 869 LONGEST l = gdbarch_core_xfer_siginfo (m_core_gdbarch, readbuf,
382b69bb
JB
870 offset, len);
871
872 if (l >= 0)
873 {
874 *xfered_len = l;
875 if (l == 0)
876 return TARGET_XFER_EOF;
877 else
878 return TARGET_XFER_OK;
879 }
9b409511
YQ
880 }
881 }
2ed4b548 882 return TARGET_XFER_E_IO;
9015683b 883
e2544d02 884 default:
b6a8c27b
PA
885 return this->beneath ()->xfer_partial (object, annex, readbuf,
886 writebuf, offset, len,
887 xfered_len);
e2544d02
RM
888 }
889}
890
c906108c 891\f
c906108c
SS
892
893/* Okay, let's be honest: threads gleaned from a core file aren't
894 exactly lively, are they? On the other hand, if we don't claim
895 that each & every one is alive, then we don't get any of them
896 to appear in an "info thread" command, which is quite a useful
897 behaviour.
c5aa993b 898 */
57810aa7 899bool
f6ac5f3d 900core_target::thread_alive (ptid_t ptid)
c906108c 901{
57810aa7 902 return true;
c906108c
SS
903}
904
4eb0ad19
DJ
905/* Ask the current architecture what it knows about this core file.
906 That will be used, in turn, to pick a better architecture. This
907 wrapper could be avoided if targets got a chance to specialize
15244507 908 core_target. */
4eb0ad19 909
f6ac5f3d
PA
910const struct target_desc *
911core_target::read_description ()
4eb0ad19 912{
15244507 913 if (m_core_gdbarch && gdbarch_core_read_description_p (m_core_gdbarch))
2117c711
TT
914 {
915 const struct target_desc *result;
916
15244507 917 result = gdbarch_core_read_description (m_core_gdbarch, this, core_bfd);
2117c711
TT
918 if (result != NULL)
919 return result;
920 }
4eb0ad19 921
b6a8c27b 922 return this->beneath ()->read_description ();
4eb0ad19
DJ
923}
924
a068643d 925std::string
f6ac5f3d 926core_target::pid_to_str (ptid_t ptid)
0de3b513 927{
88f38a04 928 struct inferior *inf;
a5ee0f0c 929 int pid;
0de3b513 930
a5ee0f0c
PA
931 /* The preferred way is to have a gdbarch/OS specific
932 implementation. */
15244507
PA
933 if (m_core_gdbarch != nullptr
934 && gdbarch_core_pid_to_str_p (m_core_gdbarch))
935 return gdbarch_core_pid_to_str (m_core_gdbarch, ptid);
c5504eaf 936
a5ee0f0c
PA
937 /* Otherwise, if we don't have one, we'll just fallback to
938 "process", with normal_pid_to_str. */
28439f5e 939
a5ee0f0c 940 /* Try the LWPID field first. */
e38504b3 941 pid = ptid.lwp ();
a5ee0f0c 942 if (pid != 0)
f2907e49 943 return normal_pid_to_str (ptid_t (pid));
a5ee0f0c
PA
944
945 /* Otherwise, this isn't a "threaded" core -- use the PID field, but
946 only if it isn't a fake PID. */
c9657e70 947 inf = find_inferior_ptid (ptid);
88f38a04 948 if (inf != NULL && !inf->fake_pid_p)
a5ee0f0c 949 return normal_pid_to_str (ptid);
0de3b513 950
a5ee0f0c 951 /* No luck. We simply don't have a valid PID to print. */
a068643d 952 return "<main task>";
0de3b513
PA
953}
954
f6ac5f3d
PA
955const char *
956core_target::thread_name (struct thread_info *thr)
4dfc5dbc 957{
15244507
PA
958 if (m_core_gdbarch != nullptr
959 && gdbarch_core_thread_name_p (m_core_gdbarch))
960 return gdbarch_core_thread_name (m_core_gdbarch, thr);
4dfc5dbc
JB
961 return NULL;
962}
963
57810aa7 964bool
f6ac5f3d 965core_target::has_memory ()
c35b1492
PA
966{
967 return (core_bfd != NULL);
968}
969
57810aa7 970bool
f6ac5f3d 971core_target::has_stack ()
c35b1492
PA
972{
973 return (core_bfd != NULL);
974}
975
57810aa7 976bool
f6ac5f3d 977core_target::has_registers ()
c35b1492
PA
978{
979 return (core_bfd != NULL);
980}
981
451b7c33
TT
982/* Implement the to_info_proc method. */
983
f6ac5f3d
PA
984bool
985core_target::info_proc (const char *args, enum info_proc_what request)
451b7c33
TT
986{
987 struct gdbarch *gdbarch = get_current_arch ();
988
989 /* Since this is the core file target, call the 'core_info_proc'
990 method on gdbarch, not 'info_proc'. */
991 if (gdbarch_core_info_proc_p (gdbarch))
992 gdbarch_core_info_proc (gdbarch, args, request);
c906108c 993
f6ac5f3d 994 return true;
c906108c
SS
995}
996
c906108c 997void
fba45db2 998_initialize_corelow (void)
c906108c 999{
d9f719f1 1000 add_target (core_target_info, core_target_open, filename_completer);
c906108c 1001}
This page took 1.324185 seconds and 4 git commands to generate.