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