]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/exec.c
2010-01-15 Sebastian Pop <sebastian.pop@amd.com>
[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,
4c38e0a4 4 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2009, 2010
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)
51bee8e9
JK
677 {
678 bfd_vma displacement;
679
680 for (p = t->sections; p < t->sections_end; p++)
681 {
682 asection *asect = p->the_bfd_section;
683
684 if ((bfd_get_section_flags (abfd, asect) & (SEC_ALLOC | SEC_LOAD))
685 != (SEC_ALLOC | SEC_LOAD))
686 continue;
687
688 if (bfd_get_section_vma (abfd, asect) <= abfd->start_address
689 && abfd->start_address < (bfd_get_section_vma (abfd, asect)
690 + bfd_get_section_size (asect)))
691 {
692 displacement = p->addr - bfd_get_section_vma (abfd, asect);
693 break;
694 }
695 }
696 if (p == t->sections_end)
697 {
698 warning (_("Cannot find section for the entry point of %s.\n"),
699 bfd_get_filename (abfd));
700 displacement = 0;
701 }
702
703 printf_filtered (_("\tEntry point: %s\n"),
704 paddress (gdbarch, (bfd_get_start_address (abfd)
705 + displacement)));
706 }
07b82ea5 707 for (p = t->sections; p < t->sections_end; p++)
c906108c 708 {
bb599908
PH
709 printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
710 printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
bcf16802
KB
711
712 /* FIXME: A format of "08l" is not wide enough for file offsets
713 larger than 4GB. OTOH, making it "016l" isn't desirable either
714 since most output will then be much wider than necessary. It
715 may make sense to test the size of the file and choose the
716 format string accordingly. */
a3f17187 717 /* FIXME: i18n: Need to rewrite this sentence. */
c906108c
SS
718 if (info_verbose)
719 printf_filtered (" @ %s",
bb599908 720 hex_string_custom (p->the_bfd_section->filepos, 8));
c906108c
SS
721 printf_filtered (" is %s", bfd_section_name (p->bfd, p->the_bfd_section));
722 if (p->bfd != abfd)
a3f17187 723 printf_filtered (" in %s", bfd_get_filename (p->bfd));
c906108c
SS
724 printf_filtered ("\n");
725 }
726}
727
728static void
fba45db2 729exec_files_info (struct target_ops *t)
c906108c 730{
07b82ea5 731 print_section_info (current_target_sections, exec_bfd);
c906108c
SS
732
733 if (vmap)
734 {
5af949e3 735 int addr_size = gdbarch_addr_bit (target_gdbarch) / 8;
c906108c
SS
736 struct vmap *vp;
737
a3f17187 738 printf_unfiltered (_("\tMapping info for file `%s'.\n"), vmap->name);
d4f3574e 739 printf_unfiltered ("\t %*s %*s %*s %*s %8.8s %s\n",
5af949e3
UW
740 addr_size * 2, "tstart",
741 addr_size * 2, "tend",
742 addr_size * 2, "dstart",
743 addr_size * 2, "dend",
d4f3574e 744 "section",
c5aa993b
JM
745 "file(member)");
746
747 for (vp = vmap; vp; vp = vp->nxt)
d4f3574e 748 printf_unfiltered ("\t0x%s 0x%s 0x%s 0x%s %s%s%s%s\n",
5af949e3
UW
749 phex (vp->tstart, addr_size),
750 phex (vp->tend, addr_size),
751 phex (vp->dstart, addr_size),
752 phex (vp->dend, addr_size),
d4f3574e 753 vp->name,
c5aa993b
JM
754 *vp->member ? "(" : "", vp->member,
755 *vp->member ? ")" : "");
c906108c
SS
756 }
757}
758
759static void
fba45db2 760set_section_command (char *args, int from_tty)
c906108c 761{
0542c86d 762 struct target_section *p;
c906108c
SS
763 char *secname;
764 unsigned seclen;
765 unsigned long secaddr;
766 char secprint[100];
767 long offset;
07b82ea5 768 struct target_section_table *table;
c906108c
SS
769
770 if (args == 0)
8a3fe4f8 771 error (_("Must specify section name and its virtual address"));
c906108c
SS
772
773 /* Parse out section name */
c5aa993b 774 for (secname = args; !isspace (*args); args++);
c906108c
SS
775 seclen = args - secname;
776
777 /* Parse out new virtual address */
778 secaddr = parse_and_eval_address (args);
779
07b82ea5
PA
780 table = current_target_sections;
781 for (p = table->sections; p < table->sections_end; p++)
c5aa993b
JM
782 {
783 if (!strncmp (secname, bfd_section_name (exec_bfd, p->the_bfd_section), seclen)
784 && bfd_section_name (exec_bfd, p->the_bfd_section)[seclen] == '\0')
785 {
786 offset = secaddr - p->addr;
787 p->addr += offset;
788 p->endaddr += offset;
789 if (from_tty)
790 exec_files_info (&exec_ops);
791 return;
792 }
c906108c 793 }
c906108c
SS
794 if (seclen >= sizeof (secprint))
795 seclen = sizeof (secprint) - 1;
796 strncpy (secprint, secname, seclen);
797 secprint[seclen] = '\0';
8a3fe4f8 798 error (_("Section %s not found"), secprint);
c906108c
SS
799}
800
30510692
DJ
801/* If we can find a section in FILENAME with BFD index INDEX, adjust
802 it to ADDRESS. */
c1bd25fd
DJ
803
804void
805exec_set_section_address (const char *filename, int index, CORE_ADDR address)
806{
0542c86d 807 struct target_section *p;
07b82ea5 808 struct target_section_table *table;
c1bd25fd 809
07b82ea5
PA
810 table = current_target_sections;
811 for (p = table->sections; p < table->sections_end; p++)
c1bd25fd
DJ
812 {
813 if (strcmp (filename, p->bfd->filename) == 0
30510692 814 && index == p->the_bfd_section->index)
c1bd25fd 815 {
30510692 816 p->endaddr += address - p->addr;
c1bd25fd 817 p->addr = address;
c1bd25fd
DJ
818 }
819 }
820}
821
c906108c
SS
822/* If mourn is being called in all the right places, this could be say
823 `gdb internal error' (since generic_mourn calls
824 breakpoint_init_inferior). */
825
826static int
a6d9a66e 827ignore (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
c906108c
SS
828{
829 return 0;
830}
831
c35b1492
PA
832static int
833exec_has_memory (struct target_ops *ops)
834{
835 /* We can provide memory if we have any file/target sections to read
836 from. */
837 return (current_target_sections->sections
838 != current_target_sections->sections_end);
839}
840
be4d1333
MS
841/* Find mapped memory. */
842
843extern void
844exec_set_find_memory_regions (int (*func) (int (*) (CORE_ADDR,
845 unsigned long,
846 int, int, int,
847 void *),
848 void *))
849{
850 exec_ops.to_find_memory_regions = func;
851}
852
853static char *exec_make_note_section (bfd *, int *);
854
c906108c
SS
855/* Fill in the exec file target vector. Very few entries need to be
856 defined. */
857
be4d1333 858static void
fba45db2 859init_exec_ops (void)
c906108c
SS
860{
861 exec_ops.to_shortname = "exec";
862 exec_ops.to_longname = "Local exec file";
863 exec_ops.to_doc = "Use an executable file as a target.\n\
864Specify the filename of the executable file.";
1adeb98a 865 exec_ops.to_open = exec_open;
6c95b8df 866 exec_ops.to_close = exec_close_1;
c906108c 867 exec_ops.to_attach = find_default_attach;
07b82ea5
PA
868 exec_ops.to_xfer_partial = exec_xfer_partial;
869 exec_ops.to_get_section_table = exec_get_section_table;
c906108c
SS
870 exec_ops.to_files_info = exec_files_info;
871 exec_ops.to_insert_breakpoint = ignore;
872 exec_ops.to_remove_breakpoint = ignore;
873 exec_ops.to_create_inferior = find_default_create_inferior;
c906108c 874 exec_ops.to_stratum = file_stratum;
c35b1492 875 exec_ops.to_has_memory = exec_has_memory;
be4d1333 876 exec_ops.to_make_corefile_notes = exec_make_note_section;
c5aa993b 877 exec_ops.to_magic = OPS_MAGIC;
c906108c
SS
878}
879
880void
fba45db2 881_initialize_exec (void)
c906108c
SS
882{
883 struct cmd_list_element *c;
884
885 init_exec_ops ();
886
887 if (!dbx_commands)
888 {
1a966eab
AC
889 c = add_cmd ("file", class_files, file_command, _("\
890Use FILE as program to be debugged.\n\
c906108c
SS
891It is read for its symbols, for getting the contents of pure memory,\n\
892and it is the program executed when you use the `run' command.\n\
893If FILE cannot be found as specified, your execution directory path\n\
894($PATH) is searched for a command of that name.\n\
1a966eab 895No arg means to have no executable file and no symbols."), &cmdlist);
5ba2abeb 896 set_cmd_completer (c, filename_completer);
c906108c
SS
897 }
898
1a966eab
AC
899 c = add_cmd ("exec-file", class_files, exec_file_command, _("\
900Use FILE as program for getting contents of pure memory.\n\
c906108c
SS
901If FILE cannot be found as specified, your execution directory path\n\
902is searched for a command of that name.\n\
1a966eab 903No arg means have no executable file."), &cmdlist);
5ba2abeb 904 set_cmd_completer (c, filename_completer);
c906108c 905
1bedd215
AC
906 add_com ("section", class_files, set_section_command, _("\
907Change the base address of section SECTION of the exec file to ADDR.\n\
c906108c
SS
908This can be used if the exec file does not contain section addresses,\n\
909(such as in the a.out format), or when the addresses specified in the\n\
910file itself are wrong. Each section must be changed separately. The\n\
1bedd215 911``info files'' command lists all the sections and their addresses."));
c906108c 912
5bf193a2
AC
913 add_setshow_boolean_cmd ("write", class_support, &write_files, _("\
914Set writing into executable and core files."), _("\
915Show writing into executable and core files."), NULL,
916 NULL,
920d2a44 917 show_write_files,
5bf193a2 918 &setlist, &showlist);
c5aa993b 919
c906108c
SS
920 add_target (&exec_ops);
921}
be4d1333
MS
922
923static char *
924exec_make_note_section (bfd *obfd, int *note_size)
925{
8a3fe4f8 926 error (_("Can't create a corefile"));
be4d1333 927}