]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/exec.c
* win32-low.c (win32_add_one_solib): If the dll name is
[thirdparty/binutils-gdb.git] / gdb / exec.c
CommitLineData
c906108c 1/* Work with executable files, for GDB.
4646aa9d 2
6aba47ca 3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
0fb0cc75 4 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2009
9b254dd1 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include "frame.h"
24#include "inferior.h"
25#include "target.h"
26#include "gdbcmd.h"
27#include "language.h"
28#include "symfile.h"
29#include "objfiles.h"
c5f0f3d0 30#include "completer.h"
fd0407d6 31#include "value.h"
4646aa9d 32#include "exec.h"
ea53e89f 33#include "observer.h"
dacec2a8 34#include "arch-utils.h"
6c95b8df
PA
35#include "gdbthread.h"
36#include "progspace.h"
c906108c 37
c906108c 38#include <fcntl.h>
dbda9972 39#include "readline/readline.h"
c906108c
SS
40#include "gdb_string.h"
41
42#include "gdbcore.h"
43
44#include <ctype.h>
45#include "gdb_stat.h"
c906108c
SS
46
47#include "xcoffsolib.h"
48
a14ed312 49struct vmap *map_vmap (bfd *, bfd *);
c906108c 50
9a4105ab 51void (*deprecated_file_changed_hook) (char *);
c906108c
SS
52
53/* Prototypes for local functions */
54
a14ed312 55static void file_command (char *, int);
c906108c 56
a14ed312 57static void set_section_command (char *, int);
c906108c 58
a14ed312 59static void exec_files_info (struct target_ops *);
c906108c 60
a14ed312 61static void init_exec_ops (void);
c906108c 62
a14ed312 63void _initialize_exec (void);
c906108c 64
c906108c
SS
65/* The target vector for executable files. */
66
67struct target_ops exec_ops;
68
6c95b8df
PA
69/* True if the exec target is pushed on the stack. */
70static int using_exec_ops;
07b82ea5 71
c906108c
SS
72/* Whether to open exec and core files read-only or read-write. */
73
74int write_files = 0;
920d2a44
AC
75static void
76show_write_files (struct ui_file *file, int from_tty,
77 struct cmd_list_element *c, const char *value)
78{
79 fprintf_filtered (file, _("Writing into executable and core files is %s.\n"),
80 value);
81}
82
c906108c 83
c906108c
SS
84struct vmap *vmap;
85
4c42eaff 86static void
1adeb98a
FN
87exec_open (char *args, int from_tty)
88{
89 target_preopen (from_tty);
90 exec_file_attach (args, from_tty);
91}
92
07b82ea5
PA
93/* Close and clear exec_bfd. If we end up with no target sections to
94 read memory from, this unpushes the exec_ops target. */
95
6c95b8df
PA
96void
97exec_close (void)
07b82ea5
PA
98{
99 if (exec_bfd)
100 {
101 bfd *abfd = exec_bfd;
102 char *name = bfd_get_filename (abfd);
103
104 if (!bfd_close (abfd))
105 warning (_("cannot close \"%s\": %s"),
106 name, bfd_errmsg (bfd_get_error ()));
107 xfree (name);
108
109 /* Removing target sections may close the exec_ops target.
110 Clear exec_bfd before doing so to prevent recursion. */
111 exec_bfd = NULL;
112 exec_bfd_mtime = 0;
113
114 remove_target_sections (abfd);
115 }
116}
117
6c95b8df
PA
118/* This is the target_close implementation. Clears all target
119 sections and closes all executable bfds from all program spaces. */
120
c906108c 121static void
6c95b8df 122exec_close_1 (int quitting)
c906108c
SS
123{
124 int need_symtab_cleanup = 0;
125 struct vmap *vp, *nxt;
c5aa993b 126
6c95b8df
PA
127 using_exec_ops = 0;
128
c5aa993b 129 for (nxt = vmap; nxt != NULL;)
c906108c
SS
130 {
131 vp = nxt;
132 nxt = vp->nxt;
133
134 /* if there is an objfile associated with this bfd,
c5aa993b
JM
135 free_objfile() will do proper cleanup of objfile *and* bfd. */
136
c906108c
SS
137 if (vp->objfile)
138 {
139 free_objfile (vp->objfile);
140 need_symtab_cleanup = 1;
141 }
142 else if (vp->bfd != exec_bfd)
143 /* FIXME-leak: We should be freeing vp->name too, I think. */
144 if (!bfd_close (vp->bfd))
8a3fe4f8 145 warning (_("cannot close \"%s\": %s"),
c906108c
SS
146 vp->name, bfd_errmsg (bfd_get_error ()));
147
148 /* FIXME: This routine is #if 0'd in symfile.c. What should we
c5aa993b
JM
149 be doing here? Should we just free everything in
150 vp->objfile->symtabs? Should free_objfile do that?
151 FIXME-as-well: free_objfile already free'd vp->name, so it isn't
152 valid here. */
c906108c 153 free_named_symtabs (vp->name);
b8c9b27d 154 xfree (vp);
c906108c
SS
155 }
156
157 vmap = NULL;
158
6c95b8df
PA
159 {
160 struct program_space *ss;
161 struct cleanup *old_chain;
c906108c 162
6c95b8df
PA
163 old_chain = save_current_program_space ();
164 ALL_PSPACES (ss)
165 {
166 set_current_program_space (ss);
167
168 /* Delete all target sections. */
169 resize_section_table
170 (current_target_sections,
171 -resize_section_table (current_target_sections, 0));
172
173 exec_close ();
174 }
175
176 do_cleanups (old_chain);
177 }
c906108c
SS
178}
179
1adeb98a
FN
180void
181exec_file_clear (int from_tty)
182{
183 /* Remove exec file. */
6c95b8df 184 exec_close ();
1adeb98a
FN
185
186 if (from_tty)
a3f17187 187 printf_unfiltered (_("No executable file now.\n"));
1adeb98a
FN
188}
189
907083d1 190/* Set FILENAME as the new exec file.
c906108c 191
c5aa993b
JM
192 This function is intended to be behave essentially the same
193 as exec_file_command, except that the latter will detect when
194 a target is being debugged, and will ask the user whether it
195 should be shut down first. (If the answer is "no", then the
196 new file is ignored.)
c906108c 197
c5aa993b
JM
198 This file is used by exec_file_command, to do the work of opening
199 and processing the exec file after any prompting has happened.
c906108c 200
c5aa993b
JM
201 And, it is used by child_attach, when the attach command was
202 given a pid but not a exec pathname, and the attach command could
203 figure out the pathname from the pid. (In this case, we shouldn't
204 ask the user whether the current target should be shut down --
907083d1 205 we're supplying the exec pathname late for good reason.) */
c906108c
SS
206
207void
1adeb98a 208exec_file_attach (char *filename, int from_tty)
c906108c 209{
c906108c 210 /* Remove any previous exec file. */
6c95b8df 211 exec_close ();
c906108c
SS
212
213 /* Now open and digest the file the user requested, if any. */
214
1adeb98a
FN
215 if (!filename)
216 {
217 if (from_tty)
a3f17187 218 printf_unfiltered (_("No executable file now.\n"));
7a107747
DJ
219
220 set_gdbarch_from_file (NULL);
1adeb98a
FN
221 }
222 else
c906108c 223 {
f7545552 224 struct cleanup *cleanups;
c906108c
SS
225 char *scratch_pathname;
226 int scratch_chan;
07b82ea5 227 struct target_section *sections = NULL, *sections_end = NULL;
c5aa993b 228
014d698b 229 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename,
fbdebf46 230 write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
c906108c 231 &scratch_pathname);
cfc3008e 232#if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
c906108c 233 if (scratch_chan < 0)
c5aa993b
JM
234 {
235 char *exename = alloca (strlen (filename) + 5);
236 strcat (strcpy (exename, filename), ".exe");
014d698b 237 scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename,
fbdebf46 238 write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
014d698b 239 &scratch_pathname);
c5aa993b 240 }
c906108c
SS
241#endif
242 if (scratch_chan < 0)
243 perror_with_name (filename);
9f76c2cd
MM
244 exec_bfd = bfd_fopen (scratch_pathname, gnutarget,
245 write_files ? FOPEN_RUB : FOPEN_RB,
246 scratch_chan);
c906108c
SS
247
248 if (!exec_bfd)
9fe4a216
TT
249 {
250 close (scratch_chan);
251 error (_("\"%s\": could not open as an executable file: %s"),
252 scratch_pathname, bfd_errmsg (bfd_get_error ()));
253 }
c906108c
SS
254
255 /* At this point, scratch_pathname and exec_bfd->name both point to the
c5aa993b
JM
256 same malloc'd string. However exec_close() will attempt to free it
257 via the exec_bfd->name pointer, so we need to make another copy and
258 leave exec_bfd as the new owner of the original copy. */
c2d11a7d 259 scratch_pathname = xstrdup (scratch_pathname);
f7545552 260 cleanups = make_cleanup (xfree, scratch_pathname);
c5aa993b 261
c906108c
SS
262 if (!bfd_check_format (exec_bfd, bfd_object))
263 {
264 /* Make sure to close exec_bfd, or else "run" might try to use
265 it. */
6c95b8df 266 exec_close ();
8a3fe4f8 267 error (_("\"%s\": not in executable format: %s"),
c906108c
SS
268 scratch_pathname, bfd_errmsg (bfd_get_error ()));
269 }
270
271 /* FIXME - This should only be run for RS6000, but the ifdef is a poor
c5aa993b 272 way to accomplish. */
52d16ba8 273#ifdef DEPRECATED_IBM6000_TARGET
c906108c
SS
274 /* Setup initial vmap. */
275
276 map_vmap (exec_bfd, 0);
277 if (vmap == NULL)
278 {
279 /* Make sure to close exec_bfd, or else "run" might try to use
280 it. */
6c95b8df 281 exec_close ();
8a3fe4f8 282 error (_("\"%s\": can't find the file sections: %s"),
c906108c
SS
283 scratch_pathname, bfd_errmsg (bfd_get_error ()));
284 }
52d16ba8 285#endif /* DEPRECATED_IBM6000_TARGET */
c906108c 286
07b82ea5 287 if (build_section_table (exec_bfd, &sections, &sections_end))
c906108c
SS
288 {
289 /* Make sure to close exec_bfd, or else "run" might try to use
290 it. */
6c95b8df 291 exec_close ();
8a3fe4f8 292 error (_("\"%s\": can't find the file sections: %s"),
c906108c
SS
293 scratch_pathname, bfd_errmsg (bfd_get_error ()));
294 }
295
c04ea773
DJ
296 exec_bfd_mtime = bfd_get_mtime (exec_bfd);
297
c906108c
SS
298 validate_files ();
299
300 set_gdbarch_from_file (exec_bfd);
301
07b82ea5 302 /* Add the executable's sections to the current address spaces'
6c95b8df
PA
303 list of sections. This possibly pushes the exec_ops
304 target. */
07b82ea5
PA
305 add_target_sections (sections, sections_end);
306 xfree (sections);
c906108c
SS
307
308 /* Tell display code (if any) about the changed file name. */
9a4105ab
AC
309 if (deprecated_exec_file_display_hook)
310 (*deprecated_exec_file_display_hook) (filename);
f7545552
TT
311
312 do_cleanups (cleanups);
c906108c 313 }
ce7d4522 314 bfd_cache_close_all ();
781b42b0 315 observer_notify_executable_changed ();
c906108c
SS
316}
317
318/* Process the first arg in ARGS as the new exec file.
319
c5aa993b
JM
320 Note that we have to explicitly ignore additional args, since we can
321 be called from file_command(), which also calls symbol_file_command()
1adeb98a
FN
322 which can take multiple args.
323
324 If ARGS is NULL, we just want to close the exec file. */
c906108c 325
1adeb98a 326static void
fba45db2 327exec_file_command (char *args, int from_tty)
c906108c 328{
1adeb98a
FN
329 char **argv;
330 char *filename;
4c42eaff
DJ
331
332 if (from_tty && target_has_execution
333 && !query (_("A program is being debugged already.\n"
334 "Are you sure you want to change the file? ")))
335 error (_("File not changed."));
1adeb98a
FN
336
337 if (args)
338 {
f7545552
TT
339 struct cleanup *cleanups;
340
1adeb98a
FN
341 /* Scan through the args and pick up the first non option arg
342 as the filename. */
343
d1a41061 344 argv = gdb_buildargv (args);
f7545552 345 cleanups = make_cleanup_freeargv (argv);
1adeb98a
FN
346
347 for (; (*argv != NULL) && (**argv == '-'); argv++)
348 {;
349 }
350 if (*argv == NULL)
8a3fe4f8 351 error (_("No executable file name was specified"));
1adeb98a
FN
352
353 filename = tilde_expand (*argv);
354 make_cleanup (xfree, filename);
355 exec_file_attach (filename, from_tty);
f7545552
TT
356
357 do_cleanups (cleanups);
1adeb98a
FN
358 }
359 else
360 exec_file_attach (NULL, from_tty);
c906108c
SS
361}
362
363/* Set both the exec file and the symbol file, in one command.
364 What a novelty. Why did GDB go through four major releases before this
365 command was added? */
366
367static void
fba45db2 368file_command (char *arg, int from_tty)
c906108c
SS
369{
370 /* FIXME, if we lose on reading the symbol file, we should revert
371 the exec file, but that's rough. */
372 exec_file_command (arg, from_tty);
373 symbol_file_command (arg, from_tty);
9a4105ab
AC
374 if (deprecated_file_changed_hook)
375 deprecated_file_changed_hook (arg);
c906108c 376}
c906108c 377\f
c5aa993b 378
c906108c
SS
379/* Locate all mappable sections of a BFD file.
380 table_pp_char is a char * to get it through bfd_map_over_sections;
381 we cast it back to its proper type. */
382
383static void
7be0c536
AC
384add_to_section_table (bfd *abfd, struct bfd_section *asect,
385 void *table_pp_char)
c906108c 386{
0542c86d 387 struct target_section **table_pp = (struct target_section **) table_pp_char;
c906108c
SS
388 flagword aflag;
389
0f5d55d8
JB
390 /* Check the section flags, but do not discard zero-length sections, since
391 some symbols may still be attached to this section. For instance, we
392 encountered on sparc-solaris 2.10 a shared library with an empty .bss
393 section to which a symbol named "_end" was attached. The address
394 of this symbol still needs to be relocated. */
c906108c
SS
395 aflag = bfd_get_section_flags (abfd, asect);
396 if (!(aflag & SEC_ALLOC))
397 return;
0f5d55d8 398
c906108c
SS
399 (*table_pp)->bfd = abfd;
400 (*table_pp)->the_bfd_section = asect;
401 (*table_pp)->addr = bfd_section_vma (abfd, asect);
402 (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect);
403 (*table_pp)++;
404}
405
07b82ea5
PA
406int
407resize_section_table (struct target_section_table *table, int num_added)
408{
409 struct target_section *old_value;
410 int old_count;
411 int new_count;
412
413 old_value = table->sections;
414 old_count = table->sections_end - table->sections;
415
416 new_count = num_added + old_count;
417
418 if (new_count)
419 {
420 table->sections = xrealloc (table->sections,
421 sizeof (struct target_section) * new_count);
422 table->sections_end = table->sections + new_count;
423 }
424 else
425 {
426 xfree (table->sections);
427 table->sections = table->sections_end = NULL;
428 }
429
430 return old_count;
431}
432
c906108c
SS
433/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
434 Returns 0 if OK, 1 on error. */
435
436int
0542c86d
PA
437build_section_table (struct bfd *some_bfd, struct target_section **start,
438 struct target_section **end)
c906108c
SS
439{
440 unsigned count;
441
442 count = bfd_count_sections (some_bfd);
443 if (*start)
b8c9b27d 444 xfree (* start);
0542c86d 445 *start = (struct target_section *) xmalloc (count * sizeof (**start));
c906108c 446 *end = *start;
c5aa993b 447 bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
c906108c 448 if (*end > *start + count)
e2e0b3e5 449 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
c906108c
SS
450 /* We could realloc the table, but it probably loses for most files. */
451 return 0;
452}
07b82ea5
PA
453
454/* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
455 current set of target sections. */
456
457void
458add_target_sections (struct target_section *sections,
459 struct target_section *sections_end)
460{
461 int count;
462 struct target_section_table *table = current_target_sections;
463
464 count = sections_end - sections;
465
466 if (count > 0)
467 {
468 int space = resize_section_table (table, count);
469 memcpy (table->sections + space,
470 sections, count * sizeof (sections[0]));
471
472 /* If these are the first file sections we can provide memory
473 from, push the file_stratum target. */
6c95b8df
PA
474 if (!using_exec_ops)
475 {
476 using_exec_ops = 1;
477 push_target (&exec_ops);
478 }
07b82ea5
PA
479 }
480}
481
482/* Remove all target sections taken from ABFD. */
483
484void
485remove_target_sections (bfd *abfd)
486{
487 struct target_section *src, *dest;
488
489 struct target_section_table *table = current_target_sections;
490
491 dest = table->sections;
492 for (src = table->sections; src < table->sections_end; src++)
493 if (src->bfd != abfd)
494 {
495 /* Keep this section. */
496 if (dest < src)
497 *dest = *src;
498 dest++;
499 }
500
501 /* If we've dropped any sections, resize the section table. */
502 if (dest < src)
503 {
504 int old_count;
505
506 old_count = resize_section_table (table, dest - src);
507
508 /* If we don't have any more sections to read memory from,
509 remove the file_stratum target from the stack. */
510 if (old_count + (dest - src) == 0)
6c95b8df
PA
511 {
512 struct program_space *pspace;
513
514 ALL_PSPACES (pspace)
515 if (pspace->target_sections.sections
516 != pspace->target_sections.sections_end)
517 return;
518
519 unpush_target (&exec_ops);
520 }
07b82ea5
PA
521 }
522}
523
c906108c
SS
524\f
525static void
7be0c536 526bfdsec_to_vmap (struct bfd *abfd, struct bfd_section *sect, void *arg3)
c906108c
SS
527{
528 struct vmap_and_bfd *vmap_bfd = (struct vmap_and_bfd *) arg3;
529 struct vmap *vp;
530
531 vp = vmap_bfd->pvmap;
532
533 if ((bfd_get_section_flags (abfd, sect) & SEC_LOAD) == 0)
534 return;
535
dc6a2ca4 536 if (strcmp (bfd_section_name (abfd, sect), ".text") == 0)
c906108c
SS
537 {
538 vp->tstart = bfd_section_vma (abfd, sect);
539 vp->tend = vp->tstart + bfd_section_size (abfd, sect);
540 vp->tvma = bfd_section_vma (abfd, sect);
541 vp->toffs = sect->filepos;
542 }
dc6a2ca4 543 else if (strcmp (bfd_section_name (abfd, sect), ".data") == 0)
c906108c
SS
544 {
545 vp->dstart = bfd_section_vma (abfd, sect);
546 vp->dend = vp->dstart + bfd_section_size (abfd, sect);
547 vp->dvma = bfd_section_vma (abfd, sect);
548 }
549 /* Silently ignore other types of sections. (FIXME?) */
550}
551
552/* Make a vmap for ABFD which might be a member of the archive ARCH.
553 Return the new vmap. */
554
555struct vmap *
fba45db2 556map_vmap (bfd *abfd, bfd *arch)
c906108c
SS
557{
558 struct vmap_and_bfd vmap_bfd;
559 struct vmap *vp, **vpp;
560
561 vp = (struct vmap *) xmalloc (sizeof (*vp));
562 memset ((char *) vp, '\0', sizeof (*vp));
563 vp->nxt = 0;
564 vp->bfd = abfd;
565 vp->name = bfd_get_filename (arch ? arch : abfd);
566 vp->member = arch ? bfd_get_filename (abfd) : "";
c5aa993b 567
c906108c
SS
568 vmap_bfd.pbfd = arch;
569 vmap_bfd.pvmap = vp;
570 bfd_map_over_sections (abfd, bfdsec_to_vmap, &vmap_bfd);
571
572 /* Find the end of the list and append. */
573 for (vpp = &vmap; *vpp; vpp = &(*vpp)->nxt)
574 ;
575 *vpp = vp;
576
577 return vp;
578}
579\f
348f8c02 580
07b82ea5
PA
581int
582section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
583 ULONGEST offset, LONGEST len,
584 struct target_section *sections,
585 struct target_section *sections_end,
586 const char *section_name)
c906108c 587{
020cc13c 588 int res;
0542c86d 589 struct target_section *p;
07b82ea5
PA
590 ULONGEST memaddr = offset;
591 ULONGEST memend = memaddr + len;
c906108c
SS
592
593 if (len <= 0)
e2e0b3e5 594 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
c906108c 595
348f8c02 596 for (p = sections; p < sections_end; p++)
c906108c 597 {
348f8c02 598 if (section_name && strcmp (section_name, p->the_bfd_section->name) != 0)
c5aa993b 599 continue; /* not the section we need */
c906108c 600 if (memaddr >= p->addr)
3db26b01
JB
601 {
602 if (memend <= p->endaddr)
603 {
604 /* Entire transfer is within this section. */
07b82ea5 605 if (writebuf)
85302095 606 res = bfd_set_section_contents (p->bfd, p->the_bfd_section,
07b82ea5 607 writebuf, memaddr - p->addr,
85302095
AC
608 len);
609 else
610 res = bfd_get_section_contents (p->bfd, p->the_bfd_section,
07b82ea5 611 readbuf, memaddr - p->addr,
85302095 612 len);
3db26b01
JB
613 return (res != 0) ? len : 0;
614 }
615 else if (memaddr >= p->endaddr)
616 {
617 /* This section ends before the transfer starts. */
618 continue;
619 }
620 else
621 {
622 /* This section overlaps the transfer. Just do half. */
623 len = p->endaddr - memaddr;
07b82ea5 624 if (writebuf)
85302095 625 res = bfd_set_section_contents (p->bfd, p->the_bfd_section,
07b82ea5 626 writebuf, memaddr - p->addr,
85302095
AC
627 len);
628 else
629 res = bfd_get_section_contents (p->bfd, p->the_bfd_section,
07b82ea5 630 readbuf, memaddr - p->addr,
85302095 631 len);
3db26b01
JB
632 return (res != 0) ? len : 0;
633 }
634 }
c906108c
SS
635 }
636
07b82ea5 637 return 0; /* We can't help */
c906108c 638}
348f8c02 639
07b82ea5
PA
640struct target_section_table *
641exec_get_section_table (struct target_ops *ops)
348f8c02 642{
07b82ea5 643 return current_target_sections;
348f8c02
PA
644}
645
07b82ea5
PA
646static LONGEST
647exec_xfer_partial (struct target_ops *ops, enum target_object object,
648 const char *annex, gdb_byte *readbuf,
649 const gdb_byte *writebuf,
650 ULONGEST offset, LONGEST len)
348f8c02 651{
07b82ea5
PA
652 struct target_section_table *table = target_get_section_table (ops);
653
654 if (object == TARGET_OBJECT_MEMORY)
655 return section_table_xfer_memory_partial (readbuf, writebuf,
656 offset, len,
657 table->sections,
658 table->sections_end,
659 NULL);
660 else
661 return -1;
348f8c02 662}
c906108c 663\f
c5aa993b 664
c906108c 665void
07b82ea5 666print_section_info (struct target_section_table *t, bfd *abfd)
c906108c 667{
5af949e3 668 struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
0542c86d 669 struct target_section *p;
17a912b6 670 /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */
5af949e3 671 int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16;
c906108c 672
c5aa993b 673 printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
c906108c 674 wrap_here (" ");
a3f17187 675 printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
c906108c 676 if (abfd == exec_bfd)
944f08ab 677 printf_filtered (_("\tEntry point: %s\n"),
5af949e3 678 paddress (gdbarch, bfd_get_start_address (abfd)));
07b82ea5 679 for (p = t->sections; p < t->sections_end; p++)
c906108c 680 {
bb599908
PH
681 printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
682 printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
bcf16802
KB
683
684 /* FIXME: A format of "08l" is not wide enough for file offsets
685 larger than 4GB. OTOH, making it "016l" isn't desirable either
686 since most output will then be much wider than necessary. It
687 may make sense to test the size of the file and choose the
688 format string accordingly. */
a3f17187 689 /* FIXME: i18n: Need to rewrite this sentence. */
c906108c
SS
690 if (info_verbose)
691 printf_filtered (" @ %s",
bb599908 692 hex_string_custom (p->the_bfd_section->filepos, 8));
c906108c
SS
693 printf_filtered (" is %s", bfd_section_name (p->bfd, p->the_bfd_section));
694 if (p->bfd != abfd)
a3f17187 695 printf_filtered (" in %s", bfd_get_filename (p->bfd));
c906108c
SS
696 printf_filtered ("\n");
697 }
698}
699
700static void
fba45db2 701exec_files_info (struct target_ops *t)
c906108c 702{
07b82ea5 703 print_section_info (current_target_sections, exec_bfd);
c906108c
SS
704
705 if (vmap)
706 {
5af949e3 707 int addr_size = gdbarch_addr_bit (target_gdbarch) / 8;
c906108c
SS
708 struct vmap *vp;
709
a3f17187 710 printf_unfiltered (_("\tMapping info for file `%s'.\n"), vmap->name);
d4f3574e 711 printf_unfiltered ("\t %*s %*s %*s %*s %8.8s %s\n",
5af949e3
UW
712 addr_size * 2, "tstart",
713 addr_size * 2, "tend",
714 addr_size * 2, "dstart",
715 addr_size * 2, "dend",
d4f3574e 716 "section",
c5aa993b
JM
717 "file(member)");
718
719 for (vp = vmap; vp; vp = vp->nxt)
d4f3574e 720 printf_unfiltered ("\t0x%s 0x%s 0x%s 0x%s %s%s%s%s\n",
5af949e3
UW
721 phex (vp->tstart, addr_size),
722 phex (vp->tend, addr_size),
723 phex (vp->dstart, addr_size),
724 phex (vp->dend, addr_size),
d4f3574e 725 vp->name,
c5aa993b
JM
726 *vp->member ? "(" : "", vp->member,
727 *vp->member ? ")" : "");
c906108c
SS
728 }
729}
730
731static void
fba45db2 732set_section_command (char *args, int from_tty)
c906108c 733{
0542c86d 734 struct target_section *p;
c906108c
SS
735 char *secname;
736 unsigned seclen;
737 unsigned long secaddr;
738 char secprint[100];
739 long offset;
07b82ea5 740 struct target_section_table *table;
c906108c
SS
741
742 if (args == 0)
8a3fe4f8 743 error (_("Must specify section name and its virtual address"));
c906108c
SS
744
745 /* Parse out section name */
c5aa993b 746 for (secname = args; !isspace (*args); args++);
c906108c
SS
747 seclen = args - secname;
748
749 /* Parse out new virtual address */
750 secaddr = parse_and_eval_address (args);
751
07b82ea5
PA
752 table = current_target_sections;
753 for (p = table->sections; p < table->sections_end; p++)
c5aa993b
JM
754 {
755 if (!strncmp (secname, bfd_section_name (exec_bfd, p->the_bfd_section), seclen)
756 && bfd_section_name (exec_bfd, p->the_bfd_section)[seclen] == '\0')
757 {
758 offset = secaddr - p->addr;
759 p->addr += offset;
760 p->endaddr += offset;
761 if (from_tty)
762 exec_files_info (&exec_ops);
763 return;
764 }
c906108c 765 }
c906108c
SS
766 if (seclen >= sizeof (secprint))
767 seclen = sizeof (secprint) - 1;
768 strncpy (secprint, secname, seclen);
769 secprint[seclen] = '\0';
8a3fe4f8 770 error (_("Section %s not found"), secprint);
c906108c
SS
771}
772
30510692
DJ
773/* If we can find a section in FILENAME with BFD index INDEX, adjust
774 it to ADDRESS. */
c1bd25fd
DJ
775
776void
777exec_set_section_address (const char *filename, int index, CORE_ADDR address)
778{
0542c86d 779 struct target_section *p;
07b82ea5 780 struct target_section_table *table;
c1bd25fd 781
07b82ea5
PA
782 table = current_target_sections;
783 for (p = table->sections; p < table->sections_end; p++)
c1bd25fd
DJ
784 {
785 if (strcmp (filename, p->bfd->filename) == 0
30510692 786 && index == p->the_bfd_section->index)
c1bd25fd 787 {
30510692 788 p->endaddr += address - p->addr;
c1bd25fd 789 p->addr = address;
c1bd25fd
DJ
790 }
791 }
792}
793
c906108c
SS
794/* If mourn is being called in all the right places, this could be say
795 `gdb internal error' (since generic_mourn calls
796 breakpoint_init_inferior). */
797
798static int
a6d9a66e 799ignore (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
c906108c
SS
800{
801 return 0;
802}
803
c35b1492
PA
804static int
805exec_has_memory (struct target_ops *ops)
806{
807 /* We can provide memory if we have any file/target sections to read
808 from. */
809 return (current_target_sections->sections
810 != current_target_sections->sections_end);
811}
812
be4d1333
MS
813/* Find mapped memory. */
814
815extern void
816exec_set_find_memory_regions (int (*func) (int (*) (CORE_ADDR,
817 unsigned long,
818 int, int, int,
819 void *),
820 void *))
821{
822 exec_ops.to_find_memory_regions = func;
823}
824
825static char *exec_make_note_section (bfd *, int *);
826
c906108c
SS
827/* Fill in the exec file target vector. Very few entries need to be
828 defined. */
829
be4d1333 830static void
fba45db2 831init_exec_ops (void)
c906108c
SS
832{
833 exec_ops.to_shortname = "exec";
834 exec_ops.to_longname = "Local exec file";
835 exec_ops.to_doc = "Use an executable file as a target.\n\
836Specify the filename of the executable file.";
1adeb98a 837 exec_ops.to_open = exec_open;
6c95b8df 838 exec_ops.to_close = exec_close_1;
c906108c 839 exec_ops.to_attach = find_default_attach;
07b82ea5
PA
840 exec_ops.to_xfer_partial = exec_xfer_partial;
841 exec_ops.to_get_section_table = exec_get_section_table;
c906108c
SS
842 exec_ops.to_files_info = exec_files_info;
843 exec_ops.to_insert_breakpoint = ignore;
844 exec_ops.to_remove_breakpoint = ignore;
845 exec_ops.to_create_inferior = find_default_create_inferior;
c906108c 846 exec_ops.to_stratum = file_stratum;
c35b1492 847 exec_ops.to_has_memory = exec_has_memory;
be4d1333 848 exec_ops.to_make_corefile_notes = exec_make_note_section;
c5aa993b 849 exec_ops.to_magic = OPS_MAGIC;
c906108c
SS
850}
851
852void
fba45db2 853_initialize_exec (void)
c906108c
SS
854{
855 struct cmd_list_element *c;
856
857 init_exec_ops ();
858
859 if (!dbx_commands)
860 {
1a966eab
AC
861 c = add_cmd ("file", class_files, file_command, _("\
862Use FILE as program to be debugged.\n\
c906108c
SS
863It is read for its symbols, for getting the contents of pure memory,\n\
864and it is the program executed when you use the `run' command.\n\
865If FILE cannot be found as specified, your execution directory path\n\
866($PATH) is searched for a command of that name.\n\
1a966eab 867No arg means to have no executable file and no symbols."), &cmdlist);
5ba2abeb 868 set_cmd_completer (c, filename_completer);
c906108c
SS
869 }
870
1a966eab
AC
871 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
872Use FILE as program for getting contents of pure memory.\n\
c906108c
SS
873If FILE cannot be found as specified, your execution directory path\n\
874is searched for a command of that name.\n\
1a966eab 875No arg means have no executable file."), &cmdlist);
5ba2abeb 876 set_cmd_completer (c, filename_completer);
c906108c 877
1bedd215
AC
878 add_com ("section", class_files, set_section_command, _("\
879Change the base address of section SECTION of the exec file to ADDR.\n\
c906108c
SS
880This can be used if the exec file does not contain section addresses,\n\
881(such as in the a.out format), or when the addresses specified in the\n\
882file itself are wrong. Each section must be changed separately. The\n\
1bedd215 883``info files'' command lists all the sections and their addresses."));
c906108c 884
5bf193a2
AC
885 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
886Set writing into executable and core files."), _("\
887Show writing into executable and core files."), NULL,
888 NULL,
920d2a44 889 show_write_files,
5bf193a2 890 &setlist, &showlist);
c5aa993b 891
c906108c
SS
892 add_target (&exec_ops);
893}
be4d1333
MS
894
895static char *
896exec_make_note_section (bfd *obfd, int *note_size)
897{
8a3fe4f8 898 error (_("Can't create a corefile"));
be4d1333 899}