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