1 /* Definitions for BFD wrappers used by GDB.
3 Copyright (C) 2011-2015 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
)
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
)
171 const struct gdb_bfd_cache_search
*s
= b
;
172 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
174 return (gdata
->mtime
== s
->mtime
175 && gdata
->size
== s
->size
176 && gdata
->inode
== s
->inode
177 && gdata
->device_id
== s
->device_id
178 && strcmp (bfd_get_filename (abfd
), s
->filename
) == 0);
184 is_target_filename (const char *name
)
186 return startswith (name
, TARGET_SYSROOT_PREFIX
);
192 gdb_bfd_has_target_filename (struct bfd
*abfd
)
194 return is_target_filename (bfd_get_filename (abfd
));
198 /* Return the system error number corresponding to ERRNUM. */
201 fileio_errno_to_host (int errnum
)
245 case FILEIO_ENAMETOOLONG
:
251 /* Wrapper for target_fileio_open suitable for passing as the
252 OPEN_FUNC argument to gdb_bfd_openr_iovec. The supplied
253 OPEN_CLOSURE is unused. */
256 gdb_bfd_iovec_fileio_open (struct bfd
*abfd
, void *inferior
)
258 const char *filename
= bfd_get_filename (abfd
);
259 int fd
, target_errno
;
262 gdb_assert (is_target_filename (filename
));
264 fd
= target_fileio_open ((struct inferior
*) inferior
,
265 filename
+ strlen (TARGET_SYSROOT_PREFIX
),
270 errno
= fileio_errno_to_host (target_errno
);
271 bfd_set_error (bfd_error_system_call
);
275 stream
= XCNEW (int);
280 /* Wrapper for target_fileio_pread suitable for passing as the
281 PREAD_FUNC argument to gdb_bfd_openr_iovec. */
284 gdb_bfd_iovec_fileio_pread (struct bfd
*abfd
, void *stream
, void *buf
,
285 file_ptr nbytes
, file_ptr offset
)
287 int fd
= *(int *) stream
;
294 bytes
= target_fileio_pread (fd
, (gdb_byte
*) buf
+ pos
,
295 nbytes
- pos
, offset
+ pos
,
298 /* Success, but no bytes, means end-of-file. */
302 errno
= fileio_errno_to_host (target_errno
);
303 bfd_set_error (bfd_error_system_call
);
313 /* Wrapper for target_fileio_close suitable for passing as the
314 CLOSE_FUNC argument to gdb_bfd_openr_iovec. */
317 gdb_bfd_iovec_fileio_close (struct bfd
*abfd
, void *stream
)
319 int fd
= *(int *) stream
;
324 /* Ignore errors on close. These may happen with remote
325 targets if the connection has already been torn down. */
326 target_fileio_close (fd
, &target_errno
);
328 /* Zero means success. */
332 /* Wrapper for target_fileio_fstat suitable for passing as the
333 STAT_FUNC argument to gdb_bfd_openr_iovec. */
336 gdb_bfd_iovec_fileio_fstat (struct bfd
*abfd
, void *stream
,
339 int fd
= *(int *) stream
;
343 result
= target_fileio_fstat (fd
, sb
, &target_errno
);
346 errno
= fileio_errno_to_host (target_errno
);
347 bfd_set_error (bfd_error_system_call
);
356 gdb_bfd_open (const char *name
, const char *target
, int fd
)
361 struct gdb_bfd_cache_search search
;
364 if (is_target_filename (name
))
366 if (!target_filesystem_is_local ())
368 gdb_assert (fd
== -1);
370 return gdb_bfd_openr_iovec (name
, target
,
371 gdb_bfd_iovec_fileio_open
,
373 gdb_bfd_iovec_fileio_pread
,
374 gdb_bfd_iovec_fileio_close
,
375 gdb_bfd_iovec_fileio_fstat
);
378 name
+= strlen (TARGET_SYSROOT_PREFIX
);
381 if (gdb_bfd_cache
== NULL
)
382 gdb_bfd_cache
= htab_create_alloc (1, hash_bfd
, eq_bfd
, NULL
,
387 fd
= gdb_open_cloexec (name
, O_RDONLY
| O_BINARY
, 0);
390 bfd_set_error (bfd_error_system_call
);
395 search
.filename
= name
;
396 if (fstat (fd
, &st
) < 0)
398 /* Weird situation here. */
402 search
.device_id
= 0;
406 search
.mtime
= st
.st_mtime
;
407 search
.size
= st
.st_size
;
408 search
.inode
= st
.st_ino
;
409 search
.device_id
= st
.st_dev
;
412 /* Note that this must compute the same result as hash_bfd. */
413 hash
= htab_hash_string (name
);
414 /* Note that we cannot use htab_find_slot_with_hash here, because
415 opening the BFD may fail; and this would violate hashtab
417 abfd
= htab_find_with_hash (gdb_bfd_cache
, &search
, hash
);
418 if (bfd_sharing
&& abfd
!= NULL
)
421 fprintf_unfiltered (gdb_stdlog
,
422 "Reusing cached bfd %s for %s\n",
423 host_address_to_string (abfd
),
424 bfd_get_filename (abfd
));
430 abfd
= bfd_fopen (name
, target
, FOPEN_RB
, fd
);
435 fprintf_unfiltered (gdb_stdlog
,
436 "Creating new bfd %s for %s\n",
437 host_address_to_string (abfd
),
438 bfd_get_filename (abfd
));
442 slot
= htab_find_slot_with_hash (gdb_bfd_cache
, &search
, hash
, INSERT
);
451 /* A helper function that releases any section data attached to the
455 free_one_bfd_section (bfd
*abfd
, asection
*sectp
, void *ignore
)
457 struct gdb_bfd_section_data
*sect
= bfd_get_section_userdata (abfd
, sectp
);
459 if (sect
!= NULL
&& sect
->data
!= NULL
)
462 if (sect
->map_addr
!= NULL
)
466 res
= munmap (sect
->map_addr
, sect
->map_len
);
467 gdb_assert (res
== 0);
475 /* Close ABFD, and warn if that fails. */
478 gdb_bfd_close_or_warn (struct bfd
*abfd
)
481 char *name
= bfd_get_filename (abfd
);
483 bfd_map_over_sections (abfd
, free_one_bfd_section
, NULL
);
485 ret
= bfd_close (abfd
);
488 warning (_("cannot close \"%s\": %s"),
489 name
, bfd_errmsg (bfd_get_error ()));
497 gdb_bfd_ref (struct bfd
*abfd
)
500 struct gdb_bfd_data
*gdata
;
506 gdata
= bfd_usrdata (abfd
);
509 fprintf_unfiltered (gdb_stdlog
,
510 "Increase reference count on bfd %s (%s)\n",
511 host_address_to_string (abfd
),
512 bfd_get_filename (abfd
));
520 /* Ask BFD to decompress sections in bfd_get_full_section_contents. */
521 abfd
->flags
|= BFD_DECOMPRESS
;
523 gdata
= bfd_zalloc (abfd
, sizeof (struct gdb_bfd_data
));
525 gdata
->mtime
= bfd_get_mtime (abfd
);
526 gdata
->size
= bfd_get_size (abfd
);
527 gdata
->archive_bfd
= NULL
;
528 if (bfd_stat (abfd
, &buf
) == 0)
530 gdata
->inode
= buf
.st_ino
;
531 gdata
->device_id
= buf
.st_dev
;
535 /* The stat failed. */
537 gdata
->device_id
= 0;
539 bfd_usrdata (abfd
) = gdata
;
541 bfd_alloc_data (abfd
);
543 /* This is the first we've seen it, so add it to the hash table. */
544 slot
= htab_find_slot (all_bfds
, abfd
, INSERT
);
545 gdb_assert (slot
&& !*slot
);
552 gdb_bfd_unref (struct bfd
*abfd
)
555 struct gdb_bfd_data
*gdata
;
556 struct gdb_bfd_cache_search search
;
557 bfd
*archive_bfd
, *included_bfd
;
562 gdata
= bfd_usrdata (abfd
);
563 gdb_assert (gdata
->refc
>= 1);
569 fprintf_unfiltered (gdb_stdlog
,
570 "Decrease reference count on bfd %s (%s)\n",
571 host_address_to_string (abfd
),
572 bfd_get_filename (abfd
));
577 fprintf_unfiltered (gdb_stdlog
,
578 "Delete final reference count on bfd %s (%s)\n",
579 host_address_to_string (abfd
),
580 bfd_get_filename (abfd
));
582 archive_bfd
= gdata
->archive_bfd
;
583 search
.filename
= bfd_get_filename (abfd
);
585 if (gdb_bfd_cache
&& search
.filename
)
587 hashval_t hash
= htab_hash_string (search
.filename
);
590 search
.mtime
= gdata
->mtime
;
591 search
.size
= gdata
->size
;
592 search
.inode
= gdata
->inode
;
593 search
.device_id
= gdata
->device_id
;
594 slot
= htab_find_slot_with_hash (gdb_bfd_cache
, &search
, hash
,
598 htab_clear_slot (gdb_bfd_cache
, slot
);
602 VEC_iterate (bfdp
, gdata
->included_bfds
, ix
, included_bfd
);
604 gdb_bfd_unref (included_bfd
);
605 VEC_free (bfdp
, gdata
->included_bfds
);
607 bfd_free_data (abfd
);
608 bfd_usrdata (abfd
) = NULL
; /* Paranoia. */
610 htab_remove_elt (all_bfds
, abfd
);
612 gdb_bfd_close_or_warn (abfd
);
614 gdb_bfd_unref (archive_bfd
);
617 /* A helper function that returns the section data descriptor
618 associated with SECTION. If no such descriptor exists, a new one
619 is allocated and cleared. */
621 static struct gdb_bfd_section_data
*
622 get_section_descriptor (asection
*section
)
624 struct gdb_bfd_section_data
*result
;
626 result
= bfd_get_section_userdata (section
->owner
, section
);
630 result
= bfd_zalloc (section
->owner
, sizeof (*result
));
631 bfd_set_section_userdata (section
->owner
, section
, result
);
640 gdb_bfd_map_section (asection
*sectp
, bfd_size_type
*size
)
643 struct gdb_bfd_section_data
*descriptor
;
646 gdb_assert ((sectp
->flags
& SEC_RELOC
) == 0);
647 gdb_assert (size
!= NULL
);
651 descriptor
= get_section_descriptor (sectp
);
653 /* If the data was already read for this BFD, just reuse it. */
654 if (descriptor
->data
!= NULL
)
658 if (!bfd_is_section_compressed (abfd
, sectp
))
660 /* The page size, used when mmapping. */
664 pagesize
= getpagesize ();
666 /* Only try to mmap sections which are large enough: we don't want
667 to waste space due to fragmentation. */
669 if (bfd_get_section_size (sectp
) > 4 * pagesize
)
671 descriptor
->size
= bfd_get_section_size (sectp
);
672 descriptor
->data
= bfd_mmap (abfd
, 0, descriptor
->size
, PROT_READ
,
673 MAP_PRIVATE
, sectp
->filepos
,
674 &descriptor
->map_addr
,
675 &descriptor
->map_len
);
677 if ((caddr_t
)descriptor
->data
!= MAP_FAILED
)
679 #if HAVE_POSIX_MADVISE
680 posix_madvise (descriptor
->map_addr
, descriptor
->map_len
,
681 POSIX_MADV_WILLNEED
);
686 /* On failure, clear out the section data and try again. */
687 memset (descriptor
, 0, sizeof (*descriptor
));
690 #endif /* HAVE_MMAP */
692 /* Handle compressed sections, or ordinary uncompressed sections in
695 descriptor
->size
= bfd_get_section_size (sectp
);
696 descriptor
->data
= NULL
;
699 if (!bfd_get_full_section_contents (abfd
, sectp
, &data
))
700 error (_("Can't read data for section '%s' in file '%s'"),
701 bfd_get_section_name (abfd
, sectp
),
702 bfd_get_filename (abfd
));
703 descriptor
->data
= data
;
706 gdb_assert (descriptor
->data
!= NULL
);
707 *size
= descriptor
->size
;
708 return descriptor
->data
;
711 /* Return 32-bit CRC for ABFD. If successful store it to *FILE_CRC_RETURN and
712 return 1. Otherwise print a warning and return 0. ABFD seek position is
716 get_file_crc (bfd
*abfd
, unsigned long *file_crc_return
)
718 unsigned long file_crc
= 0;
720 if (bfd_seek (abfd
, 0, SEEK_SET
) != 0)
722 warning (_("Problem reading \"%s\" for CRC: %s"),
723 bfd_get_filename (abfd
), bfd_errmsg (bfd_get_error ()));
729 gdb_byte buffer
[8 * 1024];
732 count
= bfd_bread (buffer
, sizeof (buffer
), abfd
);
733 if (count
== (bfd_size_type
) -1)
735 warning (_("Problem reading \"%s\" for CRC: %s"),
736 bfd_get_filename (abfd
), bfd_errmsg (bfd_get_error ()));
741 file_crc
= bfd_calc_gnu_debuglink_crc32 (file_crc
, buffer
, count
);
744 *file_crc_return
= file_crc
;
751 gdb_bfd_crc (struct bfd
*abfd
, unsigned long *crc_out
)
753 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
755 if (!gdata
->crc_computed
)
756 gdata
->crc_computed
= get_file_crc (abfd
, &gdata
->crc
);
758 if (gdata
->crc_computed
)
759 *crc_out
= gdata
->crc
;
760 return gdata
->crc_computed
;
768 gdb_bfd_fopen (const char *filename
, const char *target
, const char *mode
,
771 bfd
*result
= bfd_fopen (filename
, target
, mode
, fd
);
774 gdb_bfd_ref (result
);
782 gdb_bfd_openr (const char *filename
, const char *target
)
784 bfd
*result
= bfd_openr (filename
, target
);
787 gdb_bfd_ref (result
);
795 gdb_bfd_openw (const char *filename
, const char *target
)
797 bfd
*result
= bfd_openw (filename
, target
);
800 gdb_bfd_ref (result
);
808 gdb_bfd_openr_iovec (const char *filename
, const char *target
,
809 void *(*open_func
) (struct bfd
*nbfd
,
812 file_ptr (*pread_func
) (struct bfd
*nbfd
,
817 int (*close_func
) (struct bfd
*nbfd
,
819 int (*stat_func
) (struct bfd
*abfd
,
823 bfd
*result
= bfd_openr_iovec (filename
, target
,
824 open_func
, open_closure
,
825 pread_func
, close_func
, stat_func
);
828 gdb_bfd_ref (result
);
836 gdb_bfd_mark_parent (bfd
*child
, bfd
*parent
)
838 struct gdb_bfd_data
*gdata
;
841 /* No need to stash the filename here, because we also keep a
842 reference on the parent archive. */
844 gdata
= bfd_usrdata (child
);
845 if (gdata
->archive_bfd
== NULL
)
847 gdata
->archive_bfd
= parent
;
848 gdb_bfd_ref (parent
);
851 gdb_assert (gdata
->archive_bfd
== parent
);
857 gdb_bfd_openr_next_archived_file (bfd
*archive
, bfd
*previous
)
859 bfd
*result
= bfd_openr_next_archived_file (archive
, previous
);
862 gdb_bfd_mark_parent (result
, archive
);
870 gdb_bfd_record_inclusion (bfd
*includer
, bfd
*includee
)
872 struct gdb_bfd_data
*gdata
;
874 gdb_bfd_ref (includee
);
875 gdata
= bfd_usrdata (includer
);
876 VEC_safe_push (bfdp
, gdata
->included_bfds
, includee
);
882 gdb_bfd_fdopenr (const char *filename
, const char *target
, int fd
)
884 bfd
*result
= bfd_fdopenr (filename
, target
, fd
);
887 gdb_bfd_ref (result
);
894 gdb_static_assert (ARRAY_SIZE (_bfd_std_section
) == 4);
899 gdb_bfd_section_index (bfd
*abfd
, asection
*section
)
903 else if (section
== bfd_com_section_ptr
)
904 return bfd_count_sections (abfd
);
905 else if (section
== bfd_und_section_ptr
)
906 return bfd_count_sections (abfd
) + 1;
907 else if (section
== bfd_abs_section_ptr
)
908 return bfd_count_sections (abfd
) + 2;
909 else if (section
== bfd_ind_section_ptr
)
910 return bfd_count_sections (abfd
) + 3;
911 return section
->index
;
917 gdb_bfd_count_sections (bfd
*abfd
)
919 return bfd_count_sections (abfd
) + 4;
925 gdb_bfd_requires_relocations (bfd
*abfd
)
927 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
929 if (gdata
->relocation_computed
== 0)
933 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
934 if ((sect
->flags
& SEC_RELOC
) != 0)
936 gdata
->needs_relocations
= 1;
940 gdata
->relocation_computed
= 1;
943 return gdata
->needs_relocations
;
948 /* A callback for htab_traverse that prints a single BFD. */
951 print_one_bfd (void **slot
, void *data
)
954 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
955 struct ui_out
*uiout
= data
;
956 struct cleanup
*inner
;
958 inner
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
959 ui_out_field_int (uiout
, "refcount", gdata
->refc
);
960 ui_out_field_string (uiout
, "addr", host_address_to_string (abfd
));
961 ui_out_field_string (uiout
, "filename", bfd_get_filename (abfd
));
962 ui_out_text (uiout
, "\n");
968 /* Implement the 'maint info bfd' command. */
971 maintenance_info_bfds (char *arg
, int from_tty
)
973 struct cleanup
*cleanup
;
974 struct ui_out
*uiout
= current_uiout
;
976 cleanup
= make_cleanup_ui_out_table_begin_end (uiout
, 3, -1, "bfds");
977 ui_out_table_header (uiout
, 10, ui_left
, "refcount", "Refcount");
978 ui_out_table_header (uiout
, 18, ui_left
, "addr", "Address");
979 ui_out_table_header (uiout
, 40, ui_left
, "filename", "Filename");
981 ui_out_table_body (uiout
);
982 htab_traverse (all_bfds
, print_one_bfd
, uiout
);
984 do_cleanups (cleanup
);
987 /* -Wmissing-prototypes */
988 extern initialize_file_ftype _initialize_gdb_bfd
;
991 _initialize_gdb_bfd (void)
993 all_bfds
= htab_create_alloc (10, htab_hash_pointer
, htab_eq_pointer
,
994 NULL
, xcalloc
, xfree
);
996 add_cmd ("bfds", class_maintenance
, maintenance_info_bfds
, _("\
997 List the BFDs that are currently open."),
998 &maintenanceinfolist
);
1000 add_setshow_boolean_cmd ("bfd-sharing", no_class
,
1002 Set whether gdb will share bfds that appear to be the same file."), _("\
1003 Show whether gdb will share bfds that appear to be the same file."), _("\
1004 When enabled gdb will reuse existing bfds rather than reopening the\n\
1005 same file. To decide if two files are the same then gdb compares the\n\
1006 filename, file size, file modification time, and file inode."),
1009 &maintenance_set_cmdlist
,
1010 &maintenance_show_cmdlist
);
1012 add_setshow_zuinteger_cmd ("bfd-cache", class_maintenance
,
1013 &debug_bfd_cache
, _("\
1014 Set bfd cache debugging."), _("\
1015 Show bfd cache debugging."), _("\
1016 When non-zero, bfd cache specific debugging is enabled."),
1018 &show_bfd_cache_debug
,
1019 &setdebuglist
, &showdebuglist
);