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