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