Remove current_target_sections macro
[deliverable/binutils-gdb.git] / gdb / exec.c
1 /* Work with executable files, for GDB.
2
3 Copyright (C) 1988-2020 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "target.h"
24 #include "gdbcmd.h"
25 #include "language.h"
26 #include "filenames.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "completer.h"
30 #include "value.h"
31 #include "exec.h"
32 #include "observable.h"
33 #include "arch-utils.h"
34 #include "gdbthread.h"
35 #include "progspace.h"
36 #include "progspace-and-thread.h"
37 #include "gdb_bfd.h"
38 #include "gcore.h"
39 #include "source.h"
40 #include "build-id.h"
41
42 #include <fcntl.h>
43 #include "readline/tilde.h"
44 #include "gdbcore.h"
45
46 #include <ctype.h>
47 #include <sys/stat.h>
48 #include "solist.h"
49 #include <algorithm>
50 #include "gdbsupport/pathstuff.h"
51 #include "cli/cli-style.h"
52
53 void (*deprecated_file_changed_hook) (const char *);
54
55 static const target_info exec_target_info = {
56 "exec",
57 N_("Local exec file"),
58 N_("Use an executable file as a target.\n\
59 Specify the filename of the executable file.")
60 };
61
62 /* The target vector for executable files. */
63
64 struct exec_target final : public target_ops
65 {
66 const target_info &info () const override
67 { return exec_target_info; }
68
69 strata stratum () const override { return file_stratum; }
70
71 void close () override;
72 enum target_xfer_status xfer_partial (enum target_object object,
73 const char *annex,
74 gdb_byte *readbuf,
75 const gdb_byte *writebuf,
76 ULONGEST offset, ULONGEST len,
77 ULONGEST *xfered_len) override;
78 target_section_table *get_section_table () override;
79 void files_info () override;
80
81 bool has_memory () override;
82 gdb::unique_xmalloc_ptr<char> make_corefile_notes (bfd *, int *) override;
83 int find_memory_regions (find_memory_region_ftype func, void *data) override;
84 };
85
86 static exec_target exec_ops;
87
88 /* How to handle a mismatch between the current exec file and the exec
89 file determined from target. */
90
91 static const char *const exec_file_mismatch_names[]
92 = {"ask", "warn", "off", NULL };
93 enum exec_file_mismatch_mode
94 {
95 exec_file_mismatch_ask, exec_file_mismatch_warn, exec_file_mismatch_off
96 };
97 static const char *exec_file_mismatch = exec_file_mismatch_names[0];
98 static enum exec_file_mismatch_mode exec_file_mismatch_mode
99 = exec_file_mismatch_ask;
100
101 /* Show command. */
102 static void
103 show_exec_file_mismatch_command (struct ui_file *file, int from_tty,
104 struct cmd_list_element *c, const char *value)
105 {
106 fprintf_filtered (gdb_stdout,
107 _("exec-file-mismatch handling is currently \"%s\".\n"),
108 exec_file_mismatch_names[exec_file_mismatch_mode]);
109 }
110
111 /* Set command. Change the setting for range checking. */
112 static void
113 set_exec_file_mismatch_command (const char *ignore,
114 int from_tty, struct cmd_list_element *c)
115 {
116 for (enum exec_file_mismatch_mode mode = exec_file_mismatch_ask;
117 ;
118 mode = static_cast<enum exec_file_mismatch_mode>(1 + (int) mode))
119 {
120 if (strcmp (exec_file_mismatch, exec_file_mismatch_names[mode]) == 0)
121 {
122 exec_file_mismatch_mode = mode;
123 return;
124 }
125 if (mode == exec_file_mismatch_off)
126 internal_error (__FILE__, __LINE__,
127 _("Unrecognized exec-file-mismatch setting: \"%s\""),
128 exec_file_mismatch);
129 }
130 }
131
132 /* Whether to open exec and core files read-only or read-write. */
133
134 bool write_files = false;
135 static void
136 show_write_files (struct ui_file *file, int from_tty,
137 struct cmd_list_element *c, const char *value)
138 {
139 fprintf_filtered (file, _("Writing into executable and core files is %s.\n"),
140 value);
141 }
142
143
144 static void
145 exec_target_open (const char *args, int from_tty)
146 {
147 target_preopen (from_tty);
148 exec_file_attach (args, from_tty);
149 }
150
151 /* This is the target_close implementation. Clears all target
152 sections and closes all executable bfds from all program spaces. */
153
154 void
155 exec_target::close ()
156 {
157 scoped_restore_current_program_space restore_pspace;
158
159 for (struct program_space *ss : program_spaces)
160 {
161 set_current_program_space (ss);
162 ss->target_sections.clear ();
163 ss->exec_close ();
164 }
165 }
166
167 /* See gdbcore.h. */
168
169 void
170 try_open_exec_file (const char *exec_file_host, struct inferior *inf,
171 symfile_add_flags add_flags)
172 {
173 struct gdb_exception prev_err;
174
175 /* exec_file_attach and symbol_file_add_main may throw an error if the file
176 cannot be opened either locally or remotely.
177
178 This happens for example, when the file is first found in the local
179 sysroot (above), and then disappears (a TOCTOU race), or when it doesn't
180 exist in the target filesystem, or when the file does exist, but
181 is not readable.
182
183 Even without a symbol file, the remote-based debugging session should
184 continue normally instead of ending abruptly. Hence we catch thrown
185 errors/exceptions in the following code. */
186 try
187 {
188 /* We must do this step even if exec_file_host is NULL, so that
189 exec_file_attach will clear state. */
190 exec_file_attach (exec_file_host, add_flags & SYMFILE_VERBOSE);
191 }
192 catch (gdb_exception_error &err)
193 {
194 if (err.message != NULL)
195 warning ("%s", err.what ());
196
197 prev_err = std::move (err);
198 }
199
200 if (exec_file_host != NULL)
201 {
202 try
203 {
204 symbol_file_add_main (exec_file_host, add_flags);
205 }
206 catch (const gdb_exception_error &err)
207 {
208 if (!exception_print_same (prev_err, err))
209 warning ("%s", err.what ());
210 }
211 }
212 }
213
214 /* See gdbcore.h. */
215
216 void
217 validate_exec_file (int from_tty)
218 {
219 /* If user asked to ignore the mismatch, do nothing. */
220 if (exec_file_mismatch_mode == exec_file_mismatch_off)
221 return;
222
223 const char *current_exec_file = get_exec_file (0);
224 struct inferior *inf = current_inferior ();
225 /* Try to determine a filename from the process itself. */
226 const char *pid_exec_file = target_pid_to_exec_file (inf->pid);
227 bool build_id_mismatch = false;
228
229 /* If we cannot validate the exec file, return. */
230 if (current_exec_file == NULL || pid_exec_file == NULL)
231 return;
232
233 /* Try validating via build-id, if available. This is the most
234 reliable check. */
235
236 /* In case current_exec_file was changed, reopen_exec_file ensures
237 an up to date build_id (will do nothing if the file timestamp
238 did not change). If exec file changed, reopen_exec_file has
239 allocated another file name, so get_exec_file again. */
240 reopen_exec_file ();
241 current_exec_file = get_exec_file (0);
242
243 const bfd_build_id *exec_file_build_id = build_id_bfd_get (exec_bfd);
244 if (exec_file_build_id != nullptr)
245 {
246 /* Prepend the target prefix, to force gdb_bfd_open to open the
247 file on the remote file system (if indeed remote). */
248 std::string target_pid_exec_file
249 = std::string (TARGET_SYSROOT_PREFIX) + pid_exec_file;
250
251 gdb_bfd_ref_ptr abfd (gdb_bfd_open (target_pid_exec_file.c_str (),
252 gnutarget, -1, false));
253 if (abfd != nullptr)
254 {
255 const bfd_build_id *target_exec_file_build_id
256 = build_id_bfd_get (abfd.get ());
257
258 if (target_exec_file_build_id != nullptr)
259 {
260 if (exec_file_build_id->size == target_exec_file_build_id->size
261 && memcmp (exec_file_build_id->data,
262 target_exec_file_build_id->data,
263 exec_file_build_id->size) == 0)
264 {
265 /* Match. */
266 return;
267 }
268 else
269 build_id_mismatch = true;
270 }
271 }
272 }
273
274 if (build_id_mismatch)
275 {
276 std::string exec_file_target (pid_exec_file);
277
278 /* In case the exec file is not local, exec_file_target has to point at
279 the target file system. */
280 if (is_target_filename (current_exec_file) && !target_filesystem_is_local ())
281 exec_file_target = TARGET_SYSROOT_PREFIX + exec_file_target;
282
283 warning
284 (_("Build ID mismatch between current exec-file %ps\n"
285 "and automatically determined exec-file %ps\n"
286 "exec-file-mismatch handling is currently \"%s\""),
287 styled_string (file_name_style.style (), current_exec_file),
288 styled_string (file_name_style.style (), exec_file_target.c_str ()),
289 exec_file_mismatch_names[exec_file_mismatch_mode]);
290 if (exec_file_mismatch_mode == exec_file_mismatch_ask)
291 {
292 symfile_add_flags add_flags = SYMFILE_MAINLINE;
293 if (from_tty)
294 {
295 add_flags |= SYMFILE_VERBOSE;
296 add_flags |= SYMFILE_ALWAYS_CONFIRM;
297 }
298 try
299 {
300 symbol_file_add_main (exec_file_target.c_str (), add_flags);
301 exec_file_attach (exec_file_target.c_str (), from_tty);
302 }
303 catch (gdb_exception_error &err)
304 {
305 warning (_("loading %ps %s"),
306 styled_string (file_name_style.style (),
307 exec_file_target.c_str ()),
308 err.message != NULL ? err.what () : "error");
309 }
310 }
311 }
312 }
313
314 /* See gdbcore.h. */
315
316 void
317 exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty)
318 {
319 char *exec_file_target;
320 symfile_add_flags add_flags = 0;
321
322 /* Do nothing if we already have an executable filename. */
323 if (get_exec_file (0) != NULL)
324 return;
325
326 /* Try to determine a filename from the process itself. */
327 exec_file_target = target_pid_to_exec_file (pid);
328 if (exec_file_target == NULL)
329 {
330 warning (_("No executable has been specified and target does not "
331 "support\n"
332 "determining executable automatically. "
333 "Try using the \"file\" command."));
334 return;
335 }
336
337 gdb::unique_xmalloc_ptr<char> exec_file_host
338 = exec_file_find (exec_file_target, NULL);
339
340 if (defer_bp_reset)
341 add_flags |= SYMFILE_DEFER_BP_RESET;
342
343 if (from_tty)
344 add_flags |= SYMFILE_VERBOSE;
345
346 /* Attempt to open the exec file. */
347 try_open_exec_file (exec_file_host.get (), current_inferior (), add_flags);
348 }
349
350 /* Set FILENAME as the new exec file.
351
352 This function is intended to be behave essentially the same
353 as exec_file_command, except that the latter will detect when
354 a target is being debugged, and will ask the user whether it
355 should be shut down first. (If the answer is "no", then the
356 new file is ignored.)
357
358 This file is used by exec_file_command, to do the work of opening
359 and processing the exec file after any prompting has happened.
360
361 And, it is used by child_attach, when the attach command was
362 given a pid but not a exec pathname, and the attach command could
363 figure out the pathname from the pid. (In this case, we shouldn't
364 ask the user whether the current target should be shut down --
365 we're supplying the exec pathname late for good reason.) */
366
367 void
368 exec_file_attach (const char *filename, int from_tty)
369 {
370 /* First, acquire a reference to the current exec_bfd. We release
371 this at the end of the function; but acquiring it now lets the
372 BFD cache return it if this call refers to the same file. */
373 gdb_bfd_ref_ptr exec_bfd_holder = gdb_bfd_ref_ptr::new_reference (exec_bfd);
374
375 /* Remove any previous exec file. */
376 current_program_space->exec_close ();
377
378 /* Now open and digest the file the user requested, if any. */
379
380 if (!filename)
381 {
382 if (from_tty)
383 printf_unfiltered (_("No executable file now.\n"));
384
385 set_gdbarch_from_file (NULL);
386 }
387 else
388 {
389 int load_via_target = 0;
390 const char *scratch_pathname, *canonical_pathname;
391 int scratch_chan;
392 char **matching;
393
394 if (is_target_filename (filename))
395 {
396 if (target_filesystem_is_local ())
397 filename += strlen (TARGET_SYSROOT_PREFIX);
398 else
399 load_via_target = 1;
400 }
401
402 gdb::unique_xmalloc_ptr<char> canonical_storage, scratch_storage;
403 if (load_via_target)
404 {
405 /* gdb_bfd_fopen does not support "target:" filenames. */
406 if (write_files)
407 warning (_("writing into executable files is "
408 "not supported for %s sysroots"),
409 TARGET_SYSROOT_PREFIX);
410
411 scratch_pathname = filename;
412 scratch_chan = -1;
413 canonical_pathname = scratch_pathname;
414 }
415 else
416 {
417 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
418 filename, write_files ?
419 O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
420 &scratch_storage);
421 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
422 if (scratch_chan < 0)
423 {
424 int first_errno = errno;
425 char *exename = (char *) alloca (strlen (filename) + 5);
426
427 strcat (strcpy (exename, filename), ".exe");
428 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
429 exename, write_files ?
430 O_RDWR | O_BINARY
431 : O_RDONLY | O_BINARY,
432 &scratch_storage);
433 if (scratch_chan < 0)
434 errno = first_errno;
435 }
436 #endif
437 if (scratch_chan < 0)
438 perror_with_name (filename);
439
440 scratch_pathname = scratch_storage.get ();
441
442 /* gdb_bfd_open (and its variants) prefers canonicalized
443 pathname for better BFD caching. */
444 canonical_storage = gdb_realpath (scratch_pathname);
445 canonical_pathname = canonical_storage.get ();
446 }
447
448 gdb_bfd_ref_ptr temp;
449 if (write_files && !load_via_target)
450 temp = gdb_bfd_fopen (canonical_pathname, gnutarget,
451 FOPEN_RUB, scratch_chan);
452 else
453 temp = gdb_bfd_open (canonical_pathname, gnutarget, scratch_chan);
454 exec_bfd = temp.release ();
455
456 if (!exec_bfd)
457 {
458 error (_("\"%ps\": could not open as an executable file: %s."),
459 styled_string (file_name_style.style (), scratch_pathname),
460 bfd_errmsg (bfd_get_error ()));
461 }
462
463 /* gdb_realpath_keepfile resolves symlinks on the local
464 filesystem and so cannot be used for "target:" files. */
465 gdb_assert (current_program_space->exec_filename == nullptr);
466 if (load_via_target)
467 current_program_space->exec_filename
468 = make_unique_xstrdup (bfd_get_filename (exec_bfd));
469 else
470 current_program_space->exec_filename
471 = gdb_realpath_keepfile (scratch_pathname);
472
473 if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
474 {
475 /* Make sure to close exec_bfd, or else "run" might try to use
476 it. */
477 current_program_space->exec_close ();
478 error (_("\"%ps\": not in executable format: %s"),
479 styled_string (file_name_style.style (), scratch_pathname),
480 gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
481 }
482
483 target_section_table sections = build_section_table (exec_bfd);
484
485 current_program_space->ebfd_mtime = bfd_get_mtime (exec_bfd);
486
487 validate_files ();
488
489 set_gdbarch_from_file (exec_bfd);
490
491 /* Add the executable's sections to the current address spaces'
492 list of sections. This possibly pushes the exec_ops
493 target. */
494 add_target_sections (&exec_bfd, sections);
495
496 /* Tell display code (if any) about the changed file name. */
497 if (deprecated_exec_file_display_hook)
498 (*deprecated_exec_file_display_hook) (filename);
499 }
500
501 bfd_cache_close_all ();
502 gdb::observers::executable_changed.notify ();
503 }
504
505 /* Process the first arg in ARGS as the new exec file.
506
507 Note that we have to explicitly ignore additional args, since we can
508 be called from file_command(), which also calls symbol_file_command()
509 which can take multiple args.
510
511 If ARGS is NULL, we just want to close the exec file. */
512
513 static void
514 exec_file_command (const char *args, int from_tty)
515 {
516 if (from_tty && target_has_execution ()
517 && !query (_("A program is being debugged already.\n"
518 "Are you sure you want to change the file? ")))
519 error (_("File not changed."));
520
521 if (args)
522 {
523 /* Scan through the args and pick up the first non option arg
524 as the filename. */
525
526 gdb_argv built_argv (args);
527 char **argv = built_argv.get ();
528
529 for (; (*argv != NULL) && (**argv == '-'); argv++)
530 {;
531 }
532 if (*argv == NULL)
533 error (_("No executable file name was specified"));
534
535 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (*argv));
536 exec_file_attach (filename.get (), from_tty);
537 }
538 else
539 exec_file_attach (NULL, from_tty);
540 }
541
542 /* Set both the exec file and the symbol file, in one command.
543 What a novelty. Why did GDB go through four major releases before this
544 command was added? */
545
546 static void
547 file_command (const char *arg, int from_tty)
548 {
549 /* FIXME, if we lose on reading the symbol file, we should revert
550 the exec file, but that's rough. */
551 exec_file_command (arg, from_tty);
552 symbol_file_command (arg, from_tty);
553 if (deprecated_file_changed_hook)
554 deprecated_file_changed_hook (arg);
555 }
556 \f
557
558 /* Builds a section table, given args BFD, TABLE. */
559
560 target_section_table
561 build_section_table (struct bfd *some_bfd)
562 {
563 target_section_table table;
564
565 for (asection *asect : gdb_bfd_sections (some_bfd))
566 {
567 flagword aflag;
568
569 /* Check the section flags, but do not discard zero-length
570 sections, since some symbols may still be attached to this
571 section. For instance, we encountered on sparc-solaris 2.10
572 a shared library with an empty .bss section to which a symbol
573 named "_end" was attached. The address of this symbol still
574 needs to be relocated. */
575 aflag = bfd_section_flags (asect);
576 if (!(aflag & SEC_ALLOC))
577 continue;
578
579 table.emplace_back (bfd_section_vma (asect),
580 bfd_section_vma (asect) + bfd_section_size (asect),
581 asect);
582 }
583
584 return table;
585 }
586
587 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
588 current set of target sections. */
589
590 void
591 add_target_sections (void *owner,
592 const target_section_table &sections)
593 {
594 target_section_table *table = &current_program_space->target_sections;
595
596 if (!sections.empty ())
597 {
598 for (const target_section &s : sections)
599 {
600 table->push_back (s);
601 table->back ().owner = owner;
602 }
603
604 scoped_restore_current_pspace_and_thread restore_pspace_thread;
605 program_space *curr_pspace = current_program_space;
606
607 /* If these are the first file sections we can provide memory
608 from, push the file_stratum target. Must do this in all
609 inferiors sharing the program space. */
610 for (inferior *inf : all_inferiors ())
611 {
612 if (inf->pspace != curr_pspace)
613 continue;
614
615 if (inf->target_is_pushed (&exec_ops))
616 continue;
617
618 switch_to_inferior_no_thread (inf);
619 push_target (&exec_ops);
620 }
621 }
622 }
623
624 /* Add the sections of OBJFILE to the current set of target sections. */
625
626 void
627 add_target_sections_of_objfile (struct objfile *objfile)
628 {
629 target_section_table *table = &current_program_space->target_sections;
630 struct obj_section *osect;
631
632 gdb_assert (objfile != nullptr);
633
634 /* Compute the number of sections to add. */
635 ALL_OBJFILE_OSECTIONS (objfile, osect)
636 {
637 if (bfd_section_size (osect->the_bfd_section) == 0)
638 continue;
639
640 table->emplace_back (obj_section_addr (osect),
641 obj_section_endaddr (osect),
642 osect->the_bfd_section, (void *) objfile);
643 }
644 }
645
646 /* Remove all target sections owned by OWNER.
647 OWNER must be the same value passed to add_target_sections. */
648
649 void
650 remove_target_sections (void *owner)
651 {
652 target_section_table *table = &current_program_space->target_sections;
653
654 gdb_assert (owner != NULL);
655
656 auto it = std::remove_if (table->begin (),
657 table->end (),
658 [&] (target_section &sect)
659 {
660 return sect.owner == owner;
661 });
662 table->erase (it, table->end ());
663
664 /* If we don't have any more sections to read memory from,
665 remove the file_stratum target from the stack of each
666 inferior sharing the program space. */
667 if (table->empty ())
668 {
669 scoped_restore_current_pspace_and_thread restore_pspace_thread;
670 program_space *curr_pspace = current_program_space;
671
672 for (inferior *inf : all_inferiors ())
673 {
674 if (inf->pspace != curr_pspace)
675 continue;
676
677 if (!inf->pspace->target_sections.empty ())
678 continue;
679
680 switch_to_inferior_no_thread (inf);
681 unpush_target (&exec_ops);
682 }
683 }
684 }
685
686 /* See exec.h. */
687
688 void
689 exec_on_vfork ()
690 {
691 if (!current_program_space->target_sections.empty ())
692 push_target (&exec_ops);
693 }
694
695 \f
696
697 enum target_xfer_status
698 exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
699 ULONGEST len, ULONGEST *xfered_len)
700 {
701 /* It's unduly pedantic to refuse to look at the executable for
702 read-only pieces; so do the equivalent of readonly regions aka
703 QTro packet. */
704 if (exec_bfd != NULL)
705 {
706 asection *s;
707 bfd_size_type size;
708 bfd_vma vma;
709
710 for (s = exec_bfd->sections; s; s = s->next)
711 {
712 if ((s->flags & SEC_LOAD) == 0
713 || (s->flags & SEC_READONLY) == 0)
714 continue;
715
716 vma = s->vma;
717 size = bfd_section_size (s);
718 if (vma <= offset && offset < (vma + size))
719 {
720 ULONGEST amt;
721
722 amt = (vma + size) - offset;
723 if (amt > len)
724 amt = len;
725
726 amt = bfd_get_section_contents (exec_bfd, s,
727 readbuf, offset - vma, amt);
728
729 if (amt == 0)
730 return TARGET_XFER_EOF;
731 else
732 {
733 *xfered_len = amt;
734 return TARGET_XFER_OK;
735 }
736 }
737 }
738 }
739
740 /* Indicate failure to find the requested memory block. */
741 return TARGET_XFER_E_IO;
742 }
743
744 /* Return all read-only memory ranges found in the target section
745 table defined by SECTIONS and SECTIONS_END, starting at (and
746 intersected with) MEMADDR for LEN bytes. */
747
748 static std::vector<mem_range>
749 section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
750 const target_section_table &sections)
751 {
752 std::vector<mem_range> memory;
753
754 for (const target_section &p : sections)
755 {
756 if ((bfd_section_flags (p.the_bfd_section) & SEC_READONLY) == 0)
757 continue;
758
759 /* Copy the meta-data, adjusted. */
760 if (mem_ranges_overlap (p.addr, p.endaddr - p.addr, memaddr, len))
761 {
762 ULONGEST lo1, hi1, lo2, hi2;
763
764 lo1 = memaddr;
765 hi1 = memaddr + len;
766
767 lo2 = p.addr;
768 hi2 = p.endaddr;
769
770 CORE_ADDR start = std::max (lo1, lo2);
771 int length = std::min (hi1, hi2) - start;
772
773 memory.emplace_back (start, length);
774 }
775 }
776
777 return memory;
778 }
779
780 enum target_xfer_status
781 section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
782 ULONGEST len, ULONGEST *xfered_len)
783 {
784 target_section_table *table = target_get_section_table (&exec_ops);
785 std::vector<mem_range> available_memory
786 = section_table_available_memory (offset, len, *table);
787
788 normalize_mem_ranges (&available_memory);
789
790 for (const mem_range &r : available_memory)
791 {
792 if (mem_ranges_overlap (r.start, r.length, offset, len))
793 {
794 CORE_ADDR end;
795 enum target_xfer_status status;
796
797 /* Get the intersection window. */
798 end = std::min<CORE_ADDR> (offset + len, r.start + r.length);
799
800 gdb_assert (end - offset <= len);
801
802 if (offset >= r.start)
803 status = exec_read_partial_read_only (readbuf, offset,
804 end - offset,
805 xfered_len);
806 else
807 {
808 *xfered_len = r.start - offset;
809 status = TARGET_XFER_UNAVAILABLE;
810 }
811 return status;
812 }
813 }
814
815 *xfered_len = len;
816 return TARGET_XFER_UNAVAILABLE;
817 }
818
819 enum target_xfer_status
820 section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
821 ULONGEST offset, ULONGEST len,
822 ULONGEST *xfered_len,
823 const target_section_table &sections,
824 gdb::function_view<bool
825 (const struct target_section *)> match_cb)
826 {
827 int res;
828 ULONGEST memaddr = offset;
829 ULONGEST memend = memaddr + len;
830
831 gdb_assert (len != 0);
832
833 for (const target_section &p : sections)
834 {
835 struct bfd_section *asect = p.the_bfd_section;
836 bfd *abfd = asect->owner;
837
838 if (match_cb != nullptr && !match_cb (&p))
839 continue; /* not the section we need. */
840 if (memaddr >= p.addr)
841 {
842 if (memend <= p.endaddr)
843 {
844 /* Entire transfer is within this section. */
845 if (writebuf)
846 res = bfd_set_section_contents (abfd, asect,
847 writebuf, memaddr - p.addr,
848 len);
849 else
850 res = bfd_get_section_contents (abfd, asect,
851 readbuf, memaddr - p.addr,
852 len);
853
854 if (res != 0)
855 {
856 *xfered_len = len;
857 return TARGET_XFER_OK;
858 }
859 else
860 return TARGET_XFER_EOF;
861 }
862 else if (memaddr >= p.endaddr)
863 {
864 /* This section ends before the transfer starts. */
865 continue;
866 }
867 else
868 {
869 /* This section overlaps the transfer. Just do half. */
870 len = p.endaddr - memaddr;
871 if (writebuf)
872 res = bfd_set_section_contents (abfd, asect,
873 writebuf, memaddr - p.addr,
874 len);
875 else
876 res = bfd_get_section_contents (abfd, asect,
877 readbuf, memaddr - p.addr,
878 len);
879 if (res != 0)
880 {
881 *xfered_len = len;
882 return TARGET_XFER_OK;
883 }
884 else
885 return TARGET_XFER_EOF;
886 }
887 }
888 }
889
890 return TARGET_XFER_EOF; /* We can't help. */
891 }
892
893 target_section_table *
894 exec_target::get_section_table ()
895 {
896 return &current_program_space->target_sections;
897 }
898
899 enum target_xfer_status
900 exec_target::xfer_partial (enum target_object object,
901 const char *annex, gdb_byte *readbuf,
902 const gdb_byte *writebuf,
903 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
904 {
905 target_section_table *table = get_section_table ();
906
907 if (object == TARGET_OBJECT_MEMORY)
908 return section_table_xfer_memory_partial (readbuf, writebuf,
909 offset, len, xfered_len,
910 *table);
911 else
912 return TARGET_XFER_E_IO;
913 }
914 \f
915
916 void
917 print_section_info (target_section_table *t, bfd *abfd)
918 {
919 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
920 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
921 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
922
923 printf_filtered ("\t`%ps', ",
924 styled_string (file_name_style.style (),
925 bfd_get_filename (abfd)));
926 wrap_here (" ");
927 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
928 if (abfd == exec_bfd)
929 {
930 /* gcc-3.4 does not like the initialization in
931 <p == t->sections_end>. */
932 bfd_vma displacement = 0;
933 bfd_vma entry_point;
934 bool found = false;
935
936 for (const target_section &p : *t)
937 {
938 struct bfd_section *psect = p.the_bfd_section;
939
940 if ((bfd_section_flags (psect) & (SEC_ALLOC | SEC_LOAD))
941 != (SEC_ALLOC | SEC_LOAD))
942 continue;
943
944 if (bfd_section_vma (psect) <= abfd->start_address
945 && abfd->start_address < (bfd_section_vma (psect)
946 + bfd_section_size (psect)))
947 {
948 displacement = p.addr - bfd_section_vma (psect);
949 found = true;
950 break;
951 }
952 }
953 if (!found)
954 warning (_("Cannot find section for the entry point of %ps."),
955 styled_string (file_name_style.style (),
956 bfd_get_filename (abfd)));
957
958 entry_point = gdbarch_addr_bits_remove (gdbarch,
959 bfd_get_start_address (abfd)
960 + displacement);
961 printf_filtered (_("\tEntry point: %s\n"),
962 paddress (gdbarch, entry_point));
963 }
964 for (const target_section &p : *t)
965 {
966 struct bfd_section *psect = p.the_bfd_section;
967 bfd *pbfd = psect->owner;
968
969 printf_filtered ("\t%s", hex_string_custom (p.addr, wid));
970 printf_filtered (" - %s", hex_string_custom (p.endaddr, wid));
971
972 /* FIXME: A format of "08l" is not wide enough for file offsets
973 larger than 4GB. OTOH, making it "016l" isn't desirable either
974 since most output will then be much wider than necessary. It
975 may make sense to test the size of the file and choose the
976 format string accordingly. */
977 /* FIXME: i18n: Need to rewrite this sentence. */
978 if (info_verbose)
979 printf_filtered (" @ %s",
980 hex_string_custom (psect->filepos, 8));
981 printf_filtered (" is %s", bfd_section_name (psect));
982 if (pbfd != abfd)
983 printf_filtered (" in %ps",
984 styled_string (file_name_style.style (),
985 bfd_get_filename (pbfd)));
986 printf_filtered ("\n");
987 }
988 }
989
990 void
991 exec_target::files_info ()
992 {
993 if (exec_bfd)
994 print_section_info (&current_program_space->target_sections, exec_bfd);
995 else
996 puts_filtered (_("\t<no file loaded>\n"));
997 }
998
999 static void
1000 set_section_command (const char *args, int from_tty)
1001 {
1002 const char *secname;
1003 unsigned seclen;
1004 unsigned long secaddr;
1005 char secprint[100];
1006 long offset;
1007
1008 if (args == 0)
1009 error (_("Must specify section name and its virtual address"));
1010
1011 /* Parse out section name. */
1012 for (secname = args; !isspace (*args); args++);
1013 seclen = args - secname;
1014
1015 /* Parse out new virtual address. */
1016 secaddr = parse_and_eval_address (args);
1017
1018 for (target_section &p : current_program_space->target_sections)
1019 {
1020 if (!strncmp (secname, bfd_section_name (p.the_bfd_section), seclen)
1021 && bfd_section_name (p.the_bfd_section)[seclen] == '\0')
1022 {
1023 offset = secaddr - p.addr;
1024 p.addr += offset;
1025 p.endaddr += offset;
1026 if (from_tty)
1027 exec_ops.files_info ();
1028 return;
1029 }
1030 }
1031 if (seclen >= sizeof (secprint))
1032 seclen = sizeof (secprint) - 1;
1033 strncpy (secprint, secname, seclen);
1034 secprint[seclen] = '\0';
1035 error (_("Section %s not found"), secprint);
1036 }
1037
1038 /* If we can find a section in FILENAME with BFD index INDEX, adjust
1039 it to ADDRESS. */
1040
1041 void
1042 exec_set_section_address (const char *filename, int index, CORE_ADDR address)
1043 {
1044 for (target_section &p : current_program_space->target_sections)
1045 {
1046 if (filename_cmp (filename,
1047 bfd_get_filename (p.the_bfd_section->owner)) == 0
1048 && index == p.the_bfd_section->index)
1049 {
1050 p.endaddr += address - p.addr;
1051 p.addr = address;
1052 }
1053 }
1054 }
1055
1056 bool
1057 exec_target::has_memory ()
1058 {
1059 /* We can provide memory if we have any file/target sections to read
1060 from. */
1061 return !current_program_space->target_sections.empty ();
1062 }
1063
1064 gdb::unique_xmalloc_ptr<char>
1065 exec_target::make_corefile_notes (bfd *obfd, int *note_size)
1066 {
1067 error (_("Can't create a corefile"));
1068 }
1069
1070 int
1071 exec_target::find_memory_regions (find_memory_region_ftype func, void *data)
1072 {
1073 return objfile_find_memory_regions (this, func, data);
1074 }
1075
1076 void _initialize_exec ();
1077 void
1078 _initialize_exec ()
1079 {
1080 struct cmd_list_element *c;
1081
1082 if (!dbx_commands)
1083 {
1084 c = add_cmd ("file", class_files, file_command, _("\
1085 Use FILE as program to be debugged.\n\
1086 It is read for its symbols, for getting the contents of pure memory,\n\
1087 and it is the program executed when you use the `run' command.\n\
1088 If FILE cannot be found as specified, your execution directory path\n\
1089 ($PATH) is searched for a command of that name.\n\
1090 No arg means to have no executable file and no symbols."), &cmdlist);
1091 set_cmd_completer (c, filename_completer);
1092 }
1093
1094 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
1095 Use FILE as program for getting contents of pure memory.\n\
1096 If FILE cannot be found as specified, your execution directory path\n\
1097 is searched for a command of that name.\n\
1098 No arg means have no executable file."), &cmdlist);
1099 set_cmd_completer (c, filename_completer);
1100
1101 add_com ("section", class_files, set_section_command, _("\
1102 Change the base address of section SECTION of the exec file to ADDR.\n\
1103 This can be used if the exec file does not contain section addresses,\n\
1104 (such as in the a.out format), or when the addresses specified in the\n\
1105 file itself are wrong. Each section must be changed separately. The\n\
1106 ``info files'' command lists all the sections and their addresses."));
1107
1108 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
1109 Set writing into executable and core files."), _("\
1110 Show writing into executable and core files."), NULL,
1111 NULL,
1112 show_write_files,
1113 &setlist, &showlist);
1114
1115 add_setshow_enum_cmd ("exec-file-mismatch", class_support,
1116 exec_file_mismatch_names,
1117 &exec_file_mismatch,
1118 _("\
1119 Set exec-file-mismatch handling (ask|warn|off)."),
1120 _("\
1121 Show exec-file-mismatch handling (ask|warn|off)."),
1122 _("\
1123 Specifies how to handle a mismatch between the current exec-file\n\
1124 loaded by GDB and the exec-file automatically determined when attaching\n\
1125 to a process:\n\n\
1126 ask - warn the user and ask whether to load the determined exec-file.\n\
1127 warn - warn the user, but do not change the exec-file.\n\
1128 off - do not check for mismatch.\n\
1129 \n\
1130 GDB detects a mismatch by comparing the build IDs of the files.\n\
1131 If the user confirms loading the determined exec-file, then its symbols\n\
1132 will be loaded as well."),
1133 set_exec_file_mismatch_command,
1134 show_exec_file_mismatch_command,
1135 &setlist, &showlist);
1136
1137 add_target (exec_target_info, exec_target_open, filename_completer);
1138 }
This page took 0.051406 seconds and 5 git commands to generate.