1 /* Work with executable files, for GDB.
3 Copyright (C) 1988-2016 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"
33 #include "arch-utils.h"
34 #include "gdbthread.h"
35 #include "progspace.h"
40 #include "readline/readline.h"
47 void (*deprecated_file_changed_hook) (char *);
49 /* Prototypes for local functions */
51 static void file_command (char *, int);
53 static void set_section_command (char *, int);
55 static void exec_files_info (struct target_ops *);
57 static void init_exec_ops (void);
59 void _initialize_exec (void);
61 /* The target vector for executable files. */
63 static struct target_ops exec_ops;
65 /* Whether to open exec and core files read-only or read-write. */
69 show_write_files (struct ui_file *file, int from_tty,
70 struct cmd_list_element *c, const char *value)
72 fprintf_filtered (file, _("Writing into executable and core files is %s.\n"),
78 exec_open (const char *args, int from_tty)
80 target_preopen (from_tty);
81 exec_file_attach (args, from_tty);
84 /* Close and clear exec_bfd. If we end up with no target sections to
85 read memory from, this unpushes the exec_ops target. */
96 /* Removing target sections may close the exec_ops target.
97 Clear exec_bfd before doing so to prevent recursion. */
101 remove_target_sections (&exec_bfd);
103 xfree (exec_filename);
104 exec_filename = NULL;
108 /* This is the target_close implementation. Clears all target
109 sections and closes all executable bfds from all program spaces. */
112 exec_close_1 (struct target_ops *self)
114 struct program_space *ss;
115 struct cleanup *old_chain;
117 old_chain = save_current_program_space ();
120 set_current_program_space (ss);
121 clear_section_table (current_target_sections);
125 do_cleanups (old_chain);
129 exec_file_clear (int from_tty)
131 /* Remove exec file. */
135 printf_unfiltered (_("No executable file now.\n"));
138 /* Returns non-zero if exceptions E1 and E2 are equal. Returns zero
142 exception_print_same (struct gdb_exception e1, struct gdb_exception e2)
144 const char *msg1 = e1.message;
145 const char *msg2 = e2.message;
152 return (e1.reason == e2.reason
153 && e1.error == e2.error
154 && strcmp (e1.message, e2.message) == 0);
160 exec_file_locate_attach (int pid, int from_tty)
162 char *exec_file, *full_exec_path = NULL;
163 struct cleanup *old_chain;
164 struct gdb_exception prev_err = exception_none;
166 /* Do nothing if we already have an executable filename. */
167 exec_file = (char *) get_exec_file (0);
168 if (exec_file != NULL)
171 /* Try to determine a filename from the process itself. */
172 exec_file = target_pid_to_exec_file (pid);
173 if (exec_file == NULL)
175 warning (_("No executable has been specified and target does not "
177 "determining executable automatically. "
178 "Try using the \"file\" command."));
182 /* If gdb_sysroot is not empty and the discovered filename
183 is absolute then prefix the filename with gdb_sysroot. */
184 if (*gdb_sysroot != '\0' && IS_ABSOLUTE_PATH (exec_file))
186 full_exec_path = exec_file_find (exec_file, NULL);
187 if (full_exec_path == NULL)
192 /* It's possible we don't have a full path, but rather just a
193 filename. Some targets, such as HP-UX, don't provide the
196 Attempt to qualify the filename against the source path.
197 (If that fails, we'll just fall back on the original
198 filename. Not much more we can do...) */
199 if (!source_full_path_of (exec_file, &full_exec_path))
200 full_exec_path = xstrdup (exec_file);
203 old_chain = make_cleanup (xfree, full_exec_path);
204 make_cleanup (free_current_contents, &prev_err.message);
206 /* exec_file_attach and symbol_file_add_main may throw an error if the file
207 cannot be opened either locally or remotely.
209 This happens for example, when the file is first found in the local
210 sysroot (above), and then disappears (a TOCTOU race), or when it doesn't
211 exist in the target filesystem, or when the file does exist, but
214 Even without a symbol file, the remote-based debugging session should
215 continue normally instead of ending abruptly. Hence we catch thrown
216 errors/exceptions in the following code. */
219 exec_file_attach (full_exec_path, from_tty);
221 CATCH (err, RETURN_MASK_ERROR)
223 if (err.message != NULL)
224 warning ("%s", err.message);
228 /* Save message so it doesn't get trashed by the catch below. */
229 prev_err.message = xstrdup (err.message);
235 symbol_file_add_main (full_exec_path, from_tty);
237 CATCH (err, RETURN_MASK_ERROR)
239 if (!exception_print_same (prev_err, err))
240 warning ("%s", err.message);
244 do_cleanups (old_chain);
247 /* Set FILENAME as the new exec file.
249 This function is intended to be behave essentially the same
250 as exec_file_command, except that the latter will detect when
251 a target is being debugged, and will ask the user whether it
252 should be shut down first. (If the answer is "no", then the
253 new file is ignored.)
255 This file is used by exec_file_command, to do the work of opening
256 and processing the exec file after any prompting has happened.
258 And, it is used by child_attach, when the attach command was
259 given a pid but not a exec pathname, and the attach command could
260 figure out the pathname from the pid. (In this case, we shouldn't
261 ask the user whether the current target should be shut down --
262 we're supplying the exec pathname late for good reason.) */
265 exec_file_attach (const char *filename, int from_tty)
267 struct cleanup *cleanups;
269 /* First, acquire a reference to the current exec_bfd. We release
270 this at the end of the function; but acquiring it now lets the
271 BFD cache return it if this call refers to the same file. */
272 gdb_bfd_ref (exec_bfd);
273 cleanups = make_cleanup_bfd_unref (exec_bfd);
275 /* Remove any previous exec file. */
278 /* Now open and digest the file the user requested, if any. */
283 printf_unfiltered (_("No executable file now.\n"));
285 set_gdbarch_from_file (NULL);
289 int load_via_target = 0;
290 char *scratch_pathname, *canonical_pathname;
292 struct target_section *sections = NULL, *sections_end = NULL;
295 if (is_target_filename (filename))
297 if (target_filesystem_is_local ())
298 filename += strlen (TARGET_SYSROOT_PREFIX);
305 /* gdb_bfd_fopen does not support "target:" filenames. */
307 warning (_("writing into executable files is "
308 "not supported for %s sysroots"),
309 TARGET_SYSROOT_PREFIX);
311 scratch_pathname = xstrdup (filename);
312 make_cleanup (xfree, scratch_pathname);
316 canonical_pathname = scratch_pathname;
320 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
321 filename, write_files ?
322 O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
324 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
325 if (scratch_chan < 0)
327 char *exename = (char *) alloca (strlen (filename) + 5);
329 strcat (strcpy (exename, filename), ".exe");
330 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
331 exename, write_files ?
333 : O_RDONLY | O_BINARY,
337 if (scratch_chan < 0)
338 perror_with_name (filename);
340 make_cleanup (xfree, scratch_pathname);
342 /* gdb_bfd_open (and its variants) prefers canonicalized
343 pathname for better BFD caching. */
344 canonical_pathname = gdb_realpath (scratch_pathname);
345 make_cleanup (xfree, canonical_pathname);
348 if (write_files && !load_via_target)
349 exec_bfd = gdb_bfd_fopen (canonical_pathname, gnutarget,
350 FOPEN_RUB, scratch_chan);
352 exec_bfd = gdb_bfd_open (canonical_pathname, gnutarget, scratch_chan);
356 error (_("\"%s\": could not open as an executable file: %s."),
357 scratch_pathname, bfd_errmsg (bfd_get_error ()));
360 /* gdb_realpath_keepfile resolves symlinks on the local
361 filesystem and so cannot be used for "target:" files. */
362 gdb_assert (exec_filename == NULL);
364 exec_filename = xstrdup (bfd_get_filename (exec_bfd));
366 exec_filename = gdb_realpath_keepfile (scratch_pathname);
368 if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
370 /* Make sure to close exec_bfd, or else "run" might try to use
373 error (_("\"%s\": not in executable format: %s"),
375 gdb_bfd_errmsg (bfd_get_error (), matching));
378 if (build_section_table (exec_bfd, §ions, §ions_end))
380 /* Make sure to close exec_bfd, or else "run" might try to use
383 error (_("\"%s\": can't find the file sections: %s"),
384 scratch_pathname, bfd_errmsg (bfd_get_error ()));
387 exec_bfd_mtime = bfd_get_mtime (exec_bfd);
391 set_gdbarch_from_file (exec_bfd);
393 /* Add the executable's sections to the current address spaces'
394 list of sections. This possibly pushes the exec_ops
396 add_target_sections (&exec_bfd, sections, sections_end);
399 /* Tell display code (if any) about the changed file name. */
400 if (deprecated_exec_file_display_hook)
401 (*deprecated_exec_file_display_hook) (filename);
404 do_cleanups (cleanups);
406 bfd_cache_close_all ();
407 observer_notify_executable_changed ();
410 /* Process the first arg in ARGS as the new exec file.
412 Note that we have to explicitly ignore additional args, since we can
413 be called from file_command(), which also calls symbol_file_command()
414 which can take multiple args.
416 If ARGS is NULL, we just want to close the exec file. */
419 exec_file_command (char *args, int from_tty)
424 if (from_tty && target_has_execution
425 && !query (_("A program is being debugged already.\n"
426 "Are you sure you want to change the file? ")))
427 error (_("File not changed."));
431 struct cleanup *cleanups;
433 /* Scan through the args and pick up the first non option arg
436 argv = gdb_buildargv (args);
437 cleanups = make_cleanup_freeargv (argv);
439 for (; (*argv != NULL) && (**argv == '-'); argv++)
443 error (_("No executable file name was specified"));
445 filename = tilde_expand (*argv);
446 make_cleanup (xfree, filename);
447 exec_file_attach (filename, from_tty);
449 do_cleanups (cleanups);
452 exec_file_attach (NULL, from_tty);
455 /* Set both the exec file and the symbol file, in one command.
456 What a novelty. Why did GDB go through four major releases before this
457 command was added? */
460 file_command (char *arg, int from_tty)
462 /* FIXME, if we lose on reading the symbol file, we should revert
463 the exec file, but that's rough. */
464 exec_file_command (arg, from_tty);
465 symbol_file_command (arg, from_tty);
466 if (deprecated_file_changed_hook)
467 deprecated_file_changed_hook (arg);
471 /* Locate all mappable sections of a BFD file.
472 table_pp_char is a char * to get it through bfd_map_over_sections;
473 we cast it back to its proper type. */
476 add_to_section_table (bfd *abfd, struct bfd_section *asect,
479 struct target_section **table_pp = (struct target_section **) table_pp_char;
482 gdb_assert (abfd == asect->owner);
484 /* Check the section flags, but do not discard zero-length sections, since
485 some symbols may still be attached to this section. For instance, we
486 encountered on sparc-solaris 2.10 a shared library with an empty .bss
487 section to which a symbol named "_end" was attached. The address
488 of this symbol still needs to be relocated. */
489 aflag = bfd_get_section_flags (abfd, asect);
490 if (!(aflag & SEC_ALLOC))
493 (*table_pp)->owner = NULL;
494 (*table_pp)->the_bfd_section = asect;
495 (*table_pp)->addr = bfd_section_vma (abfd, asect);
496 (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect);
503 clear_section_table (struct target_section_table *table)
505 xfree (table->sections);
506 table->sections = table->sections_end = NULL;
509 /* Resize section table TABLE by ADJUSTMENT.
510 ADJUSTMENT may be negative, in which case the caller must have already
511 removed the sections being deleted.
512 Returns the old size. */
515 resize_section_table (struct target_section_table *table, int adjustment)
520 old_count = table->sections_end - table->sections;
522 new_count = adjustment + old_count;
526 table->sections = XRESIZEVEC (struct target_section, table->sections,
528 table->sections_end = table->sections + new_count;
531 clear_section_table (table);
536 /* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
537 Returns 0 if OK, 1 on error. */
540 build_section_table (struct bfd *some_bfd, struct target_section **start,
541 struct target_section **end)
545 count = bfd_count_sections (some_bfd);
548 *start = XNEWVEC (struct target_section, count);
550 bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
551 if (*end > *start + count)
552 internal_error (__FILE__, __LINE__,
553 _("failed internal consistency check"));
554 /* We could realloc the table, but it probably loses for most files. */
558 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
559 current set of target sections. */
562 add_target_sections (void *owner,
563 struct target_section *sections,
564 struct target_section *sections_end)
567 struct target_section_table *table = current_target_sections;
569 count = sections_end - sections;
573 int space = resize_section_table (table, count);
576 for (i = 0; i < count; ++i)
578 table->sections[space + i] = sections[i];
579 table->sections[space + i].owner = owner;
582 /* If these are the first file sections we can provide memory
583 from, push the file_stratum target. */
584 if (!target_is_pushed (&exec_ops))
585 push_target (&exec_ops);
589 /* Add the sections of OBJFILE to the current set of target sections. */
592 add_target_sections_of_objfile (struct objfile *objfile)
594 struct target_section_table *table = current_target_sections;
595 struct obj_section *osect;
598 struct target_section *ts;
603 /* Compute the number of sections to add. */
604 ALL_OBJFILE_OSECTIONS (objfile, osect)
606 if (bfd_get_section_size (osect->the_bfd_section) == 0)
614 space = resize_section_table (table, count);
616 ts = table->sections + space;
618 ALL_OBJFILE_OSECTIONS (objfile, osect)
620 if (bfd_get_section_size (osect->the_bfd_section) == 0)
623 gdb_assert (ts < table->sections + space + count);
625 ts->addr = obj_section_addr (osect);
626 ts->endaddr = obj_section_endaddr (osect);
627 ts->the_bfd_section = osect->the_bfd_section;
628 ts->owner = (void *) objfile;
634 /* Remove all target sections owned by OWNER.
635 OWNER must be the same value passed to add_target_sections. */
638 remove_target_sections (void *owner)
640 struct target_section *src, *dest;
641 struct target_section_table *table = current_target_sections;
643 gdb_assert (owner != NULL);
645 dest = table->sections;
646 for (src = table->sections; src < table->sections_end; src++)
647 if (src->owner != owner)
649 /* Keep this section. */
655 /* If we've dropped any sections, resize the section table. */
660 old_count = resize_section_table (table, dest - src);
662 /* If we don't have any more sections to read memory from,
663 remove the file_stratum target from the stack. */
664 if (old_count + (dest - src) == 0)
666 struct program_space *pspace;
669 if (pspace->target_sections.sections
670 != pspace->target_sections.sections_end)
673 unpush_target (&exec_ops);
680 enum target_xfer_status
681 exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
682 ULONGEST len, ULONGEST *xfered_len)
684 /* It's unduly pedantic to refuse to look at the executable for
685 read-only pieces; so do the equivalent of readonly regions aka
687 if (exec_bfd != NULL)
693 for (s = exec_bfd->sections; s; s = s->next)
695 if ((s->flags & SEC_LOAD) == 0
696 || (s->flags & SEC_READONLY) == 0)
700 size = bfd_get_section_size (s);
701 if (vma <= offset && offset < (vma + size))
705 amt = (vma + size) - offset;
709 amt = bfd_get_section_contents (exec_bfd, s,
710 readbuf, offset - vma, amt);
713 return TARGET_XFER_EOF;
717 return TARGET_XFER_OK;
723 /* Indicate failure to find the requested memory block. */
724 return TARGET_XFER_E_IO;
727 /* Appends all read-only memory ranges found in the target section
728 table defined by SECTIONS and SECTIONS_END, starting at (and
729 intersected with) MEMADDR for LEN bytes. Returns the augmented
732 static VEC(mem_range_s) *
733 section_table_available_memory (VEC(mem_range_s) *memory,
734 CORE_ADDR memaddr, ULONGEST len,
735 struct target_section *sections,
736 struct target_section *sections_end)
738 struct target_section *p;
740 for (p = sections; p < sections_end; p++)
742 if ((bfd_get_section_flags (p->the_bfd_section->owner,
744 & SEC_READONLY) == 0)
747 /* Copy the meta-data, adjusted. */
748 if (mem_ranges_overlap (p->addr, p->endaddr - p->addr, memaddr, len))
750 ULONGEST lo1, hi1, lo2, hi2;
759 r = VEC_safe_push (mem_range_s, memory, NULL);
761 r->start = max (lo1, lo2);
762 r->length = min (hi1, hi2) - r->start;
769 enum target_xfer_status
770 section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
771 ULONGEST len, ULONGEST *xfered_len)
773 VEC(mem_range_s) *available_memory = NULL;
774 struct target_section_table *table;
775 struct cleanup *old_chain;
779 table = target_get_section_table (&exec_ops);
780 available_memory = section_table_available_memory (available_memory,
783 table->sections_end);
785 old_chain = make_cleanup (VEC_cleanup(mem_range_s),
788 normalize_mem_ranges (available_memory);
791 VEC_iterate (mem_range_s, available_memory, i, r);
794 if (mem_ranges_overlap (r->start, r->length, offset, len))
797 enum target_xfer_status status;
799 /* Get the intersection window. */
800 end = min (offset + len, r->start + r->length);
802 gdb_assert (end - offset <= len);
804 if (offset >= r->start)
805 status = exec_read_partial_read_only (readbuf, offset,
810 *xfered_len = r->start - offset;
811 status = TARGET_XFER_UNAVAILABLE;
813 do_cleanups (old_chain);
817 do_cleanups (old_chain);
820 return TARGET_XFER_UNAVAILABLE;
823 enum target_xfer_status
824 section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
825 ULONGEST offset, ULONGEST len,
826 ULONGEST *xfered_len,
827 struct target_section *sections,
828 struct target_section *sections_end,
829 const char *section_name)
832 struct target_section *p;
833 ULONGEST memaddr = offset;
834 ULONGEST memend = memaddr + len;
837 internal_error (__FILE__, __LINE__,
838 _("failed internal consistency check"));
840 for (p = sections; p < sections_end; p++)
842 struct bfd_section *asect = p->the_bfd_section;
843 bfd *abfd = asect->owner;
845 if (section_name && strcmp (section_name, asect->name) != 0)
846 continue; /* not the section we need. */
847 if (memaddr >= p->addr)
849 if (memend <= p->endaddr)
851 /* Entire transfer is within this section. */
853 res = bfd_set_section_contents (abfd, asect,
854 writebuf, memaddr - p->addr,
857 res = bfd_get_section_contents (abfd, asect,
858 readbuf, memaddr - p->addr,
864 return TARGET_XFER_OK;
867 return TARGET_XFER_EOF;
869 else if (memaddr >= p->endaddr)
871 /* This section ends before the transfer starts. */
876 /* This section overlaps the transfer. Just do half. */
877 len = p->endaddr - memaddr;
879 res = bfd_set_section_contents (abfd, asect,
880 writebuf, memaddr - p->addr,
883 res = bfd_get_section_contents (abfd, asect,
884 readbuf, memaddr - p->addr,
889 return TARGET_XFER_OK;
892 return TARGET_XFER_EOF;
897 return TARGET_XFER_EOF; /* We can't help. */
900 static struct target_section_table *
901 exec_get_section_table (struct target_ops *ops)
903 return current_target_sections;
906 static enum target_xfer_status
907 exec_xfer_partial (struct target_ops *ops, enum target_object object,
908 const char *annex, gdb_byte *readbuf,
909 const gdb_byte *writebuf,
910 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
912 struct target_section_table *table = target_get_section_table (ops);
914 if (object == TARGET_OBJECT_MEMORY)
915 return section_table_xfer_memory_partial (readbuf, writebuf,
916 offset, len, xfered_len,
921 return TARGET_XFER_E_IO;
926 print_section_info (struct target_section_table *t, bfd *abfd)
928 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
929 struct target_section *p;
930 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
931 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
933 printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
935 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
936 if (abfd == exec_bfd)
938 /* gcc-3.4 does not like the initialization in
939 <p == t->sections_end>. */
940 bfd_vma displacement = 0;
943 for (p = t->sections; p < t->sections_end; p++)
945 struct bfd_section *psect = p->the_bfd_section;
946 bfd *pbfd = psect->owner;
948 if ((bfd_get_section_flags (pbfd, psect) & (SEC_ALLOC | SEC_LOAD))
949 != (SEC_ALLOC | SEC_LOAD))
952 if (bfd_get_section_vma (pbfd, psect) <= abfd->start_address
953 && abfd->start_address < (bfd_get_section_vma (pbfd, psect)
954 + bfd_get_section_size (psect)))
956 displacement = p->addr - bfd_get_section_vma (pbfd, psect);
960 if (p == t->sections_end)
961 warning (_("Cannot find section for the entry point of %s."),
962 bfd_get_filename (abfd));
964 entry_point = gdbarch_addr_bits_remove (gdbarch,
965 bfd_get_start_address (abfd)
967 printf_filtered (_("\tEntry point: %s\n"),
968 paddress (gdbarch, entry_point));
970 for (p = t->sections; p < t->sections_end; p++)
972 struct bfd_section *psect = p->the_bfd_section;
973 bfd *pbfd = psect->owner;
975 printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
976 printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
978 /* FIXME: A format of "08l" is not wide enough for file offsets
979 larger than 4GB. OTOH, making it "016l" isn't desirable either
980 since most output will then be much wider than necessary. It
981 may make sense to test the size of the file and choose the
982 format string accordingly. */
983 /* FIXME: i18n: Need to rewrite this sentence. */
985 printf_filtered (" @ %s",
986 hex_string_custom (psect->filepos, 8));
987 printf_filtered (" is %s", bfd_section_name (pbfd, psect));
989 printf_filtered (" in %s", bfd_get_filename (pbfd));
990 printf_filtered ("\n");
995 exec_files_info (struct target_ops *t)
998 print_section_info (current_target_sections, exec_bfd);
1000 puts_filtered (_("\t<no file loaded>\n"));
1004 set_section_command (char *args, int from_tty)
1006 struct target_section *p;
1009 unsigned long secaddr;
1012 struct target_section_table *table;
1015 error (_("Must specify section name and its virtual address"));
1017 /* Parse out section name. */
1018 for (secname = args; !isspace (*args); args++);
1019 seclen = args - secname;
1021 /* Parse out new virtual address. */
1022 secaddr = parse_and_eval_address (args);
1024 table = current_target_sections;
1025 for (p = table->sections; p < table->sections_end; p++)
1027 if (!strncmp (secname, bfd_section_name (p->bfd,
1028 p->the_bfd_section), seclen)
1029 && bfd_section_name (p->bfd, p->the_bfd_section)[seclen] == '\0')
1031 offset = secaddr - p->addr;
1033 p->endaddr += offset;
1035 exec_files_info (&exec_ops);
1039 if (seclen >= sizeof (secprint))
1040 seclen = sizeof (secprint) - 1;
1041 strncpy (secprint, secname, seclen);
1042 secprint[seclen] = '\0';
1043 error (_("Section %s not found"), secprint);
1046 /* If we can find a section in FILENAME with BFD index INDEX, adjust
1050 exec_set_section_address (const char *filename, int index, CORE_ADDR address)
1052 struct target_section *p;
1053 struct target_section_table *table;
1055 table = current_target_sections;
1056 for (p = table->sections; p < table->sections_end; p++)
1058 if (filename_cmp (filename, p->the_bfd_section->owner->filename) == 0
1059 && index == p->the_bfd_section->index)
1061 p->endaddr += address - p->addr;
1067 /* If mourn is being called in all the right places, this could be say
1068 `gdb internal error' (since generic_mourn calls
1069 breakpoint_init_inferior). */
1072 ignore (struct target_ops *ops, struct gdbarch *gdbarch,
1073 struct bp_target_info *bp_tgt)
1079 exec_has_memory (struct target_ops *ops)
1081 /* We can provide memory if we have any file/target sections to read
1083 return (current_target_sections->sections
1084 != current_target_sections->sections_end);
1088 exec_make_note_section (struct target_ops *self, bfd *obfd, int *note_size)
1090 error (_("Can't create a corefile"));
1093 /* Fill in the exec file target vector. Very few entries need to be
1097 init_exec_ops (void)
1099 exec_ops.to_shortname = "exec";
1100 exec_ops.to_longname = "Local exec file";
1101 exec_ops.to_doc = "Use an executable file as a target.\n\
1102 Specify the filename of the executable file.";
1103 exec_ops.to_open = exec_open;
1104 exec_ops.to_close = exec_close_1;
1105 exec_ops.to_xfer_partial = exec_xfer_partial;
1106 exec_ops.to_get_section_table = exec_get_section_table;
1107 exec_ops.to_files_info = exec_files_info;
1108 exec_ops.to_insert_breakpoint = ignore;
1109 exec_ops.to_remove_breakpoint = ignore;
1110 exec_ops.to_stratum = file_stratum;
1111 exec_ops.to_has_memory = exec_has_memory;
1112 exec_ops.to_make_corefile_notes = exec_make_note_section;
1113 exec_ops.to_find_memory_regions = objfile_find_memory_regions;
1114 exec_ops.to_magic = OPS_MAGIC;
1118 _initialize_exec (void)
1120 struct cmd_list_element *c;
1126 c = add_cmd ("file", class_files, file_command, _("\
1127 Use FILE as program to be debugged.\n\
1128 It is read for its symbols, for getting the contents of pure memory,\n\
1129 and it is the program executed when you use the `run' command.\n\
1130 If FILE cannot be found as specified, your execution directory path\n\
1131 ($PATH) is searched for a command of that name.\n\
1132 No arg means to have no executable file and no symbols."), &cmdlist);
1133 set_cmd_completer (c, filename_completer);
1136 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
1137 Use FILE as program for getting contents of pure memory.\n\
1138 If FILE cannot be found as specified, your execution directory path\n\
1139 is searched for a command of that name.\n\
1140 No arg means have no executable file."), &cmdlist);
1141 set_cmd_completer (c, filename_completer);
1143 add_com ("section", class_files, set_section_command, _("\
1144 Change the base address of section SECTION of the exec file to ADDR.\n\
1145 This can be used if the exec file does not contain section addresses,\n\
1146 (such as in the a.out format), or when the addresses specified in the\n\
1147 file itself are wrong. Each section must be changed separately. The\n\
1148 ``info files'' command lists all the sections and their addresses."));
1150 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
1151 Set writing into executable and core files."), _("\
1152 Show writing into executable and core files."), NULL,
1155 &setlist, &showlist);
1157 add_target_with_completer (&exec_ops, filename_completer);