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