1 /* Definitions for BFD wrappers used by GDB.
3 Copyright (C) 2011-2016 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
25 #include "filestuff.h"
30 #define MAP_FAILED ((void *) -1)
34 #include "gdb/fileio.h"
40 /* An object of this type is stored in the section's user data when
43 struct gdb_bfd_section_data
45 /* Size of the data. */
47 /* If the data was mmapped, this is the length of the map. */
48 bfd_size_type map_len;
49 /* The data. If NULL, the section data has not been read. */
51 /* If the data was mmapped, this is the map address. */
55 /* A hash table holding every BFD that gdb knows about. This is not
56 to be confused with 'gdb_bfd_cache', which is used for sharing
57 BFDs; in contrast, this hash is used just to implement
60 static htab_t all_bfds;
62 /* An object of this type is stored in each BFD's user data. */
66 /* The reference count. */
69 /* The mtime of the BFD at the point the cache entry was made. */
72 /* The file size (in bytes) at the point the cache entry was made. */
75 /* The inode of the file at the point the cache entry was made. */
78 /* The device id of the file at the point the cache entry was made. */
81 /* This is true if we have determined whether this BFD has any
82 sections requiring relocation. */
83 unsigned int relocation_computed : 1;
85 /* This is true if any section needs relocation. */
86 unsigned int needs_relocations : 1;
88 /* This is true if we have successfully computed the file's CRC. */
89 unsigned int crc_computed : 1;
94 /* If the BFD comes from an archive, this points to the archive's
95 BFD. Otherwise, this is NULL. */
98 /* Table of all the bfds this bfd has included. */
99 VEC (bfdp) *included_bfds;
105 #define GDB_BFD_DATA_ACCESSOR(ABFD) \
106 ((struct gdb_bfd_data *) bfd_usrdata (ABFD))
108 DEFINE_REGISTRY (bfd, GDB_BFD_DATA_ACCESSOR)
110 /* A hash table storing all the BFDs maintained in the cache. */
112 static htab_t gdb_bfd_cache;
114 /* When true gdb will reuse an existing bfd object if the filename,
115 modification time, and file size all match. */
117 static int bfd_sharing = 1;
119 show_bfd_sharing (struct ui_file *file, int from_tty,
120 struct cmd_list_element *c, const char *value)
122 fprintf_filtered (file, _("BFD sharing is %s.\n"), value);
125 /* When non-zero debugging of the bfd caches is enabled. */
127 static unsigned int debug_bfd_cache;
129 show_bfd_cache_debug (struct ui_file *file, int from_tty,
130 struct cmd_list_element *c, const char *value)
132 fprintf_filtered (file, _("BFD cache debugging is %s.\n"), value);
135 /* The type of an object being looked up in gdb_bfd_cache. We use
136 htab's capability of storing one kind of object (BFD in this case)
137 and using a different sort of object for searching. */
139 struct gdb_bfd_cache_search
142 const char *filename;
145 /* The file size (in bytes). */
147 /* The inode of the file. */
149 /* The device id of the file. */
153 /* A hash function for BFDs. */
156 hash_bfd (const void *b)
158 const bfd *abfd = (const struct bfd *) b;
160 /* It is simplest to just hash the filename. */
161 return htab_hash_string (bfd_get_filename (abfd));
164 /* An equality function for BFDs. Note that this expects the caller
165 to search using struct gdb_bfd_cache_search only, not BFDs. */
168 eq_bfd (const void *a, const void *b)
170 const bfd *abfd = (const struct bfd *) a;
171 const struct gdb_bfd_cache_search *s
172 = (const struct gdb_bfd_cache_search *) b;
173 struct gdb_bfd_data *gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
175 return (gdata->mtime == s->mtime
176 && gdata->size == s->size
177 && gdata->inode == s->inode
178 && gdata->device_id == s->device_id
179 && strcmp (bfd_get_filename (abfd), s->filename) == 0);
185 is_target_filename (const char *name)
187 return startswith (name, TARGET_SYSROOT_PREFIX);
193 gdb_bfd_has_target_filename (struct bfd *abfd)
195 return is_target_filename (bfd_get_filename (abfd));
199 /* Return the system error number corresponding to ERRNUM. */
202 fileio_errno_to_host (int errnum)
246 case FILEIO_ENAMETOOLONG:
252 /* Wrapper for target_fileio_open suitable for passing as the
253 OPEN_FUNC argument to gdb_bfd_openr_iovec. The supplied
254 OPEN_CLOSURE is unused. */
257 gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *inferior)
259 const char *filename = bfd_get_filename (abfd);
260 int fd, target_errno;
263 gdb_assert (is_target_filename (filename));
265 fd = target_fileio_open_warn_if_slow ((struct inferior *) inferior,
267 + strlen (TARGET_SYSROOT_PREFIX),
272 errno = fileio_errno_to_host (target_errno);
273 bfd_set_error (bfd_error_system_call);
277 stream = XCNEW (int);
282 /* Wrapper for target_fileio_pread suitable for passing as the
283 PREAD_FUNC argument to gdb_bfd_openr_iovec. */
286 gdb_bfd_iovec_fileio_pread (struct bfd *abfd, void *stream, void *buf,
287 file_ptr nbytes, file_ptr offset)
289 int fd = *(int *) stream;
298 bytes = target_fileio_pread (fd, (gdb_byte *) buf + pos,
299 nbytes - pos, offset + pos,
302 /* Success, but no bytes, means end-of-file. */
306 errno = fileio_errno_to_host (target_errno);
307 bfd_set_error (bfd_error_system_call);
317 /* Wrapper for target_fileio_close suitable for passing as the
318 CLOSE_FUNC argument to gdb_bfd_openr_iovec. */
321 gdb_bfd_iovec_fileio_close (struct bfd *abfd, void *stream)
323 int fd = *(int *) stream;
328 /* Ignore errors on close. These may happen with remote
329 targets if the connection has already been torn down. */
330 target_fileio_close (fd, &target_errno);
332 /* Zero means success. */
336 /* Wrapper for target_fileio_fstat suitable for passing as the
337 STAT_FUNC argument to gdb_bfd_openr_iovec. */
340 gdb_bfd_iovec_fileio_fstat (struct bfd *abfd, void *stream,
343 int fd = *(int *) stream;
347 result = target_fileio_fstat (fd, sb, &target_errno);
350 errno = fileio_errno_to_host (target_errno);
351 bfd_set_error (bfd_error_system_call);
360 gdb_bfd_open (const char *name, const char *target, int fd)
365 struct gdb_bfd_cache_search search;
368 if (is_target_filename (name))
370 if (!target_filesystem_is_local ())
372 gdb_assert (fd == -1);
374 return gdb_bfd_openr_iovec (name, target,
375 gdb_bfd_iovec_fileio_open,
377 gdb_bfd_iovec_fileio_pread,
378 gdb_bfd_iovec_fileio_close,
379 gdb_bfd_iovec_fileio_fstat);
382 name += strlen (TARGET_SYSROOT_PREFIX);
385 if (gdb_bfd_cache == NULL)
386 gdb_bfd_cache = htab_create_alloc (1, hash_bfd, eq_bfd, NULL,
391 fd = gdb_open_cloexec (name, O_RDONLY | O_BINARY, 0);
394 bfd_set_error (bfd_error_system_call);
399 search.filename = name;
400 if (fstat (fd, &st) < 0)
402 /* Weird situation here. */
406 search.device_id = 0;
410 search.mtime = st.st_mtime;
411 search.size = st.st_size;
412 search.inode = st.st_ino;
413 search.device_id = st.st_dev;
416 /* Note that this must compute the same result as hash_bfd. */
417 hash = htab_hash_string (name);
418 /* Note that we cannot use htab_find_slot_with_hash here, because
419 opening the BFD may fail; and this would violate hashtab
421 abfd = (struct bfd *) htab_find_with_hash (gdb_bfd_cache, &search, hash);
422 if (bfd_sharing && abfd != NULL)
425 fprintf_unfiltered (gdb_stdlog,
426 "Reusing cached bfd %s for %s\n",
427 host_address_to_string (abfd),
428 bfd_get_filename (abfd));
434 abfd = bfd_fopen (name, target, FOPEN_RB, fd);
439 fprintf_unfiltered (gdb_stdlog,
440 "Creating new bfd %s for %s\n",
441 host_address_to_string (abfd),
442 bfd_get_filename (abfd));
446 slot = htab_find_slot_with_hash (gdb_bfd_cache, &search, hash, INSERT);
455 /* A helper function that releases any section data attached to the
459 free_one_bfd_section (bfd *abfd, asection *sectp, void *ignore)
461 struct gdb_bfd_section_data *sect
462 = (struct gdb_bfd_section_data *) bfd_get_section_userdata (abfd, sectp);
464 if (sect != NULL && sect->data != NULL)
467 if (sect->map_addr != NULL)
471 res = munmap (sect->map_addr, sect->map_len);
472 gdb_assert (res == 0);
480 /* Close ABFD, and warn if that fails. */
483 gdb_bfd_close_or_warn (struct bfd *abfd)
486 char *name = bfd_get_filename (abfd);
488 bfd_map_over_sections (abfd, free_one_bfd_section, NULL);
490 ret = bfd_close (abfd);
493 warning (_("cannot close \"%s\": %s"),
494 name, bfd_errmsg (bfd_get_error ()));
502 gdb_bfd_ref (struct bfd *abfd)
505 struct gdb_bfd_data *gdata;
511 gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
514 fprintf_unfiltered (gdb_stdlog,
515 "Increase reference count on bfd %s (%s)\n",
516 host_address_to_string (abfd),
517 bfd_get_filename (abfd));
525 /* Ask BFD to decompress sections in bfd_get_full_section_contents. */
526 abfd->flags |= BFD_DECOMPRESS;
529 = (struct gdb_bfd_data *) bfd_zalloc (abfd, sizeof (struct gdb_bfd_data));
531 gdata->mtime = bfd_get_mtime (abfd);
532 gdata->size = bfd_get_size (abfd);
533 gdata->archive_bfd = NULL;
534 if (bfd_stat (abfd, &buf) == 0)
536 gdata->inode = buf.st_ino;
537 gdata->device_id = buf.st_dev;
541 /* The stat failed. */
543 gdata->device_id = 0;
545 bfd_usrdata (abfd) = gdata;
547 bfd_alloc_data (abfd);
549 /* This is the first we've seen it, so add it to the hash table. */
550 slot = htab_find_slot (all_bfds, abfd, INSERT);
551 gdb_assert (slot && !*slot);
558 gdb_bfd_unref (struct bfd *abfd)
561 struct gdb_bfd_data *gdata;
562 struct gdb_bfd_cache_search search;
563 bfd *archive_bfd, *included_bfd;
568 gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
569 gdb_assert (gdata->refc >= 1);
575 fprintf_unfiltered (gdb_stdlog,
576 "Decrease reference count on bfd %s (%s)\n",
577 host_address_to_string (abfd),
578 bfd_get_filename (abfd));
583 fprintf_unfiltered (gdb_stdlog,
584 "Delete final reference count on bfd %s (%s)\n",
585 host_address_to_string (abfd),
586 bfd_get_filename (abfd));
588 archive_bfd = gdata->archive_bfd;
589 search.filename = bfd_get_filename (abfd);
591 if (gdb_bfd_cache && search.filename)
593 hashval_t hash = htab_hash_string (search.filename);
596 search.mtime = gdata->mtime;
597 search.size = gdata->size;
598 search.inode = gdata->inode;
599 search.device_id = gdata->device_id;
600 slot = htab_find_slot_with_hash (gdb_bfd_cache, &search, hash,
604 htab_clear_slot (gdb_bfd_cache, slot);
608 VEC_iterate (bfdp, gdata->included_bfds, ix, included_bfd);
610 gdb_bfd_unref (included_bfd);
611 VEC_free (bfdp, gdata->included_bfds);
613 bfd_free_data (abfd);
614 bfd_usrdata (abfd) = NULL; /* Paranoia. */
616 htab_remove_elt (all_bfds, abfd);
618 gdb_bfd_close_or_warn (abfd);
620 gdb_bfd_unref (archive_bfd);
623 /* A helper function that returns the section data descriptor
624 associated with SECTION. If no such descriptor exists, a new one
625 is allocated and cleared. */
627 static struct gdb_bfd_section_data *
628 get_section_descriptor (asection *section)
630 struct gdb_bfd_section_data *result;
632 result = ((struct gdb_bfd_section_data *)
633 bfd_get_section_userdata (section->owner, section));
637 result = ((struct gdb_bfd_section_data *)
638 bfd_zalloc (section->owner, sizeof (*result)));
639 bfd_set_section_userdata (section->owner, section, result);
648 gdb_bfd_map_section (asection *sectp, bfd_size_type *size)
651 struct gdb_bfd_section_data *descriptor;
654 gdb_assert ((sectp->flags & SEC_RELOC) == 0);
655 gdb_assert (size != NULL);
659 descriptor = get_section_descriptor (sectp);
661 /* If the data was already read for this BFD, just reuse it. */
662 if (descriptor->data != NULL)
666 if (!bfd_is_section_compressed (abfd, sectp))
668 /* The page size, used when mmapping. */
672 pagesize = getpagesize ();
674 /* Only try to mmap sections which are large enough: we don't want
675 to waste space due to fragmentation. */
677 if (bfd_get_section_size (sectp) > 4 * pagesize)
679 descriptor->size = bfd_get_section_size (sectp);
680 descriptor->data = bfd_mmap (abfd, 0, descriptor->size, PROT_READ,
681 MAP_PRIVATE, sectp->filepos,
682 &descriptor->map_addr,
683 &descriptor->map_len);
685 if ((caddr_t)descriptor->data != MAP_FAILED)
687 #if HAVE_POSIX_MADVISE
688 posix_madvise (descriptor->map_addr, descriptor->map_len,
689 POSIX_MADV_WILLNEED);
694 /* On failure, clear out the section data and try again. */
695 memset (descriptor, 0, sizeof (*descriptor));
698 #endif /* HAVE_MMAP */
700 /* Handle compressed sections, or ordinary uncompressed sections in
703 descriptor->size = bfd_get_section_size (sectp);
704 descriptor->data = NULL;
707 if (!bfd_get_full_section_contents (abfd, sectp, &data))
708 error (_("Can't read data for section '%s' in file '%s'"),
709 bfd_get_section_name (abfd, sectp),
710 bfd_get_filename (abfd));
711 descriptor->data = data;
714 gdb_assert (descriptor->data != NULL);
715 *size = descriptor->size;
716 return (const gdb_byte *) descriptor->data;
719 /* Return 32-bit CRC for ABFD. If successful store it to *FILE_CRC_RETURN and
720 return 1. Otherwise print a warning and return 0. ABFD seek position is
724 get_file_crc (bfd *abfd, unsigned long *file_crc_return)
726 unsigned long file_crc = 0;
728 if (bfd_seek (abfd, 0, SEEK_SET) != 0)
730 warning (_("Problem reading \"%s\" for CRC: %s"),
731 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
737 gdb_byte buffer[8 * 1024];
740 count = bfd_bread (buffer, sizeof (buffer), abfd);
741 if (count == (bfd_size_type) -1)
743 warning (_("Problem reading \"%s\" for CRC: %s"),
744 bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
749 file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count);
752 *file_crc_return = file_crc;
759 gdb_bfd_crc (struct bfd *abfd, unsigned long *crc_out)
761 struct gdb_bfd_data *gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
763 if (!gdata->crc_computed)
764 gdata->crc_computed = get_file_crc (abfd, &gdata->crc);
766 if (gdata->crc_computed)
767 *crc_out = gdata->crc;
768 return gdata->crc_computed;
776 gdb_bfd_fopen (const char *filename, const char *target, const char *mode,
779 bfd *result = bfd_fopen (filename, target, mode, fd);
782 gdb_bfd_ref (result);
790 gdb_bfd_openr (const char *filename, const char *target)
792 bfd *result = bfd_openr (filename, target);
795 gdb_bfd_ref (result);
803 gdb_bfd_openw (const char *filename, const char *target)
805 bfd *result = bfd_openw (filename, target);
808 gdb_bfd_ref (result);
816 gdb_bfd_openr_iovec (const char *filename, const char *target,
817 void *(*open_func) (struct bfd *nbfd,
820 file_ptr (*pread_func) (struct bfd *nbfd,
825 int (*close_func) (struct bfd *nbfd,
827 int (*stat_func) (struct bfd *abfd,
831 bfd *result = bfd_openr_iovec (filename, target,
832 open_func, open_closure,
833 pread_func, close_func, stat_func);
836 gdb_bfd_ref (result);
844 gdb_bfd_mark_parent (bfd *child, bfd *parent)
846 struct gdb_bfd_data *gdata;
849 /* No need to stash the filename here, because we also keep a
850 reference on the parent archive. */
852 gdata = (struct gdb_bfd_data *) bfd_usrdata (child);
853 if (gdata->archive_bfd == NULL)
855 gdata->archive_bfd = parent;
856 gdb_bfd_ref (parent);
859 gdb_assert (gdata->archive_bfd == parent);
865 gdb_bfd_openr_next_archived_file (bfd *archive, bfd *previous)
867 bfd *result = bfd_openr_next_archived_file (archive, previous);
870 gdb_bfd_mark_parent (result, archive);
878 gdb_bfd_record_inclusion (bfd *includer, bfd *includee)
880 struct gdb_bfd_data *gdata;
882 gdb_bfd_ref (includee);
883 gdata = (struct gdb_bfd_data *) bfd_usrdata (includer);
884 VEC_safe_push (bfdp, gdata->included_bfds, includee);
890 gdb_bfd_fdopenr (const char *filename, const char *target, int fd)
892 bfd *result = bfd_fdopenr (filename, target, fd);
895 gdb_bfd_ref (result);
902 gdb_static_assert (ARRAY_SIZE (_bfd_std_section) == 4);
907 gdb_bfd_section_index (bfd *abfd, asection *section)
911 else if (section == bfd_com_section_ptr)
912 return bfd_count_sections (abfd);
913 else if (section == bfd_und_section_ptr)
914 return bfd_count_sections (abfd) + 1;
915 else if (section == bfd_abs_section_ptr)
916 return bfd_count_sections (abfd) + 2;
917 else if (section == bfd_ind_section_ptr)
918 return bfd_count_sections (abfd) + 3;
919 return section->index;
925 gdb_bfd_count_sections (bfd *abfd)
927 return bfd_count_sections (abfd) + 4;
933 gdb_bfd_requires_relocations (bfd *abfd)
935 struct gdb_bfd_data *gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
937 if (gdata->relocation_computed == 0)
941 for (sect = abfd->sections; sect != NULL; sect = sect->next)
942 if ((sect->flags & SEC_RELOC) != 0)
944 gdata->needs_relocations = 1;
948 gdata->relocation_computed = 1;
951 return gdata->needs_relocations;
956 /* A callback for htab_traverse that prints a single BFD. */
959 print_one_bfd (void **slot, void *data)
961 bfd *abfd = (struct bfd *) *slot;
962 struct gdb_bfd_data *gdata = (struct gdb_bfd_data *) bfd_usrdata (abfd);
963 struct ui_out *uiout = (struct ui_out *) data;
964 struct cleanup *inner;
966 inner = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
967 ui_out_field_int (uiout, "refcount", gdata->refc);
968 ui_out_field_string (uiout, "addr", host_address_to_string (abfd));
969 ui_out_field_string (uiout, "filename", bfd_get_filename (abfd));
970 ui_out_text (uiout, "\n");
976 /* Implement the 'maint info bfd' command. */
979 maintenance_info_bfds (char *arg, int from_tty)
981 struct cleanup *cleanup;
982 struct ui_out *uiout = current_uiout;
984 cleanup = make_cleanup_ui_out_table_begin_end (uiout, 3, -1, "bfds");
985 ui_out_table_header (uiout, 10, ui_left, "refcount", "Refcount");
986 ui_out_table_header (uiout, 18, ui_left, "addr", "Address");
987 ui_out_table_header (uiout, 40, ui_left, "filename", "Filename");
989 ui_out_table_body (uiout);
990 htab_traverse (all_bfds, print_one_bfd, uiout);
992 do_cleanups (cleanup);
995 /* -Wmissing-prototypes */
996 extern initialize_file_ftype _initialize_gdb_bfd;
999 _initialize_gdb_bfd (void)
1001 all_bfds = htab_create_alloc (10, htab_hash_pointer, htab_eq_pointer,
1002 NULL, xcalloc, xfree);
1004 add_cmd ("bfds", class_maintenance, maintenance_info_bfds, _("\
1005 List the BFDs that are currently open."),
1006 &maintenanceinfolist);
1008 add_setshow_boolean_cmd ("bfd-sharing", no_class,
1010 Set whether gdb will share bfds that appear to be the same file."), _("\
1011 Show whether gdb will share bfds that appear to be the same file."), _("\
1012 When enabled gdb will reuse existing bfds rather than reopening the\n\
1013 same file. To decide if two files are the same then gdb compares the\n\
1014 filename, file size, file modification time, and file inode."),
1017 &maintenance_set_cmdlist,
1018 &maintenance_show_cmdlist);
1020 add_setshow_zuinteger_cmd ("bfd-cache", class_maintenance,
1021 &debug_bfd_cache, _("\
1022 Set bfd cache debugging."), _("\
1023 Show bfd cache debugging."), _("\
1024 When non-zero, bfd cache specific debugging is enabled."),
1026 &show_bfd_cache_debug,
1027 &setdebuglist, &showdebuglist);