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