1 /* Work with executable files, for GDB.
3 Copyright (C) 1988-2018 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/>. */
26 #include "filenames.h"
29 #include "completer.h"
32 #include "observable.h"
33 #include "arch-utils.h"
34 #include "gdbthread.h"
35 #include "progspace.h"
41 #include "readline/readline.h"
48 #include "common/pathstuff.h"
50 void (*deprecated_file_changed_hook
) (const char *);
52 /* Prototypes for local functions */
54 static void exec_files_info (struct target_ops
*);
56 static void init_exec_ops (void);
58 /* The target vector for executable files. */
60 static struct target_ops exec_ops
;
62 /* Whether to open exec and core files read-only or read-write. */
66 show_write_files (struct ui_file
*file
, int from_tty
,
67 struct cmd_list_element
*c
, const char *value
)
69 fprintf_filtered (file
, _("Writing into executable and core files is %s.\n"),
75 exec_open (const char *args
, int from_tty
)
77 target_preopen (from_tty
);
78 exec_file_attach (args
, from_tty
);
81 /* Close and clear exec_bfd. If we end up with no target sections to
82 read memory from, this unpushes the exec_ops target. */
93 /* Removing target sections may close the exec_ops target.
94 Clear exec_bfd before doing so to prevent recursion. */
98 remove_target_sections (&exec_bfd
);
100 xfree (exec_filename
);
101 exec_filename
= NULL
;
105 /* This is the target_close implementation. Clears all target
106 sections and closes all executable bfds from all program spaces. */
109 exec_close_1 (struct target_ops
*self
)
111 struct program_space
*ss
;
112 scoped_restore_current_program_space restore_pspace
;
116 set_current_program_space (ss
);
117 clear_section_table (current_target_sections
);
123 exec_file_clear (int from_tty
)
125 /* Remove exec file. */
129 printf_unfiltered (_("No executable file now.\n"));
135 try_open_exec_file (const char *exec_file_host
, struct inferior
*inf
,
136 symfile_add_flags add_flags
)
138 struct cleanup
*old_chain
;
139 struct gdb_exception prev_err
= exception_none
;
141 old_chain
= make_cleanup (free_current_contents
, &prev_err
.message
);
143 /* exec_file_attach and symbol_file_add_main may throw an error if the file
144 cannot be opened either locally or remotely.
146 This happens for example, when the file is first found in the local
147 sysroot (above), and then disappears (a TOCTOU race), or when it doesn't
148 exist in the target filesystem, or when the file does exist, but
151 Even without a symbol file, the remote-based debugging session should
152 continue normally instead of ending abruptly. Hence we catch thrown
153 errors/exceptions in the following code. */
156 /* We must do this step even if exec_file_host is NULL, so that
157 exec_file_attach will clear state. */
158 exec_file_attach (exec_file_host
, add_flags
& SYMFILE_VERBOSE
);
160 CATCH (err
, RETURN_MASK_ERROR
)
162 if (err
.message
!= NULL
)
163 warning ("%s", err
.message
);
167 /* Save message so it doesn't get trashed by the catch below. */
168 if (err
.message
!= NULL
)
169 prev_err
.message
= xstrdup (err
.message
);
173 if (exec_file_host
!= NULL
)
177 symbol_file_add_main (exec_file_host
, add_flags
);
179 CATCH (err
, RETURN_MASK_ERROR
)
181 if (!exception_print_same (prev_err
, err
))
182 warning ("%s", err
.message
);
187 do_cleanups (old_chain
);
193 exec_file_locate_attach (int pid
, int defer_bp_reset
, int from_tty
)
195 char *exec_file_target
;
196 symfile_add_flags add_flags
= 0;
198 /* Do nothing if we already have an executable filename. */
199 if (get_exec_file (0) != NULL
)
202 /* Try to determine a filename from the process itself. */
203 exec_file_target
= target_pid_to_exec_file (pid
);
204 if (exec_file_target
== NULL
)
206 warning (_("No executable has been specified and target does not "
208 "determining executable automatically. "
209 "Try using the \"file\" command."));
213 gdb::unique_xmalloc_ptr
<char> exec_file_host
214 = exec_file_find (exec_file_target
, NULL
);
217 add_flags
|= SYMFILE_DEFER_BP_RESET
;
220 add_flags
|= SYMFILE_VERBOSE
;
222 /* Attempt to open the exec file. */
223 try_open_exec_file (exec_file_host
.get (), current_inferior (), add_flags
);
226 /* Set FILENAME as the new exec file.
228 This function is intended to be behave essentially the same
229 as exec_file_command, except that the latter will detect when
230 a target is being debugged, and will ask the user whether it
231 should be shut down first. (If the answer is "no", then the
232 new file is ignored.)
234 This file is used by exec_file_command, to do the work of opening
235 and processing the exec file after any prompting has happened.
237 And, it is used by child_attach, when the attach command was
238 given a pid but not a exec pathname, and the attach command could
239 figure out the pathname from the pid. (In this case, we shouldn't
240 ask the user whether the current target should be shut down --
241 we're supplying the exec pathname late for good reason.) */
244 exec_file_attach (const char *filename
, int from_tty
)
246 /* First, acquire a reference to the current exec_bfd. We release
247 this at the end of the function; but acquiring it now lets the
248 BFD cache return it if this call refers to the same file. */
249 gdb_bfd_ref_ptr exec_bfd_holder
= new_bfd_ref (exec_bfd
);
251 /* Remove any previous exec file. */
254 /* Now open and digest the file the user requested, if any. */
259 printf_unfiltered (_("No executable file now.\n"));
261 set_gdbarch_from_file (NULL
);
265 int load_via_target
= 0;
266 const char *scratch_pathname
, *canonical_pathname
;
268 struct target_section
*sections
= NULL
, *sections_end
= NULL
;
271 if (is_target_filename (filename
))
273 if (target_filesystem_is_local ())
274 filename
+= strlen (TARGET_SYSROOT_PREFIX
);
279 gdb::unique_xmalloc_ptr
<char> canonical_storage
, scratch_storage
;
282 /* gdb_bfd_fopen does not support "target:" filenames. */
284 warning (_("writing into executable files is "
285 "not supported for %s sysroots"),
286 TARGET_SYSROOT_PREFIX
);
288 scratch_pathname
= filename
;
290 canonical_pathname
= scratch_pathname
;
294 scratch_chan
= openp (getenv ("PATH"), OPF_TRY_CWD_FIRST
,
295 filename
, write_files
?
296 O_RDWR
| O_BINARY
: O_RDONLY
| O_BINARY
,
298 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
299 if (scratch_chan
< 0)
301 char *exename
= (char *) alloca (strlen (filename
) + 5);
303 strcat (strcpy (exename
, filename
), ".exe");
304 scratch_chan
= openp (getenv ("PATH"), OPF_TRY_CWD_FIRST
,
305 exename
, write_files
?
307 : O_RDONLY
| O_BINARY
,
311 if (scratch_chan
< 0)
312 perror_with_name (filename
);
314 scratch_pathname
= scratch_storage
.get ();
316 /* gdb_bfd_open (and its variants) prefers canonicalized
317 pathname for better BFD caching. */
318 canonical_storage
= gdb_realpath (scratch_pathname
);
319 canonical_pathname
= canonical_storage
.get ();
322 gdb_bfd_ref_ptr temp
;
323 if (write_files
&& !load_via_target
)
324 temp
= gdb_bfd_fopen (canonical_pathname
, gnutarget
,
325 FOPEN_RUB
, scratch_chan
);
327 temp
= gdb_bfd_open (canonical_pathname
, gnutarget
, scratch_chan
);
328 exec_bfd
= temp
.release ();
332 error (_("\"%s\": could not open as an executable file: %s."),
333 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
336 /* gdb_realpath_keepfile resolves symlinks on the local
337 filesystem and so cannot be used for "target:" files. */
338 gdb_assert (exec_filename
== NULL
);
340 exec_filename
= xstrdup (bfd_get_filename (exec_bfd
));
342 exec_filename
= gdb_realpath_keepfile (scratch_pathname
).release ();
344 if (!bfd_check_format_matches (exec_bfd
, bfd_object
, &matching
))
346 /* Make sure to close exec_bfd, or else "run" might try to use
349 error (_("\"%s\": not in executable format: %s"),
351 gdb_bfd_errmsg (bfd_get_error (), matching
));
354 if (build_section_table (exec_bfd
, §ions
, §ions_end
))
356 /* Make sure to close exec_bfd, or else "run" might try to use
359 error (_("\"%s\": can't find the file sections: %s"),
360 scratch_pathname
, bfd_errmsg (bfd_get_error ()));
363 exec_bfd_mtime
= bfd_get_mtime (exec_bfd
);
367 set_gdbarch_from_file (exec_bfd
);
369 /* Add the executable's sections to the current address spaces'
370 list of sections. This possibly pushes the exec_ops
372 add_target_sections (&exec_bfd
, sections
, sections_end
);
375 /* Tell display code (if any) about the changed file name. */
376 if (deprecated_exec_file_display_hook
)
377 (*deprecated_exec_file_display_hook
) (filename
);
380 bfd_cache_close_all ();
381 gdb::observers::executable_changed
.notify ();
384 /* Process the first arg in ARGS as the new exec file.
386 Note that we have to explicitly ignore additional args, since we can
387 be called from file_command(), which also calls symbol_file_command()
388 which can take multiple args.
390 If ARGS is NULL, we just want to close the exec file. */
393 exec_file_command (const char *args
, int from_tty
)
395 if (from_tty
&& target_has_execution
396 && !query (_("A program is being debugged already.\n"
397 "Are you sure you want to change the file? ")))
398 error (_("File not changed."));
402 /* Scan through the args and pick up the first non option arg
405 gdb_argv
built_argv (args
);
406 char **argv
= built_argv
.get ();
408 for (; (*argv
!= NULL
) && (**argv
== '-'); argv
++)
412 error (_("No executable file name was specified"));
414 gdb::unique_xmalloc_ptr
<char> filename (tilde_expand (*argv
));
415 exec_file_attach (filename
.get (), from_tty
);
418 exec_file_attach (NULL
, from_tty
);
421 /* Set both the exec file and the symbol file, in one command.
422 What a novelty. Why did GDB go through four major releases before this
423 command was added? */
426 file_command (const char *arg
, int from_tty
)
428 /* FIXME, if we lose on reading the symbol file, we should revert
429 the exec file, but that's rough. */
430 exec_file_command (arg
, from_tty
);
431 symbol_file_command (arg
, from_tty
);
432 if (deprecated_file_changed_hook
)
433 deprecated_file_changed_hook (arg
);
437 /* Locate all mappable sections of a BFD file.
438 table_pp_char is a char * to get it through bfd_map_over_sections;
439 we cast it back to its proper type. */
442 add_to_section_table (bfd
*abfd
, struct bfd_section
*asect
,
445 struct target_section
**table_pp
= (struct target_section
**) table_pp_char
;
448 gdb_assert (abfd
== asect
->owner
);
450 /* Check the section flags, but do not discard zero-length sections, since
451 some symbols may still be attached to this section. For instance, we
452 encountered on sparc-solaris 2.10 a shared library with an empty .bss
453 section to which a symbol named "_end" was attached. The address
454 of this symbol still needs to be relocated. */
455 aflag
= bfd_get_section_flags (abfd
, asect
);
456 if (!(aflag
& SEC_ALLOC
))
459 (*table_pp
)->owner
= NULL
;
460 (*table_pp
)->the_bfd_section
= asect
;
461 (*table_pp
)->addr
= bfd_section_vma (abfd
, asect
);
462 (*table_pp
)->endaddr
= (*table_pp
)->addr
+ bfd_section_size (abfd
, asect
);
469 clear_section_table (struct target_section_table
*table
)
471 xfree (table
->sections
);
472 table
->sections
= table
->sections_end
= NULL
;
475 /* Resize section table TABLE by ADJUSTMENT.
476 ADJUSTMENT may be negative, in which case the caller must have already
477 removed the sections being deleted.
478 Returns the old size. */
481 resize_section_table (struct target_section_table
*table
, int adjustment
)
486 old_count
= table
->sections_end
- table
->sections
;
488 new_count
= adjustment
+ old_count
;
492 table
->sections
= XRESIZEVEC (struct target_section
, table
->sections
,
494 table
->sections_end
= table
->sections
+ new_count
;
497 clear_section_table (table
);
502 /* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
503 Returns 0 if OK, 1 on error. */
506 build_section_table (struct bfd
*some_bfd
, struct target_section
**start
,
507 struct target_section
**end
)
511 count
= bfd_count_sections (some_bfd
);
514 *start
= XNEWVEC (struct target_section
, count
);
516 bfd_map_over_sections (some_bfd
, add_to_section_table
, (char *) end
);
517 if (*end
> *start
+ count
)
518 internal_error (__FILE__
, __LINE__
,
519 _("failed internal consistency check"));
520 /* We could realloc the table, but it probably loses for most files. */
524 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
525 current set of target sections. */
528 add_target_sections (void *owner
,
529 struct target_section
*sections
,
530 struct target_section
*sections_end
)
533 struct target_section_table
*table
= current_target_sections
;
535 count
= sections_end
- sections
;
539 int space
= resize_section_table (table
, count
);
542 for (i
= 0; i
< count
; ++i
)
544 table
->sections
[space
+ i
] = sections
[i
];
545 table
->sections
[space
+ i
].owner
= owner
;
548 /* If these are the first file sections we can provide memory
549 from, push the file_stratum target. */
550 if (!target_is_pushed (&exec_ops
))
551 push_target (&exec_ops
);
555 /* Add the sections of OBJFILE to the current set of target sections. */
558 add_target_sections_of_objfile (struct objfile
*objfile
)
560 struct target_section_table
*table
= current_target_sections
;
561 struct obj_section
*osect
;
564 struct target_section
*ts
;
569 /* Compute the number of sections to add. */
570 ALL_OBJFILE_OSECTIONS (objfile
, osect
)
572 if (bfd_get_section_size (osect
->the_bfd_section
) == 0)
580 space
= resize_section_table (table
, count
);
582 ts
= table
->sections
+ space
;
584 ALL_OBJFILE_OSECTIONS (objfile
, osect
)
586 if (bfd_get_section_size (osect
->the_bfd_section
) == 0)
589 gdb_assert (ts
< table
->sections
+ space
+ count
);
591 ts
->addr
= obj_section_addr (osect
);
592 ts
->endaddr
= obj_section_endaddr (osect
);
593 ts
->the_bfd_section
= osect
->the_bfd_section
;
594 ts
->owner
= (void *) objfile
;
600 /* Remove all target sections owned by OWNER.
601 OWNER must be the same value passed to add_target_sections. */
604 remove_target_sections (void *owner
)
606 struct target_section
*src
, *dest
;
607 struct target_section_table
*table
= current_target_sections
;
609 gdb_assert (owner
!= NULL
);
611 dest
= table
->sections
;
612 for (src
= table
->sections
; src
< table
->sections_end
; src
++)
613 if (src
->owner
!= owner
)
615 /* Keep this section. */
621 /* If we've dropped any sections, resize the section table. */
626 old_count
= resize_section_table (table
, dest
- src
);
628 /* If we don't have any more sections to read memory from,
629 remove the file_stratum target from the stack. */
630 if (old_count
+ (dest
- src
) == 0)
632 struct program_space
*pspace
;
635 if (pspace
->target_sections
.sections
636 != pspace
->target_sections
.sections_end
)
639 unpush_target (&exec_ops
);
646 enum target_xfer_status
647 exec_read_partial_read_only (gdb_byte
*readbuf
, ULONGEST offset
,
648 ULONGEST len
, ULONGEST
*xfered_len
)
650 /* It's unduly pedantic to refuse to look at the executable for
651 read-only pieces; so do the equivalent of readonly regions aka
653 if (exec_bfd
!= NULL
)
659 for (s
= exec_bfd
->sections
; s
; s
= s
->next
)
661 if ((s
->flags
& SEC_LOAD
) == 0
662 || (s
->flags
& SEC_READONLY
) == 0)
666 size
= bfd_get_section_size (s
);
667 if (vma
<= offset
&& offset
< (vma
+ size
))
671 amt
= (vma
+ size
) - offset
;
675 amt
= bfd_get_section_contents (exec_bfd
, s
,
676 readbuf
, offset
- vma
, amt
);
679 return TARGET_XFER_EOF
;
683 return TARGET_XFER_OK
;
689 /* Indicate failure to find the requested memory block. */
690 return TARGET_XFER_E_IO
;
693 /* Return all read-only memory ranges found in the target section
694 table defined by SECTIONS and SECTIONS_END, starting at (and
695 intersected with) MEMADDR for LEN bytes. */
697 static std::vector
<mem_range
>
698 section_table_available_memory (CORE_ADDR memaddr
, ULONGEST len
,
699 struct target_section
*sections
,
700 struct target_section
*sections_end
)
702 std::vector
<mem_range
> memory
;
704 for (target_section
*p
= sections
; p
< sections_end
; p
++)
706 if ((bfd_get_section_flags (p
->the_bfd_section
->owner
,
708 & SEC_READONLY
) == 0)
711 /* Copy the meta-data, adjusted. */
712 if (mem_ranges_overlap (p
->addr
, p
->endaddr
- p
->addr
, memaddr
, len
))
714 ULONGEST lo1
, hi1
, lo2
, hi2
;
722 CORE_ADDR start
= std::max (lo1
, lo2
);
723 int length
= std::min (hi1
, hi2
) - start
;
725 memory
.emplace_back (start
, length
);
732 enum target_xfer_status
733 section_table_read_available_memory (gdb_byte
*readbuf
, ULONGEST offset
,
734 ULONGEST len
, ULONGEST
*xfered_len
)
736 target_section_table
*table
= target_get_section_table (&exec_ops
);
737 std::vector
<mem_range
> available_memory
738 = section_table_available_memory (offset
, len
,
739 table
->sections
, table
->sections_end
);
741 normalize_mem_ranges (&available_memory
);
743 for (const mem_range
&r
: available_memory
)
745 if (mem_ranges_overlap (r
.start
, r
.length
, offset
, len
))
748 enum target_xfer_status status
;
750 /* Get the intersection window. */
751 end
= std::min
<CORE_ADDR
> (offset
+ len
, r
.start
+ r
.length
);
753 gdb_assert (end
- offset
<= len
);
755 if (offset
>= r
.start
)
756 status
= exec_read_partial_read_only (readbuf
, offset
,
761 *xfered_len
= r
.start
- offset
;
762 status
= TARGET_XFER_UNAVAILABLE
;
769 return TARGET_XFER_UNAVAILABLE
;
772 enum target_xfer_status
773 section_table_xfer_memory_partial (gdb_byte
*readbuf
, const gdb_byte
*writebuf
,
774 ULONGEST offset
, ULONGEST len
,
775 ULONGEST
*xfered_len
,
776 struct target_section
*sections
,
777 struct target_section
*sections_end
,
778 const char *section_name
)
781 struct target_section
*p
;
782 ULONGEST memaddr
= offset
;
783 ULONGEST memend
= memaddr
+ len
;
786 internal_error (__FILE__
, __LINE__
,
787 _("failed internal consistency check"));
789 for (p
= sections
; p
< sections_end
; p
++)
791 struct bfd_section
*asect
= p
->the_bfd_section
;
792 bfd
*abfd
= asect
->owner
;
794 if (section_name
&& strcmp (section_name
, asect
->name
) != 0)
795 continue; /* not the section we need. */
796 if (memaddr
>= p
->addr
)
798 if (memend
<= p
->endaddr
)
800 /* Entire transfer is within this section. */
802 res
= bfd_set_section_contents (abfd
, asect
,
803 writebuf
, memaddr
- p
->addr
,
806 res
= bfd_get_section_contents (abfd
, asect
,
807 readbuf
, memaddr
- p
->addr
,
813 return TARGET_XFER_OK
;
816 return TARGET_XFER_EOF
;
818 else if (memaddr
>= p
->endaddr
)
820 /* This section ends before the transfer starts. */
825 /* This section overlaps the transfer. Just do half. */
826 len
= p
->endaddr
- memaddr
;
828 res
= bfd_set_section_contents (abfd
, asect
,
829 writebuf
, memaddr
- p
->addr
,
832 res
= bfd_get_section_contents (abfd
, asect
,
833 readbuf
, memaddr
- p
->addr
,
838 return TARGET_XFER_OK
;
841 return TARGET_XFER_EOF
;
846 return TARGET_XFER_EOF
; /* We can't help. */
849 static struct target_section_table
*
850 exec_get_section_table (struct target_ops
*ops
)
852 return current_target_sections
;
855 static enum target_xfer_status
856 exec_xfer_partial (struct target_ops
*ops
, enum target_object object
,
857 const char *annex
, gdb_byte
*readbuf
,
858 const gdb_byte
*writebuf
,
859 ULONGEST offset
, ULONGEST len
, ULONGEST
*xfered_len
)
861 struct target_section_table
*table
= target_get_section_table (ops
);
863 if (object
== TARGET_OBJECT_MEMORY
)
864 return section_table_xfer_memory_partial (readbuf
, writebuf
,
865 offset
, len
, xfered_len
,
870 return TARGET_XFER_E_IO
;
875 print_section_info (struct target_section_table
*t
, bfd
*abfd
)
877 struct gdbarch
*gdbarch
= gdbarch_from_bfd (abfd
);
878 struct target_section
*p
;
879 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
880 int wid
= gdbarch_addr_bit (gdbarch
) <= 32 ? 8 : 16;
882 printf_filtered ("\t`%s', ", bfd_get_filename (abfd
));
884 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd
));
885 if (abfd
== exec_bfd
)
887 /* gcc-3.4 does not like the initialization in
888 <p == t->sections_end>. */
889 bfd_vma displacement
= 0;
892 for (p
= t
->sections
; p
< t
->sections_end
; p
++)
894 struct bfd_section
*psect
= p
->the_bfd_section
;
895 bfd
*pbfd
= psect
->owner
;
897 if ((bfd_get_section_flags (pbfd
, psect
) & (SEC_ALLOC
| SEC_LOAD
))
898 != (SEC_ALLOC
| SEC_LOAD
))
901 if (bfd_get_section_vma (pbfd
, psect
) <= abfd
->start_address
902 && abfd
->start_address
< (bfd_get_section_vma (pbfd
, psect
)
903 + bfd_get_section_size (psect
)))
905 displacement
= p
->addr
- bfd_get_section_vma (pbfd
, psect
);
909 if (p
== t
->sections_end
)
910 warning (_("Cannot find section for the entry point of %s."),
911 bfd_get_filename (abfd
));
913 entry_point
= gdbarch_addr_bits_remove (gdbarch
,
914 bfd_get_start_address (abfd
)
916 printf_filtered (_("\tEntry point: %s\n"),
917 paddress (gdbarch
, entry_point
));
919 for (p
= t
->sections
; p
< t
->sections_end
; p
++)
921 struct bfd_section
*psect
= p
->the_bfd_section
;
922 bfd
*pbfd
= psect
->owner
;
924 printf_filtered ("\t%s", hex_string_custom (p
->addr
, wid
));
925 printf_filtered (" - %s", hex_string_custom (p
->endaddr
, wid
));
927 /* FIXME: A format of "08l" is not wide enough for file offsets
928 larger than 4GB. OTOH, making it "016l" isn't desirable either
929 since most output will then be much wider than necessary. It
930 may make sense to test the size of the file and choose the
931 format string accordingly. */
932 /* FIXME: i18n: Need to rewrite this sentence. */
934 printf_filtered (" @ %s",
935 hex_string_custom (psect
->filepos
, 8));
936 printf_filtered (" is %s", bfd_section_name (pbfd
, psect
));
938 printf_filtered (" in %s", bfd_get_filename (pbfd
));
939 printf_filtered ("\n");
944 exec_files_info (struct target_ops
*t
)
947 print_section_info (current_target_sections
, exec_bfd
);
949 puts_filtered (_("\t<no file loaded>\n"));
953 set_section_command (const char *args
, int from_tty
)
955 struct target_section
*p
;
958 unsigned long secaddr
;
961 struct target_section_table
*table
;
964 error (_("Must specify section name and its virtual address"));
966 /* Parse out section name. */
967 for (secname
= args
; !isspace (*args
); args
++);
968 seclen
= args
- secname
;
970 /* Parse out new virtual address. */
971 secaddr
= parse_and_eval_address (args
);
973 table
= current_target_sections
;
974 for (p
= table
->sections
; p
< table
->sections_end
; p
++)
976 if (!strncmp (secname
, bfd_section_name (p
->bfd
,
977 p
->the_bfd_section
), seclen
)
978 && bfd_section_name (p
->bfd
, p
->the_bfd_section
)[seclen
] == '\0')
980 offset
= secaddr
- p
->addr
;
982 p
->endaddr
+= offset
;
984 exec_files_info (&exec_ops
);
988 if (seclen
>= sizeof (secprint
))
989 seclen
= sizeof (secprint
) - 1;
990 strncpy (secprint
, secname
, seclen
);
991 secprint
[seclen
] = '\0';
992 error (_("Section %s not found"), secprint
);
995 /* If we can find a section in FILENAME with BFD index INDEX, adjust
999 exec_set_section_address (const char *filename
, int index
, CORE_ADDR address
)
1001 struct target_section
*p
;
1002 struct target_section_table
*table
;
1004 table
= current_target_sections
;
1005 for (p
= table
->sections
; p
< table
->sections_end
; p
++)
1007 if (filename_cmp (filename
, p
->the_bfd_section
->owner
->filename
) == 0
1008 && index
== p
->the_bfd_section
->index
)
1010 p
->endaddr
+= address
- p
->addr
;
1016 /* If mourn is being called in all the right places, this could be say
1017 `gdb internal error' (since generic_mourn calls
1018 breakpoint_init_inferior). */
1021 ignore (struct target_ops
*ops
, struct gdbarch
*gdbarch
,
1022 struct bp_target_info
*bp_tgt
)
1027 /* Implement the to_remove_breakpoint method. */
1030 exec_remove_breakpoint (struct target_ops
*ops
, struct gdbarch
*gdbarch
,
1031 struct bp_target_info
*bp_tgt
,
1032 enum remove_bp_reason reason
)
1038 exec_has_memory (struct target_ops
*ops
)
1040 /* We can provide memory if we have any file/target sections to read
1042 return (current_target_sections
->sections
1043 != current_target_sections
->sections_end
);
1047 exec_make_note_section (struct target_ops
*self
, bfd
*obfd
, int *note_size
)
1049 error (_("Can't create a corefile"));
1052 /* Fill in the exec file target vector. Very few entries need to be
1056 init_exec_ops (void)
1058 exec_ops
.to_shortname
= "exec";
1059 exec_ops
.to_longname
= "Local exec file";
1060 exec_ops
.to_doc
= "Use an executable file as a target.\n\
1061 Specify the filename of the executable file.";
1062 exec_ops
.to_open
= exec_open
;
1063 exec_ops
.to_close
= exec_close_1
;
1064 exec_ops
.to_xfer_partial
= exec_xfer_partial
;
1065 exec_ops
.to_get_section_table
= exec_get_section_table
;
1066 exec_ops
.to_files_info
= exec_files_info
;
1067 exec_ops
.to_insert_breakpoint
= ignore
;
1068 exec_ops
.to_remove_breakpoint
= exec_remove_breakpoint
;
1069 exec_ops
.to_stratum
= file_stratum
;
1070 exec_ops
.to_has_memory
= exec_has_memory
;
1071 exec_ops
.to_make_corefile_notes
= exec_make_note_section
;
1072 exec_ops
.to_find_memory_regions
= objfile_find_memory_regions
;
1073 exec_ops
.to_magic
= OPS_MAGIC
;
1077 _initialize_exec (void)
1079 struct cmd_list_element
*c
;
1085 c
= add_cmd ("file", class_files
, file_command
, _("\
1086 Use FILE as program to be debugged.\n\
1087 It is read for its symbols, for getting the contents of pure memory,\n\
1088 and it is the program executed when you use the `run' command.\n\
1089 If FILE cannot be found as specified, your execution directory path\n\
1090 ($PATH) is searched for a command of that name.\n\
1091 No arg means to have no executable file and no symbols."), &cmdlist
);
1092 set_cmd_completer (c
, filename_completer
);
1095 c
= add_cmd ("exec-file", class_files
, exec_file_command
, _("\
1096 Use FILE as program for getting contents of pure memory.\n\
1097 If FILE cannot be found as specified, your execution directory path\n\
1098 is searched for a command of that name.\n\
1099 No arg means have no executable file."), &cmdlist
);
1100 set_cmd_completer (c
, filename_completer
);
1102 add_com ("section", class_files
, set_section_command
, _("\
1103 Change the base address of section SECTION of the exec file to ADDR.\n\
1104 This can be used if the exec file does not contain section addresses,\n\
1105 (such as in the a.out format), or when the addresses specified in the\n\
1106 file itself are wrong. Each section must be changed separately. The\n\
1107 ``info files'' command lists all the sections and their addresses."));
1109 add_setshow_boolean_cmd ("write", class_support
, &write_files
, _("\
1110 Set writing into executable and core files."), _("\
1111 Show writing into executable and core files."), NULL
,
1114 &setlist
, &showlist
);
1116 add_target_with_completer (&exec_ops
, filename_completer
);