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