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