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