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