1 /* Work with executable files, for GDB.
3 Copyright (C) 1988-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "cli/cli-cmds.h"
25 #include "filenames.h"
28 #include "completer.h"
31 #include "observable.h"
32 #include "arch-utils.h"
33 #include "gdbthread.h"
34 #include "progspace.h"
35 #include "progspace-and-thread.h"
42 #include "readline/tilde.h"
49 #include "gdbsupport/pathstuff.h"
50 #include "cli/cli-style.h"
51 #include "gdbsupport/buildargv.h"
53 void (*deprecated_file_changed_hook
) (const char *);
55 static const target_info exec_target_info
= {
57 N_("Local exec file"),
58 N_("Use an executable file as a target.\n\
59 Specify the filename of the executable file.")
62 /* The target vector for executable files. */
64 struct exec_target final
: public target_ops
66 const target_info
&info () const override
67 { return exec_target_info
; }
69 strata
stratum () const override
{ return file_stratum
; }
71 void close () override
;
72 enum target_xfer_status
xfer_partial (enum target_object object
,
75 const gdb_byte
*writebuf
,
76 ULONGEST offset
, ULONGEST len
,
77 ULONGEST
*xfered_len
) override
;
78 void files_info () override
;
80 bool has_memory () override
;
81 gdb::unique_xmalloc_ptr
<char> make_corefile_notes (bfd
*, int *) override
;
82 int find_memory_regions (find_memory_region_ftype func
, void *data
) override
;
85 static exec_target exec_ops
;
87 /* How to handle a mismatch between the current exec file and the exec
88 file determined from target. */
90 static const char *const exec_file_mismatch_names
[]
91 = {"ask", "warn", "off", NULL
};
92 enum exec_file_mismatch_mode
94 exec_file_mismatch_ask
, exec_file_mismatch_warn
, exec_file_mismatch_off
96 static const char *exec_file_mismatch
= exec_file_mismatch_names
[0];
97 static enum exec_file_mismatch_mode exec_file_mismatch_mode
98 = exec_file_mismatch_ask
;
102 show_exec_file_mismatch_command (struct ui_file
*file
, int from_tty
,
103 struct cmd_list_element
*c
, const char *value
)
106 _("exec-file-mismatch handling is currently \"%s\".\n"),
107 exec_file_mismatch_names
[exec_file_mismatch_mode
]);
110 /* Set command. Change the setting for range checking. */
112 set_exec_file_mismatch_command (const char *ignore
,
113 int from_tty
, struct cmd_list_element
*c
)
115 for (enum exec_file_mismatch_mode mode
= exec_file_mismatch_ask
;
117 mode
= static_cast<enum exec_file_mismatch_mode
>(1 + (int) mode
))
119 if (strcmp (exec_file_mismatch
, exec_file_mismatch_names
[mode
]) == 0)
121 exec_file_mismatch_mode
= mode
;
124 if (mode
== exec_file_mismatch_off
)
125 internal_error (_("Unrecognized exec-file-mismatch setting: \"%s\""),
130 /* Whether to open exec and core files read-only or read-write. */
132 bool write_files
= false;
134 show_write_files (struct ui_file
*file
, int from_tty
,
135 struct cmd_list_element
*c
, const char *value
)
137 gdb_printf (file
, _("Writing into executable and core files is %s.\n"),
143 exec_target_open (const char *args
, int from_tty
)
145 target_preopen (from_tty
);
147 std::string filename
= extract_single_filename_arg (args
);
148 exec_file_attach (filename
.empty () ? nullptr : filename
.c_str (),
152 /* This is the target_close implementation. Clears all target
153 sections and closes all executable bfds from all program spaces. */
156 exec_target::close ()
158 for (struct program_space
*ss
: program_spaces
)
160 ss
->clear_target_sections ();
168 try_open_exec_file (const char *exec_file_host
, struct inferior
*inf
,
169 symfile_add_flags add_flags
)
171 struct gdb_exception prev_err
;
173 /* exec_file_attach and symbol_file_add_main may throw an error if the file
174 cannot be opened either locally or remotely.
176 This happens for example, when the file is first found in the local
177 sysroot (above), and then disappears (a TOCTOU race), or when it doesn't
178 exist in the target filesystem, or when the file does exist, but
181 Even without a symbol file, the remote-based debugging session should
182 continue normally instead of ending abruptly. Hence we catch thrown
183 errors/exceptions in the following code. */
186 /* We must do this step even if exec_file_host is NULL, so that
187 exec_file_attach will clear state. */
188 exec_file_attach (exec_file_host
, add_flags
& SYMFILE_VERBOSE
);
190 catch (gdb_exception_error
&err
)
192 if (err
.message
!= NULL
)
193 warning ("%s", err
.what ());
195 prev_err
= std::move (err
);
198 if (exec_file_host
!= NULL
)
202 symbol_file_add_main (exec_file_host
, add_flags
);
204 catch (const gdb_exception_error
&err
)
207 warning ("%s", err
.what ());
215 validate_exec_file (int from_tty
)
217 /* If user asked to ignore the mismatch, do nothing. */
218 if (exec_file_mismatch_mode
== exec_file_mismatch_off
)
221 const char *current_exec_file
= current_program_space
->exec_filename ();
222 struct inferior
*inf
= current_inferior ();
223 /* Try to determine a filename from the process itself. */
224 const char *pid_exec_file
= target_pid_to_exec_file (inf
->pid
);
225 bool build_id_mismatch
= false;
227 /* If we cannot validate the exec file, return. */
228 if (current_exec_file
== NULL
|| pid_exec_file
== NULL
)
231 /* Try validating via build-id, if available. This is the most
234 /* In case current_exec_file was changed, reopen_exec_file ensures
235 an up to date build_id (will do nothing if the file timestamp
236 did not change). If exec file changed, reopen_exec_file has
237 allocated another file name, so get_exec_file again. */
239 current_exec_file
= current_program_space
->exec_filename ();
241 const bfd_build_id
*exec_file_build_id
242 = build_id_bfd_get (current_program_space
->exec_bfd ());
243 if (exec_file_build_id
!= nullptr)
245 /* Prepend the target prefix, to force gdb_bfd_open to open the
246 file on the remote file system (if indeed remote). */
247 std::string target_pid_exec_file
248 = std::string (TARGET_SYSROOT_PREFIX
) + pid_exec_file
;
250 gdb_bfd_ref_ptr
abfd (gdb_bfd_open (target_pid_exec_file
.c_str (),
251 gnutarget
, -1, false));
254 const bfd_build_id
*target_exec_file_build_id
255 = build_id_bfd_get (abfd
.get ());
257 if (target_exec_file_build_id
!= nullptr)
259 if (build_id_equal (exec_file_build_id
,
260 target_exec_file_build_id
))
266 build_id_mismatch
= true;
271 if (build_id_mismatch
)
273 std::string
exec_file_target (pid_exec_file
);
275 /* In case the exec file is not local, exec_file_target has to point at
276 the target file system. */
277 if (is_target_filename (current_exec_file
) && !target_filesystem_is_local ())
278 exec_file_target
= TARGET_SYSROOT_PREFIX
+ exec_file_target
;
281 (_("Build ID mismatch between current exec-file %ps\n"
282 "and automatically determined exec-file %ps\n"
283 "exec-file-mismatch handling is currently \"%s\""),
284 styled_string (file_name_style
.style (), current_exec_file
),
285 styled_string (file_name_style
.style (), exec_file_target
.c_str ()),
286 exec_file_mismatch_names
[exec_file_mismatch_mode
]);
287 if (exec_file_mismatch_mode
== exec_file_mismatch_ask
)
289 symfile_add_flags add_flags
= SYMFILE_MAINLINE
;
292 add_flags
|= SYMFILE_VERBOSE
;
293 add_flags
|= SYMFILE_ALWAYS_CONFIRM
;
297 symbol_file_add_main (exec_file_target
.c_str (), add_flags
);
298 exec_file_attach (exec_file_target
.c_str (), from_tty
);
300 catch (const gdb_exception_error
&err
)
302 warning (_("loading %ps %s"),
303 styled_string (file_name_style
.style (),
304 exec_file_target
.c_str ()),
305 err
.message
!= NULL
? err
.what () : "error");
314 exec_file_locate_attach (int pid
, int defer_bp_reset
, int from_tty
)
316 const char *exec_file_target
;
317 symfile_add_flags add_flags
= 0;
319 /* Do nothing if we already have an executable filename. */
320 if (current_program_space
->exec_filename () != nullptr)
323 /* Try to determine a filename from the process itself. */
324 exec_file_target
= target_pid_to_exec_file (pid
);
325 if (exec_file_target
== NULL
)
327 warning (_("No executable has been specified and target does not "
329 "determining executable automatically. "
330 "Try using the \"%ps\" command."),
331 styled_string (command_style
.style (), "file"));
335 gdb::unique_xmalloc_ptr
<char> exec_file_host
336 = exec_file_find (exec_file_target
, NULL
);
339 add_flags
|= SYMFILE_DEFER_BP_RESET
;
342 add_flags
|= SYMFILE_VERBOSE
;
344 /* Attempt to open the exec file. */
345 try_open_exec_file (exec_file_host
.get (), current_inferior (), add_flags
);
348 /* Set FILENAME as the new exec file.
350 This function is intended to be behave essentially the same
351 as exec_file_command, except that the latter will detect when
352 a target is being debugged, and will ask the user whether it
353 should be shut down first. (If the answer is "no", then the
354 new file is ignored.)
356 This file is used by exec_file_command, to do the work of opening
357 and processing the exec file after any prompting has happened.
359 And, it is used by child_attach, when the attach command was
360 given a pid but not a exec pathname, and the attach command could
361 figure out the pathname from the pid. (In this case, we shouldn't
362 ask the user whether the current target should be shut down --
363 we're supplying the exec pathname late for good reason.) */
366 exec_file_attach (const char *filename
, int from_tty
)
368 /* First, acquire a reference to the exec_bfd. We release
369 this at the end of the function; but acquiring it now lets the
370 BFD cache return it if this call refers to the same file. */
371 gdb_bfd_ref_ptr exec_bfd_holder
372 = gdb_bfd_ref_ptr::new_reference (current_program_space
->exec_bfd ());
374 /* Remove any previous exec file. */
375 current_program_space
->exec_close ();
377 /* Now open and digest the file the user requested, if any. */
382 gdb_printf (_("No executable file now.\n"));
384 set_gdbarch_from_file (NULL
);
388 int load_via_target
= 0;
389 const char *scratch_pathname
, *canonical_pathname
;
393 if (is_target_filename (filename
))
395 if (target_filesystem_is_local ())
396 filename
+= strlen (TARGET_SYSROOT_PREFIX
);
401 gdb::unique_xmalloc_ptr
<char> canonical_storage
, scratch_storage
;
404 /* gdb_bfd_fopen does not support "target:" filenames. */
406 warning (_("writing into executable files is "
407 "not supported for %s sysroots"),
408 TARGET_SYSROOT_PREFIX
);
410 scratch_pathname
= filename
;
412 canonical_pathname
= scratch_pathname
;
416 scratch_chan
= openp (getenv ("PATH"), OPF_TRY_CWD_FIRST
,
417 filename
, write_files
?
418 O_RDWR
| O_BINARY
: O_RDONLY
| O_BINARY
,
420 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
421 if (scratch_chan
< 0)
423 int first_errno
= errno
;
424 char *exename
= (char *) alloca (strlen (filename
) + 5);
426 strcat (strcpy (exename
, filename
), ".exe");
427 scratch_chan
= openp (getenv ("PATH"), OPF_TRY_CWD_FIRST
,
428 exename
, write_files
?
430 : O_RDONLY
| O_BINARY
,
432 if (scratch_chan
< 0)
436 if (scratch_chan
< 0)
437 perror_with_name (filename
);
439 scratch_pathname
= scratch_storage
.get ();
441 /* gdb_bfd_open (and its variants) prefers canonicalized
442 pathname for better BFD caching. */
443 canonical_storage
= gdb_realpath (scratch_pathname
);
444 canonical_pathname
= canonical_storage
.get ();
447 gdb_bfd_ref_ptr temp
;
448 if (write_files
&& !load_via_target
)
449 temp
= gdb_bfd_fopen (canonical_pathname
, gnutarget
,
450 FOPEN_RUB
, scratch_chan
);
452 temp
= gdb_bfd_open (canonical_pathname
, gnutarget
, scratch_chan
);
453 current_program_space
->set_exec_bfd (std::move (temp
));
455 if (!current_program_space
->exec_bfd ())
457 error (_("\"%s\": could not open as an executable file: %s."),
458 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
461 /* gdb_realpath_keepfile resolves symlinks on the local
462 filesystem and so cannot be used for "target:" files. */
463 gdb_assert (current_program_space
->exec_filename () == nullptr);
465 current_program_space
->set_exec_filename
467 (bfd_get_filename (current_program_space
->exec_bfd ())));
469 current_program_space
->set_exec_filename
470 (make_unique_xstrdup (gdb_realpath_keepfile
471 (scratch_pathname
).c_str ()));
473 if (!bfd_check_format_matches (current_program_space
->exec_bfd (),
474 bfd_object
, &matching
))
476 /* Make sure to close exec_bfd, or else "run" might try to use
478 current_program_space
->exec_close ();
479 error (_("\"%s\": not in executable format: %s"), scratch_pathname
,
480 gdb_bfd_errmsg (bfd_get_error (), matching
).c_str ());
483 std::vector
<target_section
> sections
484 = build_section_table (current_program_space
->exec_bfd ());
486 current_program_space
->ebfd_mtime
487 = gdb_bfd_get_mtime (current_program_space
->exec_bfd ());
491 set_gdbarch_from_file (current_program_space
->exec_bfd ());
493 /* Add the executable's sections to the current address spaces'
494 list of sections. This possibly pushes the exec_ops
496 current_program_space
->add_target_sections
497 (current_program_space
->ebfd
.get (), sections
);
500 /* Are are loading the same executable? */
501 bfd
*prev_bfd
= exec_bfd_holder
.get ();
502 bfd
*curr_bfd
= current_program_space
->exec_bfd ();
503 bool reload_p
= (((prev_bfd
!= nullptr) == (curr_bfd
!= nullptr))
504 && (prev_bfd
== nullptr
505 || (strcmp (bfd_get_filename (prev_bfd
),
506 bfd_get_filename (curr_bfd
)) == 0)));
508 gdb::observers::executable_changed
.notify (current_program_space
, reload_p
);
514 no_executable_specified_error ()
516 error (_("No executable file specified.\n\
517 Use the \"file\" or \"exec-file\" command."));
520 /* Process the first arg in ARGS as the new exec file.
522 Note that we have to explicitly ignore additional args, since we can
523 be called from file_command(), which also calls symbol_file_command()
524 which can take multiple args.
526 If ARGS is NULL, we just want to close the exec file. */
529 exec_file_command (const char *args
, int from_tty
)
531 if (from_tty
&& target_has_execution ()
532 && !query (_("A program is being debugged already.\n"
533 "Are you sure you want to change the file? ")))
534 error (_("File not changed."));
538 /* Scan through the args and pick up the first non option arg
541 gdb_argv
built_argv (args
);
542 char **argv
= built_argv
.get ();
544 for (; (*argv
!= NULL
) && (**argv
== '-'); argv
++)
548 error (_("No executable file name was specified"));
550 gdb::unique_xmalloc_ptr
<char> filename (tilde_expand (*argv
));
551 exec_file_attach (filename
.get (), from_tty
);
554 exec_file_attach (NULL
, from_tty
);
557 /* Set both the exec file and the symbol file, in one command.
558 What a novelty. Why did GDB go through four major releases before this
559 command was added? */
562 file_command (const char *arg
, int from_tty
)
564 /* FIXME, if we lose on reading the symbol file, we should revert
565 the exec file, but that's rough. */
566 exec_file_command (arg
, from_tty
);
567 symbol_file_command (arg
, from_tty
);
568 if (deprecated_file_changed_hook
)
569 deprecated_file_changed_hook (arg
);
573 /* Builds a section table, given args BFD, TABLE. */
575 std::vector
<target_section
>
576 build_section_table (struct bfd
*some_bfd
)
578 std::vector
<target_section
> table
;
580 for (asection
*asect
: gdb_bfd_sections (some_bfd
))
584 /* Check the section flags, but do not discard zero-length
585 sections, since some symbols may still be attached to this
586 section. For instance, we encountered on sparc-solaris 2.10
587 a shared library with an empty .bss section to which a symbol
588 named "_end" was attached. The address of this symbol still
589 needs to be relocated. */
590 aflag
= bfd_section_flags (asect
);
591 if (!(aflag
& SEC_ALLOC
))
594 table
.emplace_back (bfd_section_vma (asect
),
595 bfd_section_vma (asect
) + bfd_section_size (asect
),
602 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
603 current set of target sections. */
606 program_space::add_target_sections
607 (target_section_owner owner
, const std::vector
<target_section
> §ions
)
609 if (!sections
.empty ())
611 for (const target_section
&s
: sections
)
613 m_target_sections
.push_back (s
);
614 m_target_sections
.back ().owner
= owner
;
617 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
619 /* If these are the first file sections we can provide memory
620 from, push the file_stratum target. Must do this in all
621 inferiors sharing the program space. */
622 for (inferior
*inf
: all_inferiors ())
624 if (inf
->pspace
!= this)
627 if (inf
->target_is_pushed (&exec_ops
))
630 switch_to_inferior_no_thread (inf
);
631 inf
->push_target (&exec_ops
);
636 /* Add the sections of OBJFILE to the current set of target sections. */
639 program_space::add_target_sections (struct objfile
*objfile
)
641 gdb_assert (objfile
!= nullptr);
643 /* Compute the number of sections to add. */
644 for (obj_section
*osect
: objfile
->sections ())
646 if (bfd_section_size (osect
->the_bfd_section
) == 0)
649 m_target_sections
.emplace_back (osect
->addr (), osect
->endaddr (),
650 osect
->the_bfd_section
, objfile
);
654 /* Remove all target sections owned by OWNER.
655 OWNER must be the same value passed to add_target_sections. */
658 program_space::remove_target_sections (target_section_owner owner
)
660 gdb_assert (owner
.v () != nullptr);
662 auto it
= std::remove_if (m_target_sections
.begin (),
663 m_target_sections
.end (),
664 [&] (target_section
§
)
666 return sect
.owner
.v () == owner
.v ();
668 m_target_sections
.erase (it
, m_target_sections
.end ());
670 /* If we don't have any more sections to read memory from,
671 remove the file_stratum target from the stack of each
672 inferior sharing the program space. */
673 if (m_target_sections
.empty ())
675 scoped_restore_current_pspace_and_thread restore_pspace_thread
;
677 for (inferior
*inf
: all_inferiors ())
679 if (inf
->pspace
!= this)
682 switch_to_inferior_no_thread (inf
);
683 inf
->unpush_target (&exec_ops
);
691 exec_on_vfork (inferior
*vfork_child
)
693 if (!vfork_child
->pspace
->target_sections ().empty ())
694 vfork_child
->push_target (&exec_ops
);
699 enum target_xfer_status
700 exec_read_partial_read_only (gdb_byte
*readbuf
, ULONGEST offset
,
701 ULONGEST len
, ULONGEST
*xfered_len
)
703 /* It's unduly pedantic to refuse to look at the executable for
704 read-only pieces; so do the equivalent of readonly regions aka
706 if (current_program_space
->exec_bfd () != NULL
)
712 for (s
= current_program_space
->exec_bfd ()->sections
; s
; s
= s
->next
)
714 if ((s
->flags
& SEC_LOAD
) == 0
715 || (s
->flags
& SEC_READONLY
) == 0)
719 size
= bfd_section_size (s
);
720 if (vma
<= offset
&& offset
< (vma
+ size
))
724 amt
= (vma
+ size
) - offset
;
728 amt
= bfd_get_section_contents (current_program_space
->exec_bfd (), s
,
729 readbuf
, offset
- vma
, amt
);
732 return TARGET_XFER_EOF
;
736 return TARGET_XFER_OK
;
742 /* Indicate failure to find the requested memory block. */
743 return TARGET_XFER_E_IO
;
746 /* Return all read-only memory ranges found in the target section
747 table defined by SECTIONS and SECTIONS_END, starting at (and
748 intersected with) MEMADDR for LEN bytes. */
750 static std::vector
<mem_range
>
751 section_table_available_memory (CORE_ADDR memaddr
, ULONGEST len
,
752 const std::vector
<target_section
> §ions
)
754 std::vector
<mem_range
> memory
;
756 for (const target_section
&p
: sections
)
758 if ((bfd_section_flags (p
.the_bfd_section
) & SEC_READONLY
) == 0)
761 /* Copy the meta-data, adjusted. */
762 if (mem_ranges_overlap (p
.addr
, p
.endaddr
- p
.addr
, memaddr
, len
))
764 ULONGEST lo1
, hi1
, lo2
, hi2
;
772 CORE_ADDR start
= std::max (lo1
, lo2
);
773 int length
= std::min (hi1
, hi2
) - start
;
775 memory
.emplace_back (start
, length
);
782 enum target_xfer_status
783 section_table_read_available_memory (gdb_byte
*readbuf
, ULONGEST offset
,
784 ULONGEST len
, ULONGEST
*xfered_len
)
786 const std::vector
<target_section
> *table
787 = target_get_section_table (current_inferior ()->top_target ());
788 std::vector
<mem_range
> available_memory
789 = section_table_available_memory (offset
, len
, *table
);
791 normalize_mem_ranges (&available_memory
);
793 for (const mem_range
&r
: available_memory
)
795 if (mem_ranges_overlap (r
.start
, r
.length
, offset
, len
))
798 enum target_xfer_status status
;
800 /* Get the intersection window. */
801 end
= std::min
<CORE_ADDR
> (offset
+ len
, r
.start
+ r
.length
);
803 gdb_assert (end
- offset
<= len
);
805 if (offset
>= r
.start
)
806 status
= exec_read_partial_read_only (readbuf
, offset
,
811 *xfered_len
= r
.start
- offset
;
812 status
= TARGET_XFER_UNAVAILABLE
;
819 return TARGET_XFER_UNAVAILABLE
;
822 enum target_xfer_status
823 section_table_xfer_memory_partial (gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
824 ULONGEST offset
, ULONGEST len
,
825 ULONGEST
*xfered_len
,
826 const std::vector
<target_section
> §ions
,
827 gdb::function_view
<bool
828 (const struct target_section
*)> match_cb
)
831 ULONGEST memaddr
= offset
;
832 ULONGEST memend
= memaddr
+ len
;
834 gdb_assert (len
!= 0);
836 for (const target_section
&p
: sections
)
838 struct bfd_section
*asect
= p
.the_bfd_section
;
839 bfd
*abfd
= asect
->owner
;
841 if (match_cb
!= nullptr && !match_cb (&p
))
842 continue; /* not the section we need. */
843 if (memaddr
>= p
.addr
)
845 if (memend
<= p
.endaddr
)
847 /* Entire transfer is within this section. */
849 res
= bfd_set_section_contents (abfd
, asect
,
850 writebuf
, memaddr
- p
.addr
,
853 res
= bfd_get_section_contents (abfd
, asect
,
854 readbuf
, memaddr
- p
.addr
,
860 return TARGET_XFER_OK
;
863 return TARGET_XFER_EOF
;
865 else if (memaddr
>= p
.endaddr
)
867 /* This section ends before the transfer starts. */
872 /* This section overlaps the transfer. Just do half. */
873 len
= p
.endaddr
- memaddr
;
875 res
= bfd_set_section_contents (abfd
, asect
,
876 writebuf
, memaddr
- p
.addr
,
879 res
= bfd_get_section_contents (abfd
, asect
,
880 readbuf
, memaddr
- p
.addr
,
885 return TARGET_XFER_OK
;
888 return TARGET_XFER_EOF
;
893 return TARGET_XFER_EOF
; /* We can't help. */
896 enum target_xfer_status
897 exec_target::xfer_partial (enum target_object object
,
898 const char *annex
, gdb_byte
*readbuf
,
899 const gdb_byte
*writebuf
,
900 ULONGEST offset
, ULONGEST len
, ULONGEST
*xfered_len
)
902 const std::vector
<target_section
> *table
= target_get_section_table (this);
904 if (object
== TARGET_OBJECT_MEMORY
)
905 return section_table_xfer_memory_partial (readbuf
, writebuf
,
906 offset
, len
, xfered_len
,
909 return TARGET_XFER_E_IO
;
914 print_section_info (const std::vector
<target_section
> *t
, bfd
*abfd
)
916 struct gdbarch
*gdbarch
= gdbarch_from_bfd (abfd
);
917 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
918 int wid
= gdbarch_addr_bit (gdbarch
) <= 32 ? 8 : 16;
920 gdb_printf ("\t`%ps', ",
921 styled_string (file_name_style
.style (),
922 bfd_get_filename (abfd
)));
923 gdb_stdout
->wrap_here (8);
924 gdb_printf (_("file type %s.\n"), bfd_get_target (abfd
));
925 if (abfd
== current_program_space
->exec_bfd ())
927 /* gcc-3.4 does not like the initialization in
928 <p == t->sections_end>. */
929 bfd_vma displacement
= 0;
933 for (const target_section
&p
: *t
)
935 struct bfd_section
*psect
= p
.the_bfd_section
;
937 if ((bfd_section_flags (psect
) & (SEC_ALLOC
| SEC_LOAD
))
938 != (SEC_ALLOC
| SEC_LOAD
))
941 if (bfd_section_vma (psect
) <= abfd
->start_address
942 && abfd
->start_address
< (bfd_section_vma (psect
)
943 + bfd_section_size (psect
)))
945 displacement
= p
.addr
- bfd_section_vma (psect
);
951 warning (_("Cannot find section for the entry point of %ps."),
952 styled_string (file_name_style
.style (),
953 bfd_get_filename (abfd
)));
955 entry_point
= gdbarch_addr_bits_remove (gdbarch
,
956 bfd_get_start_address (abfd
)
958 gdb_printf (_("\tEntry point: %s\n"),
959 paddress (gdbarch
, entry_point
));
961 for (const target_section
&p
: *t
)
963 struct bfd_section
*psect
= p
.the_bfd_section
;
964 bfd
*pbfd
= psect
->owner
;
966 gdb_printf ("\t%s", hex_string_custom (p
.addr
, wid
));
967 gdb_printf (" - %s", hex_string_custom (p
.endaddr
, wid
));
969 /* FIXME: A format of "08l" is not wide enough for file offsets
970 larger than 4GB. OTOH, making it "016l" isn't desirable either
971 since most output will then be much wider than necessary. It
972 may make sense to test the size of the file and choose the
973 format string accordingly. */
974 /* FIXME: i18n: Need to rewrite this sentence. */
977 hex_string_custom (psect
->filepos
, 8));
978 gdb_printf (" is %s", bfd_section_name (psect
));
980 gdb_printf (" in %ps",
981 styled_string (file_name_style
.style (),
982 bfd_get_filename (pbfd
)));
988 exec_target::files_info ()
990 if (current_program_space
->exec_bfd ())
991 print_section_info (¤t_program_space
->target_sections (),
992 current_program_space
->exec_bfd ());
994 gdb_puts (_("\t<no file loaded>\n"));
998 set_section_command (const char *args
, int from_tty
)
1000 const char *secname
;
1003 error (_("Must specify section name and its virtual address"));
1005 /* Parse out section name. */
1006 for (secname
= args
; !isspace (*args
); args
++);
1007 unsigned seclen
= args
- secname
;
1009 /* Parse out new virtual address. */
1010 CORE_ADDR secaddr
= parse_and_eval_address (args
);
1012 for (target_section
&p
: current_program_space
->target_sections ())
1014 if (!strncmp (secname
, bfd_section_name (p
.the_bfd_section
), seclen
)
1015 && bfd_section_name (p
.the_bfd_section
)[seclen
] == '\0')
1017 long offset
= secaddr
- p
.addr
;
1019 p
.endaddr
+= offset
;
1021 exec_ops
.files_info ();
1026 std::string
secprint (secname
, seclen
);
1027 error (_("Section %s not found"), secprint
.c_str ());
1030 /* If we can find a section in FILENAME with BFD index INDEX, adjust
1034 exec_set_section_address (const char *filename
, int index
, CORE_ADDR address
)
1036 for (target_section
&p
: current_program_space
->target_sections ())
1038 if (filename_cmp (filename
,
1039 bfd_get_filename (p
.the_bfd_section
->owner
)) == 0
1040 && index
== p
.the_bfd_section
->index
)
1042 p
.endaddr
+= address
- p
.addr
;
1049 exec_target::has_memory ()
1051 /* We can provide memory if we have any file/target sections to read
1053 return !current_program_space
->target_sections ().empty ();
1056 gdb::unique_xmalloc_ptr
<char>
1057 exec_target::make_corefile_notes (bfd
*obfd
, int *note_size
)
1059 error (_("Can't create a corefile"));
1063 exec_target::find_memory_regions (find_memory_region_ftype func
, void *data
)
1065 return objfile_find_memory_regions (this, func
, data
);
1068 void _initialize_exec ();
1072 struct cmd_list_element
*c
;
1074 c
= add_cmd ("file", class_files
, file_command
, _("\
1075 Use FILE as program to be debugged.\n\
1076 It is read for its symbols, for getting the contents of pure memory,\n\
1077 and it is the program executed when you use the `run' command.\n\
1078 If FILE cannot be found as specified, your execution directory path\n\
1079 ($PATH) is searched for a command of that name.\n\
1080 No arg means to have no executable file and no symbols."), &cmdlist
);
1081 set_cmd_completer (c
, filename_maybe_quoted_completer
);
1083 c
= add_cmd ("exec-file", class_files
, exec_file_command
, _("\
1084 Use FILE as program for getting contents of pure memory.\n\
1085 If FILE cannot be found as specified, your execution directory path\n\
1086 is searched for a command of that name.\n\
1087 No arg means have no executable file."), &cmdlist
);
1088 set_cmd_completer (c
, filename_maybe_quoted_completer
);
1090 add_com ("section", class_files
, set_section_command
, _("\
1091 Change the base address of section SECTION of the exec file to ADDR.\n\
1092 This can be used if the exec file does not contain section addresses,\n\
1093 (such as in the a.out format), or when the addresses specified in the\n\
1094 file itself are wrong. Each section must be changed separately. The\n\
1095 ``info files'' command lists all the sections and their addresses."));
1097 add_setshow_boolean_cmd ("write", class_support
, &write_files
, _("\
1098 Set writing into executable and core files."), _("\
1099 Show writing into executable and core files."), NULL
,
1102 &setlist
, &showlist
);
1104 add_setshow_enum_cmd ("exec-file-mismatch", class_support
,
1105 exec_file_mismatch_names
,
1106 &exec_file_mismatch
,
1108 Set exec-file-mismatch handling (ask|warn|off)."),
1110 Show exec-file-mismatch handling (ask|warn|off)."),
1112 Specifies how to handle a mismatch between the current exec-file\n\
1113 loaded by GDB and the exec-file automatically determined when attaching\n\
1115 ask - warn the user and ask whether to load the determined exec-file.\n\
1116 warn - warn the user, but do not change the exec-file.\n\
1117 off - do not check for mismatch.\n\
1119 GDB detects a mismatch by comparing the build IDs of the files.\n\
1120 If the user confirms loading the determined exec-file, then its symbols\n\
1121 will be loaded as well."),
1122 set_exec_file_mismatch_command
,
1123 show_exec_file_mismatch_command
,
1124 &setlist
, &showlist
);
1126 add_target (exec_target_info
, exec_target_open
,
1127 filename_maybe_quoted_completer
);