Make tdesc_arch_data::arch_regs an std::vector
[deliverable/binutils-gdb.git] / gdb / exec.c
CommitLineData
c906108c 1/* Work with executable files, for GDB.
4646aa9d 2
61baf725 3 Copyright (C) 1988-2017 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"
22#include "inferior.h"
23#include "target.h"
24#include "gdbcmd.h"
25#include "language.h"
0ba1096a 26#include "filenames.h"
c906108c
SS
27#include "symfile.h"
28#include "objfiles.h"
c5f0f3d0 29#include "completer.h"
fd0407d6 30#include "value.h"
4646aa9d 31#include "exec.h"
ea53e89f 32#include "observer.h"
dacec2a8 33#include "arch-utils.h"
6c95b8df
PA
34#include "gdbthread.h"
35#include "progspace.h"
cbb099e8 36#include "gdb_bfd.h"
b427c1bc 37#include "gcore.h"
c906108c 38
c906108c 39#include <fcntl.h>
dbda9972 40#include "readline/readline.h"
c906108c
SS
41#include "gdbcore.h"
42
43#include <ctype.h>
53ce3c39 44#include <sys/stat.h>
a9a5a3d1 45#include "solist.h"
325fac50 46#include <algorithm>
c906108c 47
1d8b34a7 48void (*deprecated_file_changed_hook) (const char *);
c906108c
SS
49
50/* Prototypes for local functions */
51
a14ed312 52static void exec_files_info (struct target_ops *);
c906108c 53
a14ed312 54static void init_exec_ops (void);
c906108c 55
c906108c
SS
56/* The target vector for executable files. */
57
e8b2341c 58static struct target_ops exec_ops;
c906108c 59
c906108c
SS
60/* Whether to open exec and core files read-only or read-write. */
61
62int write_files = 0;
920d2a44
AC
63static void
64show_write_files (struct ui_file *file, int from_tty,
65 struct cmd_list_element *c, const char *value)
66{
67 fprintf_filtered (file, _("Writing into executable and core files is %s.\n"),
68 value);
69}
70
c906108c 71
4c42eaff 72static void
014f9477 73exec_open (const char *args, int from_tty)
1adeb98a
FN
74{
75 target_preopen (from_tty);
76 exec_file_attach (args, from_tty);
77}
78
07b82ea5
PA
79/* Close and clear exec_bfd. If we end up with no target sections to
80 read memory from, this unpushes the exec_ops target. */
81
6c95b8df
PA
82void
83exec_close (void)
07b82ea5
PA
84{
85 if (exec_bfd)
86 {
87 bfd *abfd = exec_bfd;
07b82ea5 88
cbb099e8 89 gdb_bfd_unref (abfd);
07b82ea5
PA
90
91 /* Removing target sections may close the exec_ops target.
92 Clear exec_bfd before doing so to prevent recursion. */
93 exec_bfd = NULL;
94 exec_bfd_mtime = 0;
95
046ac79f 96 remove_target_sections (&exec_bfd);
1f0c4988
JK
97
98 xfree (exec_filename);
99 exec_filename = NULL;
07b82ea5
PA
100 }
101}
102
6c95b8df
PA
103/* This is the target_close implementation. Clears all target
104 sections and closes all executable bfds from all program spaces. */
105
c906108c 106static void
de90e03d 107exec_close_1 (struct target_ops *self)
c906108c 108{
ab16fce8 109 struct program_space *ss;
5ed8105e 110 scoped_restore_current_program_space restore_pspace;
6c95b8df 111
ab16fce8 112 ALL_PSPACES (ss)
5ed8105e
PA
113 {
114 set_current_program_space (ss);
115 clear_section_table (current_target_sections);
116 exec_close ();
117 }
c906108c
SS
118}
119
1adeb98a
FN
120void
121exec_file_clear (int from_tty)
122{
123 /* Remove exec file. */
6c95b8df 124 exec_close ();
1adeb98a
FN
125
126 if (from_tty)
a3f17187 127 printf_unfiltered (_("No executable file now.\n"));
1adeb98a
FN
128}
129
ecf45d2c 130/* See exec.h. */
a10de604
GB
131
132void
ecf45d2c
SL
133try_open_exec_file (const char *exec_file_host, struct inferior *inf,
134 symfile_add_flags add_flags)
a10de604 135{
88178e82 136 struct cleanup *old_chain;
57d1de9c 137 struct gdb_exception prev_err = exception_none;
a10de604 138
ecf45d2c 139 old_chain = make_cleanup (free_current_contents, &prev_err.message);
57d1de9c
LM
140
141 /* exec_file_attach and symbol_file_add_main may throw an error if the file
142 cannot be opened either locally or remotely.
143
144 This happens for example, when the file is first found in the local
145 sysroot (above), and then disappears (a TOCTOU race), or when it doesn't
146 exist in the target filesystem, or when the file does exist, but
147 is not readable.
88178e82 148
57d1de9c
LM
149 Even without a symbol file, the remote-based debugging session should
150 continue normally instead of ending abruptly. Hence we catch thrown
151 errors/exceptions in the following code. */
152 TRY
153 {
ecf45d2c
SL
154 /* We must do this step even if exec_file_host is NULL, so that
155 exec_file_attach will clear state. */
156 exec_file_attach (exec_file_host, add_flags & SYMFILE_VERBOSE);
57d1de9c
LM
157 }
158 CATCH (err, RETURN_MASK_ERROR)
159 {
160 if (err.message != NULL)
161 warning ("%s", err.message);
162
163 prev_err = err;
164
165 /* Save message so it doesn't get trashed by the catch below. */
b5e1db87
LM
166 if (err.message != NULL)
167 prev_err.message = xstrdup (err.message);
57d1de9c
LM
168 }
169 END_CATCH
170
ecf45d2c 171 if (exec_file_host != NULL)
57d1de9c 172 {
ecf45d2c
SL
173 TRY
174 {
175 symbol_file_add_main (exec_file_host, add_flags);
176 }
177 CATCH (err, RETURN_MASK_ERROR)
178 {
179 if (!exception_print_same (prev_err, err))
180 warning ("%s", err.message);
181 }
182 END_CATCH
57d1de9c 183 }
ecf45d2c
SL
184
185 do_cleanups (old_chain);
186}
187
188/* See gdbcore.h. */
189
190void
191exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty)
192{
193 char *exec_file_target, *exec_file_host;
194 struct cleanup *old_chain;
195 symfile_add_flags add_flags = 0;
196
197 /* Do nothing if we already have an executable filename. */
198 if (get_exec_file (0) != NULL)
199 return;
200
201 /* Try to determine a filename from the process itself. */
202 exec_file_target = target_pid_to_exec_file (pid);
203 if (exec_file_target == NULL)
57d1de9c 204 {
ecf45d2c
SL
205 warning (_("No executable has been specified and target does not "
206 "support\n"
207 "determining executable automatically. "
208 "Try using the \"file\" command."));
209 return;
57d1de9c 210 }
88178e82 211
ecf45d2c
SL
212 exec_file_host = exec_file_find (exec_file_target, NULL);
213 old_chain = make_cleanup (xfree, exec_file_host);
214
215 if (defer_bp_reset)
216 add_flags |= SYMFILE_DEFER_BP_RESET;
217
218 if (from_tty)
219 add_flags |= SYMFILE_VERBOSE;
220
221 /* Attempt to open the exec file. */
222 try_open_exec_file (exec_file_host, current_inferior (), add_flags);
88178e82 223 do_cleanups (old_chain);
a10de604
GB
224}
225
907083d1 226/* Set FILENAME as the new exec file.
c906108c 227
c5aa993b
JM
228 This function is intended to be behave essentially the same
229 as exec_file_command, except that the latter will detect when
230 a target is being debugged, and will ask the user whether it
231 should be shut down first. (If the answer is "no", then the
232 new file is ignored.)
c906108c 233
c5aa993b
JM
234 This file is used by exec_file_command, to do the work of opening
235 and processing the exec file after any prompting has happened.
c906108c 236
c5aa993b
JM
237 And, it is used by child_attach, when the attach command was
238 given a pid but not a exec pathname, and the attach command could
239 figure out the pathname from the pid. (In this case, we shouldn't
240 ask the user whether the current target should be shut down --
907083d1 241 we're supplying the exec pathname late for good reason.) */
c906108c
SS
242
243void
5f08566b 244exec_file_attach (const char *filename, int from_tty)
c906108c 245{
9b333ba3
TT
246 /* First, acquire a reference to the current exec_bfd. We release
247 this at the end of the function; but acquiring it now lets the
248 BFD cache return it if this call refers to the same file. */
2712ce2e 249 gdb_bfd_ref_ptr exec_bfd_holder = new_bfd_ref (exec_bfd);
192b62ce 250
c906108c 251 /* Remove any previous exec file. */
6c95b8df 252 exec_close ();
c906108c
SS
253
254 /* Now open and digest the file the user requested, if any. */
255
1adeb98a
FN
256 if (!filename)
257 {
258 if (from_tty)
a3f17187 259 printf_unfiltered (_("No executable file now.\n"));
7a107747
DJ
260
261 set_gdbarch_from_file (NULL);
1adeb98a
FN
262 }
263 else
c906108c 264 {
64c0b5de 265 int load_via_target = 0;
14278e1f 266 const char *scratch_pathname, *canonical_pathname;
c906108c 267 int scratch_chan;
07b82ea5 268 struct target_section *sections = NULL, *sections_end = NULL;
d18b8b7a 269 char **matching;
c5aa993b 270
64c0b5de
GB
271 if (is_target_filename (filename))
272 {
273 if (target_filesystem_is_local ())
274 filename += strlen (TARGET_SYSROOT_PREFIX);
275 else
276 load_via_target = 1;
277 }
278
14278e1f 279 gdb::unique_xmalloc_ptr<char> canonical_storage, scratch_storage;
64c0b5de 280 if (load_via_target)
c5aa993b 281 {
64c0b5de
GB
282 /* gdb_bfd_fopen does not support "target:" filenames. */
283 if (write_files)
284 warning (_("writing into executable files is "
285 "not supported for %s sysroots"),
286 TARGET_SYSROOT_PREFIX);
287
14278e1f 288 scratch_pathname = filename;
64c0b5de 289 scratch_chan = -1;
64c0b5de 290 canonical_pathname = scratch_pathname;
c5aa993b 291 }
64c0b5de
GB
292 else
293 {
14278e1f
TT
294 char *temp_pathname;
295
64c0b5de
GB
296 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
297 filename, write_files ?
298 O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
14278e1f 299 &temp_pathname);
64c0b5de
GB
300#if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
301 if (scratch_chan < 0)
302 {
0ae1c716 303 char *exename = (char *) alloca (strlen (filename) + 5);
64c0b5de
GB
304
305 strcat (strcpy (exename, filename), ".exe");
306 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST,
307 exename, write_files ?
308 O_RDWR | O_BINARY
309 : O_RDONLY | O_BINARY,
14278e1f 310 &temp_pathname);
64c0b5de 311 }
c906108c 312#endif
64c0b5de
GB
313 if (scratch_chan < 0)
314 perror_with_name (filename);
a4453b7e 315
14278e1f
TT
316 scratch_storage.reset (temp_pathname);
317 scratch_pathname = temp_pathname;
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
HZ
353 scratch_pathname,
354 gdb_bfd_errmsg (bfd_get_error (), matching));
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 ();
781b42b0 384 observer_notify_executable_changed ();
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. */
c906108c
SS
458 aflag = bfd_get_section_flags (abfd, asect);
459 if (!(aflag & SEC_ALLOC))
460 return;
0f5d55d8 461
046ac79f 462 (*table_pp)->owner = NULL;
c906108c
SS
463 (*table_pp)->the_bfd_section = asect;
464 (*table_pp)->addr = bfd_section_vma (abfd, asect);
465 (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect);
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
PA
550
551 /* If these are the first file sections we can provide memory
552 from, push the file_stratum target. */
ab16fce8
TT
553 if (!target_is_pushed (&exec_ops))
554 push_target (&exec_ops);
07b82ea5
PA
555 }
556}
557
76ad5e1e
NB
558/* Add the sections of OBJFILE to the current set of target sections. */
559
560void
561add_target_sections_of_objfile (struct objfile *objfile)
562{
563 struct target_section_table *table = current_target_sections;
564 struct obj_section *osect;
565 int space;
566 unsigned count = 0;
567 struct target_section *ts;
568
569 if (objfile == NULL)
570 return;
571
572 /* Compute the number of sections to add. */
573 ALL_OBJFILE_OSECTIONS (objfile, osect)
574 {
575 if (bfd_get_section_size (osect->the_bfd_section) == 0)
576 continue;
577 count++;
578 }
579
580 if (count == 0)
581 return;
582
583 space = resize_section_table (table, count);
584
585 ts = table->sections + space;
586
587 ALL_OBJFILE_OSECTIONS (objfile, osect)
588 {
589 if (bfd_get_section_size (osect->the_bfd_section) == 0)
590 continue;
591
592 gdb_assert (ts < table->sections + space + count);
593
594 ts->addr = obj_section_addr (osect);
595 ts->endaddr = obj_section_endaddr (osect);
596 ts->the_bfd_section = osect->the_bfd_section;
597 ts->owner = (void *) objfile;
598
599 ts++;
600 }
601}
602
046ac79f
JK
603/* Remove all target sections owned by OWNER.
604 OWNER must be the same value passed to add_target_sections. */
07b82ea5
PA
605
606void
046ac79f 607remove_target_sections (void *owner)
07b82ea5
PA
608{
609 struct target_section *src, *dest;
07b82ea5
PA
610 struct target_section_table *table = current_target_sections;
611
046ac79f
JK
612 gdb_assert (owner != NULL);
613
07b82ea5
PA
614 dest = table->sections;
615 for (src = table->sections; src < table->sections_end; src++)
046ac79f 616 if (src->owner != owner)
07b82ea5
PA
617 {
618 /* Keep this section. */
619 if (dest < src)
620 *dest = *src;
621 dest++;
622 }
623
624 /* If we've dropped any sections, resize the section table. */
625 if (dest < src)
626 {
627 int old_count;
628
629 old_count = resize_section_table (table, dest - src);
630
631 /* If we don't have any more sections to read memory from,
632 remove the file_stratum target from the stack. */
633 if (old_count + (dest - src) == 0)
6c95b8df
PA
634 {
635 struct program_space *pspace;
636
637 ALL_PSPACES (pspace)
638 if (pspace->target_sections.sections
639 != pspace->target_sections.sections_end)
640 return;
641
642 unpush_target (&exec_ops);
643 }
07b82ea5
PA
644 }
645}
646
c906108c 647\f
348f8c02 648
1ca49d37
YQ
649enum target_xfer_status
650exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
651 ULONGEST len, ULONGEST *xfered_len)
652{
653 /* It's unduly pedantic to refuse to look at the executable for
654 read-only pieces; so do the equivalent of readonly regions aka
655 QTro packet. */
656 if (exec_bfd != NULL)
657 {
658 asection *s;
659 bfd_size_type size;
660 bfd_vma vma;
661
662 for (s = exec_bfd->sections; s; s = s->next)
663 {
664 if ((s->flags & SEC_LOAD) == 0
665 || (s->flags & SEC_READONLY) == 0)
666 continue;
667
668 vma = s->vma;
669 size = bfd_get_section_size (s);
670 if (vma <= offset && offset < (vma + size))
671 {
672 ULONGEST amt;
673
674 amt = (vma + size) - offset;
675 if (amt > len)
676 amt = len;
677
678 amt = bfd_get_section_contents (exec_bfd, s,
679 readbuf, offset - vma, amt);
680
681 if (amt == 0)
682 return TARGET_XFER_EOF;
683 else
684 {
685 *xfered_len = amt;
686 return TARGET_XFER_OK;
687 }
688 }
689 }
690 }
691
692 /* Indicate failure to find the requested memory block. */
693 return TARGET_XFER_E_IO;
694}
695
a79b1bc6 696/* Return all read-only memory ranges found in the target section
5a2eb0ef 697 table defined by SECTIONS and SECTIONS_END, starting at (and
a79b1bc6 698 intersected with) MEMADDR for LEN bytes. */
5a2eb0ef 699
a79b1bc6
SM
700static std::vector<mem_range>
701section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
e6ca34fc
PA
702 struct target_section *sections,
703 struct target_section *sections_end)
704{
a79b1bc6 705 std::vector<mem_range> memory;
e6ca34fc 706
a79b1bc6 707 for (target_section *p = sections; p < sections_end; p++)
e6ca34fc 708 {
2b2848e2
DE
709 if ((bfd_get_section_flags (p->the_bfd_section->owner,
710 p->the_bfd_section)
e6ca34fc
PA
711 & SEC_READONLY) == 0)
712 continue;
713
714 /* Copy the meta-data, adjusted. */
715 if (mem_ranges_overlap (p->addr, p->endaddr - p->addr, memaddr, len))
716 {
717 ULONGEST lo1, hi1, lo2, hi2;
e6ca34fc
PA
718
719 lo1 = memaddr;
720 hi1 = memaddr + len;
721
722 lo2 = p->addr;
723 hi2 = p->endaddr;
724
a79b1bc6
SM
725 CORE_ADDR start = std::max (lo1, lo2);
726 int length = std::min (hi1, hi2) - start;
e6ca34fc 727
a79b1bc6 728 memory.emplace_back (start, length);
e6ca34fc
PA
729 }
730 }
731
732 return memory;
733}
734
1ee79381
YQ
735enum target_xfer_status
736section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
737 ULONGEST len, ULONGEST *xfered_len)
738{
a79b1bc6
SM
739 target_section_table *table = target_get_section_table (&exec_ops);
740 std::vector<mem_range> available_memory
741 = section_table_available_memory (offset, len,
742 table->sections, table->sections_end);
1ee79381 743
a79b1bc6 744 normalize_mem_ranges (&available_memory);
1ee79381 745
a79b1bc6 746 for (const mem_range &r : available_memory)
1ee79381 747 {
a79b1bc6 748 if (mem_ranges_overlap (r.start, r.length, offset, len))
1ee79381
YQ
749 {
750 CORE_ADDR end;
751 enum target_xfer_status status;
752
753 /* Get the intersection window. */
a79b1bc6 754 end = std::min<CORE_ADDR> (offset + len, r.start + r.length);
1ee79381
YQ
755
756 gdb_assert (end - offset <= len);
757
a79b1bc6 758 if (offset >= r.start)
1ee79381
YQ
759 status = exec_read_partial_read_only (readbuf, offset,
760 end - offset,
761 xfered_len);
762 else
763 {
a79b1bc6 764 *xfered_len = r.start - offset;
bc113b4e 765 status = TARGET_XFER_UNAVAILABLE;
1ee79381 766 }
1ee79381
YQ
767 return status;
768 }
769 }
1ee79381
YQ
770
771 *xfered_len = len;
bc113b4e 772 return TARGET_XFER_UNAVAILABLE;
1ee79381
YQ
773}
774
9b409511 775enum target_xfer_status
07b82ea5 776section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
b55e14c7 777 ULONGEST offset, ULONGEST len,
9b409511 778 ULONGEST *xfered_len,
07b82ea5
PA
779 struct target_section *sections,
780 struct target_section *sections_end,
781 const char *section_name)
c906108c 782{
020cc13c 783 int res;
0542c86d 784 struct target_section *p;
07b82ea5
PA
785 ULONGEST memaddr = offset;
786 ULONGEST memend = memaddr + len;
c906108c 787
b55e14c7 788 if (len == 0)
3e43a32a
MS
789 internal_error (__FILE__, __LINE__,
790 _("failed internal consistency check"));
c906108c 791
348f8c02 792 for (p = sections; p < sections_end; p++)
c906108c 793 {
2b2848e2
DE
794 struct bfd_section *asect = p->the_bfd_section;
795 bfd *abfd = asect->owner;
796
797 if (section_name && strcmp (section_name, asect->name) != 0)
0963b4bd 798 continue; /* not the section we need. */
c906108c 799 if (memaddr >= p->addr)
3db26b01
JB
800 {
801 if (memend <= p->endaddr)
802 {
803 /* Entire transfer is within this section. */
07b82ea5 804 if (writebuf)
2b2848e2 805 res = bfd_set_section_contents (abfd, asect,
07b82ea5 806 writebuf, memaddr - p->addr,
85302095
AC
807 len);
808 else
2b2848e2 809 res = bfd_get_section_contents (abfd, asect,
07b82ea5 810 readbuf, memaddr - p->addr,
85302095 811 len);
9b409511
YQ
812
813 if (res != 0)
814 {
815 *xfered_len = len;
816 return TARGET_XFER_OK;
817 }
818 else
819 return TARGET_XFER_EOF;
3db26b01
JB
820 }
821 else if (memaddr >= p->endaddr)
822 {
823 /* This section ends before the transfer starts. */
824 continue;
825 }
826 else
827 {
828 /* This section overlaps the transfer. Just do half. */
829 len = p->endaddr - memaddr;
07b82ea5 830 if (writebuf)
2b2848e2 831 res = bfd_set_section_contents (abfd, asect,
07b82ea5 832 writebuf, memaddr - p->addr,
85302095
AC
833 len);
834 else
2b2848e2 835 res = bfd_get_section_contents (abfd, asect,
07b82ea5 836 readbuf, memaddr - p->addr,
85302095 837 len);
9b409511
YQ
838 if (res != 0)
839 {
840 *xfered_len = len;
841 return TARGET_XFER_OK;
842 }
843 else
844 return TARGET_XFER_EOF;
3db26b01
JB
845 }
846 }
c906108c
SS
847 }
848
9b409511 849 return TARGET_XFER_EOF; /* We can't help. */
c906108c 850}
348f8c02 851
70221824 852static struct target_section_table *
07b82ea5 853exec_get_section_table (struct target_ops *ops)
348f8c02 854{
07b82ea5 855 return current_target_sections;
348f8c02
PA
856}
857
9b409511 858static enum target_xfer_status
07b82ea5
PA
859exec_xfer_partial (struct target_ops *ops, enum target_object object,
860 const char *annex, gdb_byte *readbuf,
861 const gdb_byte *writebuf,
9b409511 862 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
348f8c02 863{
07b82ea5
PA
864 struct target_section_table *table = target_get_section_table (ops);
865
866 if (object == TARGET_OBJECT_MEMORY)
867 return section_table_xfer_memory_partial (readbuf, writebuf,
9b409511 868 offset, len, xfered_len,
07b82ea5
PA
869 table->sections,
870 table->sections_end,
871 NULL);
872 else
2ed4b548 873 return TARGET_XFER_E_IO;
348f8c02 874}
c906108c 875\f
c5aa993b 876
c906108c 877void
07b82ea5 878print_section_info (struct target_section_table *t, bfd *abfd)
c906108c 879{
5af949e3 880 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
0542c86d 881 struct target_section *p;
17a912b6 882 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
5af949e3 883 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
c906108c 884
c5aa993b 885 printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
c906108c 886 wrap_here (" ");
a3f17187 887 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
c906108c 888 if (abfd == exec_bfd)
51bee8e9 889 {
3e43a32a
MS
890 /* gcc-3.4 does not like the initialization in
891 <p == t->sections_end>. */
d904de5b 892 bfd_vma displacement = 0;
2f1bdd26 893 bfd_vma entry_point;
51bee8e9
JK
894
895 for (p = t->sections; p < t->sections_end; p++)
896 {
2b2848e2
DE
897 struct bfd_section *psect = p->the_bfd_section;
898 bfd *pbfd = psect->owner;
51bee8e9 899
2b2848e2 900 if ((bfd_get_section_flags (pbfd, psect) & (SEC_ALLOC | SEC_LOAD))
51bee8e9
JK
901 != (SEC_ALLOC | SEC_LOAD))
902 continue;
903
2b2848e2
DE
904 if (bfd_get_section_vma (pbfd, psect) <= abfd->start_address
905 && abfd->start_address < (bfd_get_section_vma (pbfd, psect)
906 + bfd_get_section_size (psect)))
51bee8e9 907 {
2b2848e2 908 displacement = p->addr - bfd_get_section_vma (pbfd, psect);
51bee8e9
JK
909 break;
910 }
911 }
912 if (p == t->sections_end)
b37520b6 913 warning (_("Cannot find section for the entry point of %s."),
d904de5b 914 bfd_get_filename (abfd));
51bee8e9 915
2f1bdd26
MGD
916 entry_point = gdbarch_addr_bits_remove (gdbarch,
917 bfd_get_start_address (abfd)
918 + displacement);
51bee8e9 919 printf_filtered (_("\tEntry point: %s\n"),
2f1bdd26 920 paddress (gdbarch, entry_point));
51bee8e9 921 }
07b82ea5 922 for (p = t->sections; p < t->sections_end; p++)
c906108c 923 {
2b2848e2
DE
924 struct bfd_section *psect = p->the_bfd_section;
925 bfd *pbfd = psect->owner;
926
bb599908
PH
927 printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
928 printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
bcf16802
KB
929
930 /* FIXME: A format of "08l" is not wide enough for file offsets
931 larger than 4GB. OTOH, making it "016l" isn't desirable either
932 since most output will then be much wider than necessary. It
933 may make sense to test the size of the file and choose the
934 format string accordingly. */
a3f17187 935 /* FIXME: i18n: Need to rewrite this sentence. */
c906108c
SS
936 if (info_verbose)
937 printf_filtered (" @ %s",
2b2848e2
DE
938 hex_string_custom (psect->filepos, 8));
939 printf_filtered (" is %s", bfd_section_name (pbfd, psect));
940 if (pbfd != abfd)
941 printf_filtered (" in %s", bfd_get_filename (pbfd));
c906108c
SS
942 printf_filtered ("\n");
943 }
944}
945
946static void
fba45db2 947exec_files_info (struct target_ops *t)
c906108c 948{
57008375
JK
949 if (exec_bfd)
950 print_section_info (current_target_sections, exec_bfd);
951 else
952 puts_filtered (_("\t<no file loaded>\n"));
c906108c
SS
953}
954
955static void
0b39b52e 956set_section_command (const char *args, int from_tty)
c906108c 957{
0542c86d 958 struct target_section *p;
0b39b52e 959 const char *secname;
c906108c
SS
960 unsigned seclen;
961 unsigned long secaddr;
962 char secprint[100];
963 long offset;
07b82ea5 964 struct target_section_table *table;
c906108c
SS
965
966 if (args == 0)
8a3fe4f8 967 error (_("Must specify section name and its virtual address"));
c906108c 968
0963b4bd 969 /* Parse out section name. */
c5aa993b 970 for (secname = args; !isspace (*args); args++);
c906108c
SS
971 seclen = args - secname;
972
0963b4bd 973 /* Parse out new virtual address. */
c906108c
SS
974 secaddr = parse_and_eval_address (args);
975
07b82ea5
PA
976 table = current_target_sections;
977 for (p = table->sections; p < table->sections_end; p++)
c5aa993b 978 {
57008375 979 if (!strncmp (secname, bfd_section_name (p->bfd,
3e43a32a 980 p->the_bfd_section), seclen)
57008375 981 && bfd_section_name (p->bfd, p->the_bfd_section)[seclen] == '\0')
c5aa993b
JM
982 {
983 offset = secaddr - p->addr;
984 p->addr += offset;
985 p->endaddr += offset;
986 if (from_tty)
987 exec_files_info (&exec_ops);
988 return;
989 }
c906108c 990 }
c906108c
SS
991 if (seclen >= sizeof (secprint))
992 seclen = sizeof (secprint) - 1;
993 strncpy (secprint, secname, seclen);
994 secprint[seclen] = '\0';
8a3fe4f8 995 error (_("Section %s not found"), secprint);
c906108c
SS
996}
997
30510692
DJ
998/* If we can find a section in FILENAME with BFD index INDEX, adjust
999 it to ADDRESS. */
c1bd25fd
DJ
1000
1001void
1002exec_set_section_address (const char *filename, int index, CORE_ADDR address)
1003{
0542c86d 1004 struct target_section *p;
07b82ea5 1005 struct target_section_table *table;
c1bd25fd 1006
07b82ea5
PA
1007 table = current_target_sections;
1008 for (p = table->sections; p < table->sections_end; p++)
c1bd25fd 1009 {
2b2848e2 1010 if (filename_cmp (filename, p->the_bfd_section->owner->filename) == 0
30510692 1011 && index == p->the_bfd_section->index)
c1bd25fd 1012 {
30510692 1013 p->endaddr += address - p->addr;
c1bd25fd 1014 p->addr = address;
c1bd25fd
DJ
1015 }
1016 }
1017}
1018
c906108c
SS
1019/* If mourn is being called in all the right places, this could be say
1020 `gdb internal error' (since generic_mourn calls
1021 breakpoint_init_inferior). */
1022
1023static int
3db08215
MM
1024ignore (struct target_ops *ops, struct gdbarch *gdbarch,
1025 struct bp_target_info *bp_tgt)
c906108c
SS
1026{
1027 return 0;
1028}
1029
73971819
PA
1030/* Implement the to_remove_breakpoint method. */
1031
1032static int
1033exec_remove_breakpoint (struct target_ops *ops, struct gdbarch *gdbarch,
1034 struct bp_target_info *bp_tgt,
1035 enum remove_bp_reason reason)
1036{
1037 return 0;
1038}
1039
c35b1492
PA
1040static int
1041exec_has_memory (struct target_ops *ops)
1042{
1043 /* We can provide memory if we have any file/target sections to read
1044 from. */
1045 return (current_target_sections->sections
1046 != current_target_sections->sections_end);
1047}
1048
83814951
TT
1049static char *
1050exec_make_note_section (struct target_ops *self, bfd *obfd, int *note_size)
1051{
1052 error (_("Can't create a corefile"));
1053}
be4d1333 1054
c906108c
SS
1055/* Fill in the exec file target vector. Very few entries need to be
1056 defined. */
1057
be4d1333 1058static void
fba45db2 1059init_exec_ops (void)
c906108c
SS
1060{
1061 exec_ops.to_shortname = "exec";
1062 exec_ops.to_longname = "Local exec file";
1063 exec_ops.to_doc = "Use an executable file as a target.\n\
1064Specify the filename of the executable file.";
1adeb98a 1065 exec_ops.to_open = exec_open;
6c95b8df 1066 exec_ops.to_close = exec_close_1;
07b82ea5
PA
1067 exec_ops.to_xfer_partial = exec_xfer_partial;
1068 exec_ops.to_get_section_table = exec_get_section_table;
c906108c
SS
1069 exec_ops.to_files_info = exec_files_info;
1070 exec_ops.to_insert_breakpoint = ignore;
73971819 1071 exec_ops.to_remove_breakpoint = exec_remove_breakpoint;
c906108c 1072 exec_ops.to_stratum = file_stratum;
c35b1492 1073 exec_ops.to_has_memory = exec_has_memory;
be4d1333 1074 exec_ops.to_make_corefile_notes = exec_make_note_section;
b427c1bc 1075 exec_ops.to_find_memory_regions = objfile_find_memory_regions;
c5aa993b 1076 exec_ops.to_magic = OPS_MAGIC;
c906108c
SS
1077}
1078
1079void
fba45db2 1080_initialize_exec (void)
c906108c
SS
1081{
1082 struct cmd_list_element *c;
1083
1084 init_exec_ops ();
1085
1086 if (!dbx_commands)
1087 {
1a966eab
AC
1088 c = add_cmd ("file", class_files, file_command, _("\
1089Use FILE as program to be debugged.\n\
c906108c
SS
1090It is read for its symbols, for getting the contents of pure memory,\n\
1091and it is the program executed when you use the `run' command.\n\
1092If FILE cannot be found as specified, your execution directory path\n\
1093($PATH) is searched for a command of that name.\n\
1a966eab 1094No arg means to have no executable file and no symbols."), &cmdlist);
5ba2abeb 1095 set_cmd_completer (c, filename_completer);
c906108c
SS
1096 }
1097
1a966eab
AC
1098 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
1099Use FILE as program for getting contents of pure memory.\n\
c906108c
SS
1100If FILE cannot be found as specified, your execution directory path\n\
1101is searched for a command of that name.\n\
1a966eab 1102No arg means have no executable file."), &cmdlist);
5ba2abeb 1103 set_cmd_completer (c, filename_completer);
c906108c 1104
1bedd215
AC
1105 add_com ("section", class_files, set_section_command, _("\
1106Change the base address of section SECTION of the exec file to ADDR.\n\
c906108c
SS
1107This can be used if the exec file does not contain section addresses,\n\
1108(such as in the a.out format), or when the addresses specified in the\n\
1109file itself are wrong. Each section must be changed separately. The\n\
1bedd215 1110``info files'' command lists all the sections and their addresses."));
c906108c 1111
5bf193a2
AC
1112 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
1113Set writing into executable and core files."), _("\
1114Show writing into executable and core files."), NULL,
1115 NULL,
920d2a44 1116 show_write_files,
5bf193a2 1117 &setlist, &showlist);
c5aa993b 1118
9852c492 1119 add_target_with_completer (&exec_ops, filename_completer);
c906108c 1120}
This page took 1.400667 seconds and 4 git commands to generate.