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