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