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