Constify add_com
[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{
1adeb98a 398 char *filename;
4c42eaff
DJ
399
400 if (from_tty && target_has_execution
401 && !query (_("A program is being debugged already.\n"
402 "Are you sure you want to change the file? ")))
403 error (_("File not changed."));
1adeb98a
FN
404
405 if (args)
406 {
407 /* Scan through the args and pick up the first non option arg
408 as the filename. */
409
773a1edc
TT
410 gdb_argv built_argv (args);
411 char **argv = built_argv.get ();
1adeb98a
FN
412
413 for (; (*argv != NULL) && (**argv == '-'); argv++)
414 {;
415 }
416 if (*argv == NULL)
8a3fe4f8 417 error (_("No executable file name was specified"));
1adeb98a 418
773a1edc
TT
419 gdb::unique_xmalloc_ptr<char> filename (tilde_expand (*argv));
420 exec_file_attach (filename.get (), from_tty);
1adeb98a
FN
421 }
422 else
423 exec_file_attach (NULL, from_tty);
c906108c
SS
424}
425
0963b4bd 426/* Set both the exec file and the symbol file, in one command.
c906108c
SS
427 What a novelty. Why did GDB go through four major releases before this
428 command was added? */
429
430static void
1d8b34a7 431file_command (const char *arg, int from_tty)
c906108c
SS
432{
433 /* FIXME, if we lose on reading the symbol file, we should revert
434 the exec file, but that's rough. */
435 exec_file_command (arg, from_tty);
436 symbol_file_command (arg, from_tty);
9a4105ab
AC
437 if (deprecated_file_changed_hook)
438 deprecated_file_changed_hook (arg);
c906108c 439}
c906108c 440\f
c5aa993b 441
0963b4bd 442/* Locate all mappable sections of a BFD file.
c906108c
SS
443 table_pp_char is a char * to get it through bfd_map_over_sections;
444 we cast it back to its proper type. */
445
446static void
7be0c536
AC
447add_to_section_table (bfd *abfd, struct bfd_section *asect,
448 void *table_pp_char)
c906108c 449{
0542c86d 450 struct target_section **table_pp = (struct target_section **) table_pp_char;
c906108c
SS
451 flagword aflag;
452
2b2848e2
DE
453 gdb_assert (abfd == asect->owner);
454
0f5d55d8
JB
455 /* Check the section flags, but do not discard zero-length sections, since
456 some symbols may still be attached to this section. For instance, we
457 encountered on sparc-solaris 2.10 a shared library with an empty .bss
458 section to which a symbol named "_end" was attached. The address
459 of this symbol still needs to be relocated. */
c906108c
SS
460 aflag = bfd_get_section_flags (abfd, asect);
461 if (!(aflag & SEC_ALLOC))
462 return;
0f5d55d8 463
046ac79f 464 (*table_pp)->owner = NULL;
c906108c
SS
465 (*table_pp)->the_bfd_section = asect;
466 (*table_pp)->addr = bfd_section_vma (abfd, asect);
467 (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect);
468 (*table_pp)++;
469}
470
a5b1fd27
DE
471/* See exec.h. */
472
473void
474clear_section_table (struct target_section_table *table)
475{
476 xfree (table->sections);
477 table->sections = table->sections_end = NULL;
478}
479
480/* Resize section table TABLE by ADJUSTMENT.
481 ADJUSTMENT may be negative, in which case the caller must have already
482 removed the sections being deleted.
483 Returns the old size. */
484
485static int
486resize_section_table (struct target_section_table *table, int adjustment)
07b82ea5 487{
07b82ea5
PA
488 int old_count;
489 int new_count;
490
07b82ea5
PA
491 old_count = table->sections_end - table->sections;
492
a5b1fd27 493 new_count = adjustment + old_count;
07b82ea5
PA
494
495 if (new_count)
496 {
224c3ddb
SM
497 table->sections = XRESIZEVEC (struct target_section, table->sections,
498 new_count);
07b82ea5
PA
499 table->sections_end = table->sections + new_count;
500 }
501 else
a5b1fd27 502 clear_section_table (table);
07b82ea5
PA
503
504 return old_count;
505}
506
c906108c
SS
507/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
508 Returns 0 if OK, 1 on error. */
509
510int
0542c86d
PA
511build_section_table (struct bfd *some_bfd, struct target_section **start,
512 struct target_section **end)
c906108c
SS
513{
514 unsigned count;
515
516 count = bfd_count_sections (some_bfd);
517 if (*start)
b8c9b27d 518 xfree (* start);
8d749320 519 *start = XNEWVEC (struct target_section, count);
c906108c 520 *end = *start;
c5aa993b 521 bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
c906108c 522 if (*end > *start + count)
3e43a32a
MS
523 internal_error (__FILE__, __LINE__,
524 _("failed internal consistency check"));
c906108c
SS
525 /* We could realloc the table, but it probably loses for most files. */
526 return 0;
527}
07b82ea5
PA
528
529/* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
530 current set of target sections. */
531
532void
046ac79f 533add_target_sections (void *owner,
ed9eebaf 534 struct target_section *sections,
07b82ea5
PA
535 struct target_section *sections_end)
536{
537 int count;
538 struct target_section_table *table = current_target_sections;
539
540 count = sections_end - sections;
541
542 if (count > 0)
543 {
544 int space = resize_section_table (table, count);
ed9eebaf 545 int i;
d7f9d729 546
ed9eebaf
TT
547 for (i = 0; i < count; ++i)
548 {
549 table->sections[space + i] = sections[i];
046ac79f 550 table->sections[space + i].owner = owner;
ed9eebaf 551 }
07b82ea5
PA
552
553 /* If these are the first file sections we can provide memory
554 from, push the file_stratum target. */
ab16fce8
TT
555 if (!target_is_pushed (&exec_ops))
556 push_target (&exec_ops);
07b82ea5
PA
557 }
558}
559
76ad5e1e
NB
560/* Add the sections of OBJFILE to the current set of target sections. */
561
562void
563add_target_sections_of_objfile (struct objfile *objfile)
564{
565 struct target_section_table *table = current_target_sections;
566 struct obj_section *osect;
567 int space;
568 unsigned count = 0;
569 struct target_section *ts;
570
571 if (objfile == NULL)
572 return;
573
574 /* Compute the number of sections to add. */
575 ALL_OBJFILE_OSECTIONS (objfile, osect)
576 {
577 if (bfd_get_section_size (osect->the_bfd_section) == 0)
578 continue;
579 count++;
580 }
581
582 if (count == 0)
583 return;
584
585 space = resize_section_table (table, count);
586
587 ts = table->sections + space;
588
589 ALL_OBJFILE_OSECTIONS (objfile, osect)
590 {
591 if (bfd_get_section_size (osect->the_bfd_section) == 0)
592 continue;
593
594 gdb_assert (ts < table->sections + space + count);
595
596 ts->addr = obj_section_addr (osect);
597 ts->endaddr = obj_section_endaddr (osect);
598 ts->the_bfd_section = osect->the_bfd_section;
599 ts->owner = (void *) objfile;
600
601 ts++;
602 }
603}
604
046ac79f
JK
605/* Remove all target sections owned by OWNER.
606 OWNER must be the same value passed to add_target_sections. */
07b82ea5
PA
607
608void
046ac79f 609remove_target_sections (void *owner)
07b82ea5
PA
610{
611 struct target_section *src, *dest;
07b82ea5
PA
612 struct target_section_table *table = current_target_sections;
613
046ac79f
JK
614 gdb_assert (owner != NULL);
615
07b82ea5
PA
616 dest = table->sections;
617 for (src = table->sections; src < table->sections_end; src++)
046ac79f 618 if (src->owner != owner)
07b82ea5
PA
619 {
620 /* Keep this section. */
621 if (dest < src)
622 *dest = *src;
623 dest++;
624 }
625
626 /* If we've dropped any sections, resize the section table. */
627 if (dest < src)
628 {
629 int old_count;
630
631 old_count = resize_section_table (table, dest - src);
632
633 /* If we don't have any more sections to read memory from,
634 remove the file_stratum target from the stack. */
635 if (old_count + (dest - src) == 0)
6c95b8df
PA
636 {
637 struct program_space *pspace;
638
639 ALL_PSPACES (pspace)
640 if (pspace->target_sections.sections
641 != pspace->target_sections.sections_end)
642 return;
643
644 unpush_target (&exec_ops);
645 }
07b82ea5
PA
646 }
647}
648
c906108c 649\f
348f8c02 650
1ca49d37
YQ
651enum target_xfer_status
652exec_read_partial_read_only (gdb_byte *readbuf, ULONGEST offset,
653 ULONGEST len, ULONGEST *xfered_len)
654{
655 /* It's unduly pedantic to refuse to look at the executable for
656 read-only pieces; so do the equivalent of readonly regions aka
657 QTro packet. */
658 if (exec_bfd != NULL)
659 {
660 asection *s;
661 bfd_size_type size;
662 bfd_vma vma;
663
664 for (s = exec_bfd->sections; s; s = s->next)
665 {
666 if ((s->flags & SEC_LOAD) == 0
667 || (s->flags & SEC_READONLY) == 0)
668 continue;
669
670 vma = s->vma;
671 size = bfd_get_section_size (s);
672 if (vma <= offset && offset < (vma + size))
673 {
674 ULONGEST amt;
675
676 amt = (vma + size) - offset;
677 if (amt > len)
678 amt = len;
679
680 amt = bfd_get_section_contents (exec_bfd, s,
681 readbuf, offset - vma, amt);
682
683 if (amt == 0)
684 return TARGET_XFER_EOF;
685 else
686 {
687 *xfered_len = amt;
688 return TARGET_XFER_OK;
689 }
690 }
691 }
692 }
693
694 /* Indicate failure to find the requested memory block. */
695 return TARGET_XFER_E_IO;
696}
697
a79b1bc6 698/* Return all read-only memory ranges found in the target section
5a2eb0ef 699 table defined by SECTIONS and SECTIONS_END, starting at (and
a79b1bc6 700 intersected with) MEMADDR for LEN bytes. */
5a2eb0ef 701
a79b1bc6
SM
702static std::vector<mem_range>
703section_table_available_memory (CORE_ADDR memaddr, ULONGEST len,
e6ca34fc
PA
704 struct target_section *sections,
705 struct target_section *sections_end)
706{
a79b1bc6 707 std::vector<mem_range> memory;
e6ca34fc 708
a79b1bc6 709 for (target_section *p = sections; p < sections_end; p++)
e6ca34fc 710 {
2b2848e2
DE
711 if ((bfd_get_section_flags (p->the_bfd_section->owner,
712 p->the_bfd_section)
e6ca34fc
PA
713 & SEC_READONLY) == 0)
714 continue;
715
716 /* Copy the meta-data, adjusted. */
717 if (mem_ranges_overlap (p->addr, p->endaddr - p->addr, memaddr, len))
718 {
719 ULONGEST lo1, hi1, lo2, hi2;
e6ca34fc
PA
720
721 lo1 = memaddr;
722 hi1 = memaddr + len;
723
724 lo2 = p->addr;
725 hi2 = p->endaddr;
726
a79b1bc6
SM
727 CORE_ADDR start = std::max (lo1, lo2);
728 int length = std::min (hi1, hi2) - start;
e6ca34fc 729
a79b1bc6 730 memory.emplace_back (start, length);
e6ca34fc
PA
731 }
732 }
733
734 return memory;
735}
736
1ee79381
YQ
737enum target_xfer_status
738section_table_read_available_memory (gdb_byte *readbuf, ULONGEST offset,
739 ULONGEST len, ULONGEST *xfered_len)
740{
a79b1bc6
SM
741 target_section_table *table = target_get_section_table (&exec_ops);
742 std::vector<mem_range> available_memory
743 = section_table_available_memory (offset, len,
744 table->sections, table->sections_end);
1ee79381 745
a79b1bc6 746 normalize_mem_ranges (&available_memory);
1ee79381 747
a79b1bc6 748 for (const mem_range &r : available_memory)
1ee79381 749 {
a79b1bc6 750 if (mem_ranges_overlap (r.start, r.length, offset, len))
1ee79381
YQ
751 {
752 CORE_ADDR end;
753 enum target_xfer_status status;
754
755 /* Get the intersection window. */
a79b1bc6 756 end = std::min<CORE_ADDR> (offset + len, r.start + r.length);
1ee79381
YQ
757
758 gdb_assert (end - offset <= len);
759
a79b1bc6 760 if (offset >= r.start)
1ee79381
YQ
761 status = exec_read_partial_read_only (readbuf, offset,
762 end - offset,
763 xfered_len);
764 else
765 {
a79b1bc6 766 *xfered_len = r.start - offset;
bc113b4e 767 status = TARGET_XFER_UNAVAILABLE;
1ee79381 768 }
1ee79381
YQ
769 return status;
770 }
771 }
1ee79381
YQ
772
773 *xfered_len = len;
bc113b4e 774 return TARGET_XFER_UNAVAILABLE;
1ee79381
YQ
775}
776
9b409511 777enum target_xfer_status
07b82ea5 778section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
b55e14c7 779 ULONGEST offset, ULONGEST len,
9b409511 780 ULONGEST *xfered_len,
07b82ea5
PA
781 struct target_section *sections,
782 struct target_section *sections_end,
783 const char *section_name)
c906108c 784{
020cc13c 785 int res;
0542c86d 786 struct target_section *p;
07b82ea5
PA
787 ULONGEST memaddr = offset;
788 ULONGEST memend = memaddr + len;
c906108c 789
b55e14c7 790 if (len == 0)
3e43a32a
MS
791 internal_error (__FILE__, __LINE__,
792 _("failed internal consistency check"));
c906108c 793
348f8c02 794 for (p = sections; p < sections_end; p++)
c906108c 795 {
2b2848e2
DE
796 struct bfd_section *asect = p->the_bfd_section;
797 bfd *abfd = asect->owner;
798
799 if (section_name && strcmp (section_name, asect->name) != 0)
0963b4bd 800 continue; /* not the section we need. */
c906108c 801 if (memaddr >= p->addr)
3db26b01
JB
802 {
803 if (memend <= p->endaddr)
804 {
805 /* Entire transfer is within this section. */
07b82ea5 806 if (writebuf)
2b2848e2 807 res = bfd_set_section_contents (abfd, asect,
07b82ea5 808 writebuf, memaddr - p->addr,
85302095
AC
809 len);
810 else
2b2848e2 811 res = bfd_get_section_contents (abfd, asect,
07b82ea5 812 readbuf, memaddr - p->addr,
85302095 813 len);
9b409511
YQ
814
815 if (res != 0)
816 {
817 *xfered_len = len;
818 return TARGET_XFER_OK;
819 }
820 else
821 return TARGET_XFER_EOF;
3db26b01
JB
822 }
823 else if (memaddr >= p->endaddr)
824 {
825 /* This section ends before the transfer starts. */
826 continue;
827 }
828 else
829 {
830 /* This section overlaps the transfer. Just do half. */
831 len = p->endaddr - memaddr;
07b82ea5 832 if (writebuf)
2b2848e2 833 res = bfd_set_section_contents (abfd, asect,
07b82ea5 834 writebuf, memaddr - p->addr,
85302095
AC
835 len);
836 else
2b2848e2 837 res = bfd_get_section_contents (abfd, asect,
07b82ea5 838 readbuf, memaddr - p->addr,
85302095 839 len);
9b409511
YQ
840 if (res != 0)
841 {
842 *xfered_len = len;
843 return TARGET_XFER_OK;
844 }
845 else
846 return TARGET_XFER_EOF;
3db26b01
JB
847 }
848 }
c906108c
SS
849 }
850
9b409511 851 return TARGET_XFER_EOF; /* We can't help. */
c906108c 852}
348f8c02 853
70221824 854static struct target_section_table *
07b82ea5 855exec_get_section_table (struct target_ops *ops)
348f8c02 856{
07b82ea5 857 return current_target_sections;
348f8c02
PA
858}
859
9b409511 860static enum target_xfer_status
07b82ea5
PA
861exec_xfer_partial (struct target_ops *ops, enum target_object object,
862 const char *annex, gdb_byte *readbuf,
863 const gdb_byte *writebuf,
9b409511 864 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
348f8c02 865{
07b82ea5
PA
866 struct target_section_table *table = target_get_section_table (ops);
867
868 if (object == TARGET_OBJECT_MEMORY)
869 return section_table_xfer_memory_partial (readbuf, writebuf,
9b409511 870 offset, len, xfered_len,
07b82ea5
PA
871 table->sections,
872 table->sections_end,
873 NULL);
874 else
2ed4b548 875 return TARGET_XFER_E_IO;
348f8c02 876}
c906108c 877\f
c5aa993b 878
c906108c 879void
07b82ea5 880print_section_info (struct target_section_table *t, bfd *abfd)
c906108c 881{
5af949e3 882 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
0542c86d 883 struct target_section *p;
17a912b6 884 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
5af949e3 885 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
c906108c 886
c5aa993b 887 printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
c906108c 888 wrap_here (" ");
a3f17187 889 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
c906108c 890 if (abfd == exec_bfd)
51bee8e9 891 {
3e43a32a
MS
892 /* gcc-3.4 does not like the initialization in
893 <p == t->sections_end>. */
d904de5b 894 bfd_vma displacement = 0;
2f1bdd26 895 bfd_vma entry_point;
51bee8e9
JK
896
897 for (p = t->sections; p < t->sections_end; p++)
898 {
2b2848e2
DE
899 struct bfd_section *psect = p->the_bfd_section;
900 bfd *pbfd = psect->owner;
51bee8e9 901
2b2848e2 902 if ((bfd_get_section_flags (pbfd, psect) & (SEC_ALLOC | SEC_LOAD))
51bee8e9
JK
903 != (SEC_ALLOC | SEC_LOAD))
904 continue;
905
2b2848e2
DE
906 if (bfd_get_section_vma (pbfd, psect) <= abfd->start_address
907 && abfd->start_address < (bfd_get_section_vma (pbfd, psect)
908 + bfd_get_section_size (psect)))
51bee8e9 909 {
2b2848e2 910 displacement = p->addr - bfd_get_section_vma (pbfd, psect);
51bee8e9
JK
911 break;
912 }
913 }
914 if (p == t->sections_end)
b37520b6 915 warning (_("Cannot find section for the entry point of %s."),
d904de5b 916 bfd_get_filename (abfd));
51bee8e9 917
2f1bdd26
MGD
918 entry_point = gdbarch_addr_bits_remove (gdbarch,
919 bfd_get_start_address (abfd)
920 + displacement);
51bee8e9 921 printf_filtered (_("\tEntry point: %s\n"),
2f1bdd26 922 paddress (gdbarch, entry_point));
51bee8e9 923 }
07b82ea5 924 for (p = t->sections; p < t->sections_end; p++)
c906108c 925 {
2b2848e2
DE
926 struct bfd_section *psect = p->the_bfd_section;
927 bfd *pbfd = psect->owner;
928
bb599908
PH
929 printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
930 printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
bcf16802
KB
931
932 /* FIXME: A format of "08l" is not wide enough for file offsets
933 larger than 4GB. OTOH, making it "016l" isn't desirable either
934 since most output will then be much wider than necessary. It
935 may make sense to test the size of the file and choose the
936 format string accordingly. */
a3f17187 937 /* FIXME: i18n: Need to rewrite this sentence. */
c906108c
SS
938 if (info_verbose)
939 printf_filtered (" @ %s",
2b2848e2
DE
940 hex_string_custom (psect->filepos, 8));
941 printf_filtered (" is %s", bfd_section_name (pbfd, psect));
942 if (pbfd != abfd)
943 printf_filtered (" in %s", bfd_get_filename (pbfd));
c906108c
SS
944 printf_filtered ("\n");
945 }
946}
947
948static void
fba45db2 949exec_files_info (struct target_ops *t)
c906108c 950{
57008375
JK
951 if (exec_bfd)
952 print_section_info (current_target_sections, exec_bfd);
953 else
954 puts_filtered (_("\t<no file loaded>\n"));
c906108c
SS
955}
956
957static void
0b39b52e 958set_section_command (const char *args, int from_tty)
c906108c 959{
0542c86d 960 struct target_section *p;
0b39b52e 961 const char *secname;
c906108c
SS
962 unsigned seclen;
963 unsigned long secaddr;
964 char secprint[100];
965 long offset;
07b82ea5 966 struct target_section_table *table;
c906108c
SS
967
968 if (args == 0)
8a3fe4f8 969 error (_("Must specify section name and its virtual address"));
c906108c 970
0963b4bd 971 /* Parse out section name. */
c5aa993b 972 for (secname = args; !isspace (*args); args++);
c906108c
SS
973 seclen = args - secname;
974
0963b4bd 975 /* Parse out new virtual address. */
c906108c
SS
976 secaddr = parse_and_eval_address (args);
977
07b82ea5
PA
978 table = current_target_sections;
979 for (p = table->sections; p < table->sections_end; p++)
c5aa993b 980 {
57008375 981 if (!strncmp (secname, bfd_section_name (p->bfd,
3e43a32a 982 p->the_bfd_section), seclen)
57008375 983 && bfd_section_name (p->bfd, p->the_bfd_section)[seclen] == '\0')
c5aa993b
JM
984 {
985 offset = secaddr - p->addr;
986 p->addr += offset;
987 p->endaddr += offset;
988 if (from_tty)
989 exec_files_info (&exec_ops);
990 return;
991 }
c906108c 992 }
c906108c
SS
993 if (seclen >= sizeof (secprint))
994 seclen = sizeof (secprint) - 1;
995 strncpy (secprint, secname, seclen);
996 secprint[seclen] = '\0';
8a3fe4f8 997 error (_("Section %s not found"), secprint);
c906108c
SS
998}
999
30510692
DJ
1000/* If we can find a section in FILENAME with BFD index INDEX, adjust
1001 it to ADDRESS. */
c1bd25fd
DJ
1002
1003void
1004exec_set_section_address (const char *filename, int index, CORE_ADDR address)
1005{
0542c86d 1006 struct target_section *p;
07b82ea5 1007 struct target_section_table *table;
c1bd25fd 1008
07b82ea5
PA
1009 table = current_target_sections;
1010 for (p = table->sections; p < table->sections_end; p++)
c1bd25fd 1011 {
2b2848e2 1012 if (filename_cmp (filename, p->the_bfd_section->owner->filename) == 0
30510692 1013 && index == p->the_bfd_section->index)
c1bd25fd 1014 {
30510692 1015 p->endaddr += address - p->addr;
c1bd25fd 1016 p->addr = address;
c1bd25fd
DJ
1017 }
1018 }
1019}
1020
c906108c
SS
1021/* If mourn is being called in all the right places, this could be say
1022 `gdb internal error' (since generic_mourn calls
1023 breakpoint_init_inferior). */
1024
1025static int
3db08215
MM
1026ignore (struct target_ops *ops, struct gdbarch *gdbarch,
1027 struct bp_target_info *bp_tgt)
c906108c
SS
1028{
1029 return 0;
1030}
1031
73971819
PA
1032/* Implement the to_remove_breakpoint method. */
1033
1034static int
1035exec_remove_breakpoint (struct target_ops *ops, struct gdbarch *gdbarch,
1036 struct bp_target_info *bp_tgt,
1037 enum remove_bp_reason reason)
1038{
1039 return 0;
1040}
1041
c35b1492
PA
1042static int
1043exec_has_memory (struct target_ops *ops)
1044{
1045 /* We can provide memory if we have any file/target sections to read
1046 from. */
1047 return (current_target_sections->sections
1048 != current_target_sections->sections_end);
1049}
1050
83814951
TT
1051static char *
1052exec_make_note_section (struct target_ops *self, bfd *obfd, int *note_size)
1053{
1054 error (_("Can't create a corefile"));
1055}
be4d1333 1056
c906108c
SS
1057/* Fill in the exec file target vector. Very few entries need to be
1058 defined. */
1059
be4d1333 1060static void
fba45db2 1061init_exec_ops (void)
c906108c
SS
1062{
1063 exec_ops.to_shortname = "exec";
1064 exec_ops.to_longname = "Local exec file";
1065 exec_ops.to_doc = "Use an executable file as a target.\n\
1066Specify the filename of the executable file.";
1adeb98a 1067 exec_ops.to_open = exec_open;
6c95b8df 1068 exec_ops.to_close = exec_close_1;
07b82ea5
PA
1069 exec_ops.to_xfer_partial = exec_xfer_partial;
1070 exec_ops.to_get_section_table = exec_get_section_table;
c906108c
SS
1071 exec_ops.to_files_info = exec_files_info;
1072 exec_ops.to_insert_breakpoint = ignore;
73971819 1073 exec_ops.to_remove_breakpoint = exec_remove_breakpoint;
c906108c 1074 exec_ops.to_stratum = file_stratum;
c35b1492 1075 exec_ops.to_has_memory = exec_has_memory;
be4d1333 1076 exec_ops.to_make_corefile_notes = exec_make_note_section;
b427c1bc 1077 exec_ops.to_find_memory_regions = objfile_find_memory_regions;
c5aa993b 1078 exec_ops.to_magic = OPS_MAGIC;
c906108c
SS
1079}
1080
1081void
fba45db2 1082_initialize_exec (void)
c906108c
SS
1083{
1084 struct cmd_list_element *c;
1085
1086 init_exec_ops ();
1087
1088 if (!dbx_commands)
1089 {
1a966eab
AC
1090 c = add_cmd ("file", class_files, file_command, _("\
1091Use FILE as program to be debugged.\n\
c906108c
SS
1092It is read for its symbols, for getting the contents of pure memory,\n\
1093and it is the program executed when you use the `run' command.\n\
1094If FILE cannot be found as specified, your execution directory path\n\
1095($PATH) is searched for a command of that name.\n\
1a966eab 1096No arg means to have no executable file and no symbols."), &cmdlist);
5ba2abeb 1097 set_cmd_completer (c, filename_completer);
c906108c
SS
1098 }
1099
1a966eab
AC
1100 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
1101Use FILE as program for getting contents of pure memory.\n\
c906108c
SS
1102If FILE cannot be found as specified, your execution directory path\n\
1103is searched for a command of that name.\n\
1a966eab 1104No arg means have no executable file."), &cmdlist);
5ba2abeb 1105 set_cmd_completer (c, filename_completer);
c906108c 1106
1bedd215
AC
1107 add_com ("section", class_files, set_section_command, _("\
1108Change the base address of section SECTION of the exec file to ADDR.\n\
c906108c
SS
1109This can be used if the exec file does not contain section addresses,\n\
1110(such as in the a.out format), or when the addresses specified in the\n\
1111file itself are wrong. Each section must be changed separately. The\n\
1bedd215 1112``info files'' command lists all the sections and their addresses."));
c906108c 1113
5bf193a2
AC
1114 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
1115Set writing into executable and core files."), _("\
1116Show writing into executable and core files."), NULL,
1117 NULL,
920d2a44 1118 show_write_files,
5bf193a2 1119 &setlist, &showlist);
c5aa993b 1120
9852c492 1121 add_target_with_completer (&exec_ops, filename_completer);
c906108c 1122}
This page took 1.357913 seconds and 4 git commands to generate.