]> Git Repo - binutils.git/blame - gdb/exec.c
Change add_target_sections_of_objfile to method on program_space
[binutils.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. */
3769e227
TT
500 current_program_space->add_target_sections (&current_program_space->ebfd,
501 sections);
c906108c
SS
502
503 /* Tell display code (if any) about the changed file name. */
9a4105ab
AC
504 if (deprecated_exec_file_display_hook)
505 (*deprecated_exec_file_display_hook) (filename);
c906108c 506 }
9b333ba3 507
ce7d4522 508 bfd_cache_close_all ();
76727919 509 gdb::observers::executable_changed.notify ();
c906108c
SS
510}
511
512/* Process the first arg in ARGS as the new exec file.
513
c5aa993b
JM
514 Note that we have to explicitly ignore additional args, since we can
515 be called from file_command(), which also calls symbol_file_command()
1adeb98a
FN
516 which can take multiple args.
517
0963b4bd 518 If ARGS is NULL, we just want to close the exec file. */
c906108c 519
1adeb98a 520static void
1d8b34a7 521exec_file_command (const char *args, int from_tty)
c906108c 522{
55f6301a 523 if (from_tty && target_has_execution ()
4c42eaff
DJ
524 && !query (_("A program is being debugged already.\n"
525 "Are you sure you want to change the file? ")))
526 error (_("File not changed."));
1adeb98a
FN
527
528 if (args)
529 {
530 /* Scan through the args and pick up the first non option arg
531 as the filename. */
532
773a1edc
TT
533 gdb_argv built_argv (args);
534 char **argv = built_argv.get ();
1adeb98a
FN
535
536 for (; (*argv != NULL) && (**argv == '-'); argv++)
537 {;
538 }
539 if (*argv == NULL)
8a3fe4f8 540 error (_("No executable file name was specified"));
1adeb98a 541
773a1edc
TT
542 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (*argv));
543 exec_file_attach (filename.get (), from_tty);
1adeb98a
FN
544 }
545 else
546 exec_file_attach (NULL, from_tty);
c906108c
SS
547}
548
0963b4bd 549/* Set both the exec file and the symbol file, in one command.
c906108c
SS
550 What a novelty. Why did GDB go through four major releases before this
551 command was added? */
552
553static void
1d8b34a7 554file_command (const char *arg, int from_tty)
c906108c
SS
555{
556 /* FIXME, if we lose on reading the symbol file, we should revert
557 the exec file, but that's rough. */
558 exec_file_command (arg, from_tty);
559 symbol_file_command (arg, from_tty);
9a4105ab
AC
560 if (deprecated_file_changed_hook)
561 deprecated_file_changed_hook (arg);
c906108c 562}
c906108c 563\f
c5aa993b 564
2d128614 565/* Builds a section table, given args BFD, TABLE. */
c906108c 566
2d128614
TT
567target_section_table
568build_section_table (struct bfd *some_bfd)
c906108c 569{
2d128614
TT
570 target_section_table table;
571
8a6bb1d1
TT
572 for (asection *asect : gdb_bfd_sections (some_bfd))
573 {
574 flagword aflag;
575
576 /* Check the section flags, but do not discard zero-length
577 sections, since some symbols may still be attached to this
578 section. For instance, we encountered on sparc-solaris 2.10
579 a shared library with an empty .bss section to which a symbol
580 named "_end" was attached. The address of this symbol still
581 needs to be relocated. */
582 aflag = bfd_section_flags (asect);
583 if (!(aflag & SEC_ALLOC))
584 continue;
585
6be2a9ab
TT
586 table.emplace_back (bfd_section_vma (asect),
587 bfd_section_vma (asect) + bfd_section_size (asect),
588 asect);
8a6bb1d1 589 }
e2ff18a0 590
2d128614 591 return table;
c906108c 592}
07b82ea5
PA
593
594/* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
595 current set of target sections. */
596
597void
3769e227
TT
598program_space::add_target_sections (void *owner,
599 const target_section_table &sections)
07b82ea5 600{
d7a78e5c 601 if (!sections.empty ())
07b82ea5 602 {
d7a78e5c 603 for (const target_section &s : sections)
ed9eebaf 604 {
3769e227
TT
605 target_sections.push_back (s);
606 target_sections.back ().owner = owner;
ed9eebaf 607 }
07b82ea5 608
53af73bf 609 scoped_restore_current_pspace_and_thread restore_pspace_thread;
5b6d1e4f 610
07b82ea5 611 /* If these are the first file sections we can provide memory
5b6d1e4f
PA
612 from, push the file_stratum target. Must do this in all
613 inferiors sharing the program space. */
614 for (inferior *inf : all_inferiors ())
615 {
3769e227 616 if (inf->pspace != this)
5b6d1e4f
PA
617 continue;
618
619 if (inf->target_is_pushed (&exec_ops))
620 continue;
621
622 switch_to_inferior_no_thread (inf);
623 push_target (&exec_ops);
624 }
07b82ea5
PA
625 }
626}
627
76ad5e1e
NB
628/* Add the sections of OBJFILE to the current set of target sections. */
629
630void
d9eebde0 631program_space::add_target_sections (struct objfile *objfile)
76ad5e1e 632{
76ad5e1e 633 struct obj_section *osect;
76ad5e1e 634
91840ee3 635 gdb_assert (objfile != nullptr);
76ad5e1e
NB
636
637 /* Compute the number of sections to add. */
76ad5e1e
NB
638 ALL_OBJFILE_OSECTIONS (objfile, osect)
639 {
fd361982 640 if (bfd_section_size (osect->the_bfd_section) == 0)
76ad5e1e
NB
641 continue;
642
d9eebde0
TT
643 target_sections.emplace_back (obj_section_addr (osect),
644 obj_section_endaddr (osect),
645 osect->the_bfd_section, (void *) objfile);
76ad5e1e
NB
646 }
647}
648
046ac79f
JK
649/* Remove all target sections owned by OWNER.
650 OWNER must be the same value passed to add_target_sections. */
07b82ea5
PA
651
652void
2a3f84af 653program_space::remove_target_sections (void *owner)
07b82ea5 654{
046ac79f
JK
655 gdb_assert (owner != NULL);
656
2a3f84af
TT
657 auto it = std::remove_if (target_sections.begin (),
658 target_sections.end (),
bb2a6777
TT
659 [&] (target_section &sect)
660 {
661 return sect.owner == owner;
662 });
2a3f84af 663 target_sections.erase (it, target_sections.end ());
bb2a6777
TT
664
665 /* If we don't have any more sections to read memory from,
666 remove the file_stratum target from the stack of each
667 inferior sharing the program space. */
2a3f84af 668 if (target_sections.empty ())
07b82ea5 669 {
bb2a6777 670 scoped_restore_current_pspace_and_thread restore_pspace_thread;
07b82ea5 671
bb2a6777 672 for (inferior *inf : all_inferiors ())
6c95b8df 673 {
2a3f84af 674 if (inf->pspace != this)
bb2a6777 675 continue;
6c95b8df 676
bb2a6777
TT
677 switch_to_inferior_no_thread (inf);
678 unpush_target (&exec_ops);
6c95b8df 679 }
07b82ea5
PA
680 }
681}
682
5b6d1e4f
PA
683/* See exec.h. */
684
685void
686exec_on_vfork ()
687{
d7a78e5c 688 if (!current_program_space->target_sections.empty ())
5b6d1e4f
PA
689 push_target (&exec_ops);
690}
691
c906108c 692\f
348f8c02 693
1ca49d37
YQ
694enum target_xfer_status
695exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
696 ULONGEST len, ULONGEST *xfered_len)
697{
698 /* It's unduly pedantic to refuse to look at the executable for
699 read-only pieces; so do the equivalent of readonly regions aka
700 QTro packet. */
7e10abd1 701 if (current_program_space->exec_bfd () != NULL)
1ca49d37
YQ
702 {
703 asection *s;
704 bfd_size_type size;
705 bfd_vma vma;
706
7e10abd1 707 for (s = current_program_space->exec_bfd ()->sections; s; s = s->next)
1ca49d37
YQ
708 {
709 if ((s->flags & SEC_LOAD) == 0
710 || (s->flags & SEC_READONLY) == 0)
711 continue;
712
713 vma = s->vma;
fd361982 714 size = bfd_section_size (s);
1ca49d37
YQ
715 if (vma <= offset && offset < (vma + size))
716 {
717 ULONGEST amt;
718
719 amt = (vma + size) - offset;
720 if (amt > len)
721 amt = len;
722
7e10abd1 723 amt = bfd_get_section_contents (current_program_space->exec_bfd (), s,
1ca49d37
YQ
724 readbuf, offset - vma, amt);
725
726 if (amt == 0)
727 return TARGET_XFER_EOF;
728 else
729 {
730 *xfered_len = amt;
731 return TARGET_XFER_OK;
732 }
733 }
734 }
735 }
736
737 /* Indicate failure to find the requested memory block. */
738 return TARGET_XFER_E_IO;
739}
740
a79b1bc6 741/* Return all read-only memory ranges found in the target section
5a2eb0ef 742 table defined by SECTIONS and SECTIONS_END, starting at (and
a79b1bc6 743 intersected with) MEMADDR for LEN bytes. */
5a2eb0ef 744
a79b1bc6
SM
745static std::vector<mem_range>
746section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
bb2a6777 747 const target_section_table &sections)
e6ca34fc 748{
a79b1bc6 749 std::vector<mem_range> memory;
e6ca34fc 750
d7a78e5c 751 for (const target_section &p : sections)
e6ca34fc 752 {
bb2a6777 753 if ((bfd_section_flags (p.the_bfd_section) & SEC_READONLY) == 0)
e6ca34fc
PA
754 continue;
755
756 /* Copy the meta-data, adjusted. */
bb2a6777 757 if (mem_ranges_overlap (p.addr, p.endaddr - p.addr, memaddr, len))
e6ca34fc
PA
758 {
759 ULONGEST lo1, hi1, lo2, hi2;
e6ca34fc
PA
760
761 lo1 = memaddr;
762 hi1 = memaddr + len;
763
bb2a6777
TT
764 lo2 = p.addr;
765 hi2 = p.endaddr;
e6ca34fc 766
a79b1bc6
SM
767 CORE_ADDR start = std::max (lo1, lo2);
768 int length = std::min (hi1, hi2) - start;
e6ca34fc 769
a79b1bc6 770 memory.emplace_back (start, length);
e6ca34fc
PA
771 }
772 }
773
774 return memory;
775}
776
1ee79381
YQ
777enum target_xfer_status
778section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
779 ULONGEST len, ULONGEST *xfered_len)
780{
a79b1bc6
SM
781 target_section_table *table = target_get_section_table (&exec_ops);
782 std::vector<mem_range> available_memory
bb2a6777 783 = section_table_available_memory (offset, len, *table);
1ee79381 784
a79b1bc6 785 normalize_mem_ranges (&available_memory);
1ee79381 786
a79b1bc6 787 for (const mem_range &r : available_memory)
1ee79381 788 {
a79b1bc6 789 if (mem_ranges_overlap (r.start, r.length, offset, len))
1ee79381
YQ
790 {
791 CORE_ADDR end;
792 enum target_xfer_status status;
793
794 /* Get the intersection window. */
a79b1bc6 795 end = std::min<CORE_ADDR> (offset + len, r.start + r.length);
1ee79381
YQ
796
797 gdb_assert (end - offset <= len);
798
a79b1bc6 799 if (offset >= r.start)
1ee79381
YQ
800 status = exec_read_partial_read_only (readbuf, offset,
801 end - offset,
802 xfered_len);
803 else
804 {
a79b1bc6 805 *xfered_len = r.start - offset;
bc113b4e 806 status = TARGET_XFER_UNAVAILABLE;
1ee79381 807 }
1ee79381
YQ
808 return status;
809 }
810 }
1ee79381
YQ
811
812 *xfered_len = len;
bc113b4e 813 return TARGET_XFER_UNAVAILABLE;
1ee79381
YQ
814}
815
9b409511 816enum target_xfer_status
07b82ea5 817section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
b55e14c7 818 ULONGEST offset, ULONGEST len,
9b409511 819 ULONGEST *xfered_len,
bb2a6777 820 const target_section_table &sections,
e56cb451
KB
821 gdb::function_view<bool
822 (const struct target_section *)> match_cb)
c906108c 823{
020cc13c 824 int res;
07b82ea5
PA
825 ULONGEST memaddr = offset;
826 ULONGEST memend = memaddr + len;
c906108c 827
e2ff18a0 828 gdb_assert (len != 0);
c906108c 829
d7a78e5c 830 for (const target_section &p : sections)
c906108c 831 {
bb2a6777 832 struct bfd_section *asect = p.the_bfd_section;
2b2848e2
DE
833 bfd *abfd = asect->owner;
834
bb2a6777 835 if (match_cb != nullptr && !match_cb (&p))
0963b4bd 836 continue; /* not the section we need. */
bb2a6777 837 if (memaddr >= p.addr)
3db26b01 838 {
bb2a6777 839 if (memend <= p.endaddr)
3db26b01
JB
840 {
841 /* Entire transfer is within this section. */
07b82ea5 842 if (writebuf)
2b2848e2 843 res = bfd_set_section_contents (abfd, asect,
bb2a6777 844 writebuf, memaddr - p.addr,
85302095
AC
845 len);
846 else
2b2848e2 847 res = bfd_get_section_contents (abfd, asect,
bb2a6777 848 readbuf, memaddr - p.addr,
85302095 849 len);
9b409511
YQ
850
851 if (res != 0)
852 {
853 *xfered_len = len;
854 return TARGET_XFER_OK;
855 }
856 else
857 return TARGET_XFER_EOF;
3db26b01 858 }
bb2a6777 859 else if (memaddr >= p.endaddr)
3db26b01
JB
860 {
861 /* This section ends before the transfer starts. */
862 continue;
863 }
864 else
865 {
866 /* This section overlaps the transfer. Just do half. */
bb2a6777 867 len = p.endaddr - memaddr;
07b82ea5 868 if (writebuf)
2b2848e2 869 res = bfd_set_section_contents (abfd, asect,
bb2a6777 870 writebuf, memaddr - p.addr,
85302095
AC
871 len);
872 else
2b2848e2 873 res = bfd_get_section_contents (abfd, asect,
bb2a6777 874 readbuf, memaddr - p.addr,
85302095 875 len);
9b409511
YQ
876 if (res != 0)
877 {
878 *xfered_len = len;
879 return TARGET_XFER_OK;
880 }
881 else
882 return TARGET_XFER_EOF;
3db26b01
JB
883 }
884 }
c906108c
SS
885 }
886
9b409511 887 return TARGET_XFER_EOF; /* We can't help. */
c906108c 888}
348f8c02 889
d7a78e5c 890target_section_table *
f6ac5f3d 891exec_target::get_section_table ()
348f8c02 892{
b55221ab 893 return &current_program_space->target_sections;
348f8c02
PA
894}
895
f6ac5f3d
PA
896enum target_xfer_status
897exec_target::xfer_partial (enum target_object object,
898 const char *annex, gdb_byte *readbuf,
899 const gdb_byte *writebuf,
900 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
348f8c02 901{
d7a78e5c 902 target_section_table *table = get_section_table ();
07b82ea5
PA
903
904 if (object == TARGET_OBJECT_MEMORY)
905 return section_table_xfer_memory_partial (readbuf, writebuf,
9b409511 906 offset, len, xfered_len,
bb2a6777 907 *table);
07b82ea5 908 else
2ed4b548 909 return TARGET_XFER_E_IO;
348f8c02 910}
c906108c 911\f
c5aa993b 912
c906108c 913void
d7a78e5c 914print_section_info (target_section_table *t, bfd *abfd)
c906108c 915{
5af949e3 916 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
17a912b6 917 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
5af949e3 918 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
c906108c 919
a2fedca9
PW
920 printf_filtered ("\t`%ps', ",
921 styled_string (file_name_style.style (),
922 bfd_get_filename (abfd)));
c906108c 923 wrap_here (" ");
a3f17187 924 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
7e10abd1 925 if (abfd == current_program_space->exec_bfd ())
51bee8e9 926 {
3e43a32a
MS
927 /* gcc-3.4 does not like the initialization in
928 <p == t->sections_end>. */
d904de5b 929 bfd_vma displacement = 0;
2f1bdd26 930 bfd_vma entry_point;
bb2a6777 931 bool found = false;
51bee8e9 932
d7a78e5c 933 for (const target_section &p : *t)
51bee8e9 934 {
bb2a6777 935 struct bfd_section *psect = p.the_bfd_section;
51bee8e9 936
fd361982 937 if ((bfd_section_flags (psect) & (SEC_ALLOC | SEC_LOAD))
51bee8e9
JK
938 != (SEC_ALLOC | SEC_LOAD))
939 continue;
940
fd361982
AM
941 if (bfd_section_vma (psect) <= abfd->start_address
942 && abfd->start_address < (bfd_section_vma (psect)
943 + bfd_section_size (psect)))
51bee8e9 944 {
bb2a6777
TT
945 displacement = p.addr - bfd_section_vma (psect);
946 found = true;
51bee8e9
JK
947 break;
948 }
949 }
bb2a6777 950 if (!found)
a2fedca9
PW
951 warning (_("Cannot find section for the entry point of %ps."),
952 styled_string (file_name_style.style (),
953 bfd_get_filename (abfd)));
51bee8e9 954
2f1bdd26
MGD
955 entry_point = gdbarch_addr_bits_remove (gdbarch,
956 bfd_get_start_address (abfd)
957 + displacement);
51bee8e9 958 printf_filtered (_("\tEntry point: %s\n"),
2f1bdd26 959 paddress (gdbarch, entry_point));
51bee8e9 960 }
d7a78e5c 961 for (const target_section &p : *t)
c906108c 962 {
bb2a6777 963 struct bfd_section *psect = p.the_bfd_section;
2b2848e2
DE
964 bfd *pbfd = psect->owner;
965
bb2a6777
TT
966 printf_filtered ("\t%s", hex_string_custom (p.addr, wid));
967 printf_filtered (" - %s", hex_string_custom (p.endaddr, wid));
bcf16802
KB
968
969 /* FIXME: A format of "08l" is not wide enough for file offsets
970 larger than 4GB. OTOH, making it "016l" isn't desirable either
971 since most output will then be much wider than necessary. It
972 may make sense to test the size of the file and choose the
973 format string accordingly. */
a3f17187 974 /* FIXME: i18n: Need to rewrite this sentence. */
c906108c
SS
975 if (info_verbose)
976 printf_filtered (" @ %s",
2b2848e2 977 hex_string_custom (psect->filepos, 8));
fd361982 978 printf_filtered (" is %s", bfd_section_name (psect));
2b2848e2 979 if (pbfd != abfd)
a2fedca9
PW
980 printf_filtered (" in %ps",
981 styled_string (file_name_style.style (),
982 bfd_get_filename (pbfd)));
c906108c
SS
983 printf_filtered ("\n");
984 }
985}
986
f6ac5f3d
PA
987void
988exec_target::files_info ()
c906108c 989{
7e10abd1
TT
990 if (current_program_space->exec_bfd ())
991 print_section_info (&current_program_space->target_sections,
992 current_program_space->exec_bfd ());
57008375
JK
993 else
994 puts_filtered (_("\t<no file loaded>\n"));
c906108c
SS
995}
996
997static void
0b39b52e 998set_section_command (const char *args, int from_tty)
c906108c 999{
0b39b52e 1000 const char *secname;
c906108c
SS
1001 unsigned seclen;
1002 unsigned long secaddr;
1003 char secprint[100];
1004 long offset;
1005
1006 if (args == 0)
8a3fe4f8 1007 error (_("Must specify section name and its virtual address"));
c906108c 1008
0963b4bd 1009 /* Parse out section name. */
c5aa993b 1010 for (secname = args; !isspace (*args); args++);
c906108c
SS
1011 seclen = args - secname;
1012
0963b4bd 1013 /* Parse out new virtual address. */
c906108c
SS
1014 secaddr = parse_and_eval_address (args);
1015
b55221ab 1016 for (target_section &p : current_program_space->target_sections)
c5aa993b 1017 {
bb2a6777
TT
1018 if (!strncmp (secname, bfd_section_name (p.the_bfd_section), seclen)
1019 && bfd_section_name (p.the_bfd_section)[seclen] == '\0')
c5aa993b 1020 {
bb2a6777
TT
1021 offset = secaddr - p.addr;
1022 p.addr += offset;
1023 p.endaddr += offset;
c5aa993b 1024 if (from_tty)
f6ac5f3d 1025 exec_ops.files_info ();
c5aa993b
JM
1026 return;
1027 }
c906108c 1028 }
c906108c
SS
1029 if (seclen >= sizeof (secprint))
1030 seclen = sizeof (secprint) - 1;
1031 strncpy (secprint, secname, seclen);
1032 secprint[seclen] = '\0';
8a3fe4f8 1033 error (_("Section %s not found"), secprint);
c906108c
SS
1034}
1035
30510692
DJ
1036/* If we can find a section in FILENAME with BFD index INDEX, adjust
1037 it to ADDRESS. */
c1bd25fd
DJ
1038
1039void
1040exec_set_section_address (const char *filename, int index, CORE_ADDR address)
1041{
b55221ab 1042 for (target_section &p : current_program_space->target_sections)
c1bd25fd 1043 {
c7e97679 1044 if (filename_cmp (filename,
bb2a6777
TT
1045 bfd_get_filename (p.the_bfd_section->owner)) == 0
1046 && index == p.the_bfd_section->index)
c1bd25fd 1047 {
bb2a6777
TT
1048 p.endaddr += address - p.addr;
1049 p.addr = address;
c1bd25fd
DJ
1050 }
1051 }
1052}
1053
57810aa7 1054bool
f6ac5f3d 1055exec_target::has_memory ()
c35b1492
PA
1056{
1057 /* We can provide memory if we have any file/target sections to read
1058 from. */
b55221ab 1059 return !current_program_space->target_sections.empty ();
c35b1492
PA
1060}
1061
24f5300a 1062gdb::unique_xmalloc_ptr<char>
f6ac5f3d 1063exec_target::make_corefile_notes (bfd *obfd, int *note_size)
83814951
TT
1064{
1065 error (_("Can't create a corefile"));
1066}
be4d1333 1067
f6ac5f3d
PA
1068int
1069exec_target::find_memory_regions (find_memory_region_ftype func, void *data)
c906108c 1070{
f6ac5f3d 1071 return objfile_find_memory_regions (this, func, data);
c906108c
SS
1072}
1073
6c265988 1074void _initialize_exec ();
c906108c 1075void
6c265988 1076_initialize_exec ()
c906108c
SS
1077{
1078 struct cmd_list_element *c;
1079
c906108c
SS
1080 if (!dbx_commands)
1081 {
1a966eab
AC
1082 c = add_cmd ("file", class_files, file_command, _("\
1083Use FILE as program to be debugged.\n\
c906108c
SS
1084It is read for its symbols, for getting the contents of pure memory,\n\
1085and it is the program executed when you use the `run' command.\n\
1086If FILE cannot be found as specified, your execution directory path\n\
1087($PATH) is searched for a command of that name.\n\
1a966eab 1088No arg means to have no executable file and no symbols."), &cmdlist);
5ba2abeb 1089 set_cmd_completer (c, filename_completer);
c906108c
SS
1090 }
1091
1a966eab
AC
1092 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
1093Use FILE as program for getting contents of pure memory.\n\
c906108c
SS
1094If FILE cannot be found as specified, your execution directory path\n\
1095is searched for a command of that name.\n\
1a966eab 1096No arg means have no executable file."), &cmdlist);
5ba2abeb 1097 set_cmd_completer (c, filename_completer);
c906108c 1098
1bedd215
AC
1099 add_com ("section", class_files, set_section_command, _("\
1100Change the base address of section SECTION of the exec file to ADDR.\n\
c906108c
SS
1101This can be used if the exec file does not contain section addresses,\n\
1102(such as in the a.out format), or when the addresses specified in the\n\
1103file itself are wrong. Each section must be changed separately. The\n\
1bedd215 1104``info files'' command lists all the sections and their addresses."));
c906108c 1105
5bf193a2
AC
1106 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
1107Set writing into executable and core files."), _("\
1108Show writing into executable and core files."), NULL,
1109 NULL,
920d2a44 1110 show_write_files,
5bf193a2 1111 &setlist, &showlist);
c5aa993b 1112
a2fedca9
PW
1113 add_setshow_enum_cmd ("exec-file-mismatch", class_support,
1114 exec_file_mismatch_names,
1115 &exec_file_mismatch,
1116 _("\
1117Set exec-file-mismatch handling (ask|warn|off)."),
1118 _("\
1119Show exec-file-mismatch handling (ask|warn|off)."),
1120 _("\
98c59b52
PA
1121Specifies how to handle a mismatch between the current exec-file\n\
1122loaded by GDB and the exec-file automatically determined when attaching\n\
a2fedca9
PW
1123to a process:\n\n\
1124 ask - warn the user and ask whether to load the determined exec-file.\n\
1125 warn - warn the user, but do not change the exec-file.\n\
0a278aa7
PW
1126 off - do not check for mismatch.\n\
1127\n\
1128GDB detects a mismatch by comparing the build IDs of the files.\n\
1129If the user confirms loading the determined exec-file, then its symbols\n\
1130will be loaded as well."),
a2fedca9
PW
1131 set_exec_file_mismatch_command,
1132 show_exec_file_mismatch_command,
1133 &setlist, &showlist);
1134
d9f719f1 1135 add_target (exec_target_info, exec_target_open, filename_completer);
c906108c 1136}
This page took 3.274727 seconds and 4 git commands to generate.