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