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