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