xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/exec.c (revision d909946ca08dceb44d7d0f22ec9488679695d976)
1 /* Work with executable files, for GDB.
2 
3    Copyright (C) 1988-2015 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 
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 
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 
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 }
1014