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