]> Git Repo - binutils.git/blob - gdb/exec.c
Also update recursive call to d_lookup_symbol_imports.
[binutils.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.094203 seconds and 4 git commands to generate.