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