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