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