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_warn_if_slow ((struct inferior
*) inferior
,
266 + strlen (TARGET_SYSROOT_PREFIX
),
271 errno
= fileio_errno_to_host (target_errno
);
272 bfd_set_error (bfd_error_system_call
);
276 stream
= XCNEW (int);
281 /* Wrapper for target_fileio_pread suitable for passing as the
282 PREAD_FUNC argument to gdb_bfd_openr_iovec. */
285 gdb_bfd_iovec_fileio_pread (struct bfd
*abfd
, void *stream
, void *buf
,
286 file_ptr nbytes
, file_ptr offset
)
288 int fd
= *(int *) stream
;
295 bytes
= target_fileio_pread (fd
, (gdb_byte
*) buf
+ pos
,
296 nbytes
- pos
, offset
+ pos
,
299 /* Success, but no bytes, means end-of-file. */
303 errno
= fileio_errno_to_host (target_errno
);
304 bfd_set_error (bfd_error_system_call
);
314 /* Wrapper for target_fileio_close suitable for passing as the
315 CLOSE_FUNC argument to gdb_bfd_openr_iovec. */
318 gdb_bfd_iovec_fileio_close (struct bfd
*abfd
, void *stream
)
320 int fd
= *(int *) stream
;
325 /* Ignore errors on close. These may happen with remote
326 targets if the connection has already been torn down. */
327 target_fileio_close (fd
, &target_errno
);
329 /* Zero means success. */
333 /* Wrapper for target_fileio_fstat suitable for passing as the
334 STAT_FUNC argument to gdb_bfd_openr_iovec. */
337 gdb_bfd_iovec_fileio_fstat (struct bfd
*abfd
, void *stream
,
340 int fd
= *(int *) stream
;
344 result
= target_fileio_fstat (fd
, sb
, &target_errno
);
347 errno
= fileio_errno_to_host (target_errno
);
348 bfd_set_error (bfd_error_system_call
);
357 gdb_bfd_open (const char *name
, const char *target
, int fd
)
362 struct gdb_bfd_cache_search search
;
365 if (is_target_filename (name
))
367 if (!target_filesystem_is_local ())
369 gdb_assert (fd
== -1);
371 return gdb_bfd_openr_iovec (name
, target
,
372 gdb_bfd_iovec_fileio_open
,
374 gdb_bfd_iovec_fileio_pread
,
375 gdb_bfd_iovec_fileio_close
,
376 gdb_bfd_iovec_fileio_fstat
);
379 name
+= strlen (TARGET_SYSROOT_PREFIX
);
382 if (gdb_bfd_cache
== NULL
)
383 gdb_bfd_cache
= htab_create_alloc (1, hash_bfd
, eq_bfd
, NULL
,
388 fd
= gdb_open_cloexec (name
, O_RDONLY
| O_BINARY
, 0);
391 bfd_set_error (bfd_error_system_call
);
396 search
.filename
= name
;
397 if (fstat (fd
, &st
) < 0)
399 /* Weird situation here. */
403 search
.device_id
= 0;
407 search
.mtime
= st
.st_mtime
;
408 search
.size
= st
.st_size
;
409 search
.inode
= st
.st_ino
;
410 search
.device_id
= st
.st_dev
;
413 /* Note that this must compute the same result as hash_bfd. */
414 hash
= htab_hash_string (name
);
415 /* Note that we cannot use htab_find_slot_with_hash here, because
416 opening the BFD may fail; and this would violate hashtab
418 abfd
= htab_find_with_hash (gdb_bfd_cache
, &search
, hash
);
419 if (bfd_sharing
&& abfd
!= NULL
)
422 fprintf_unfiltered (gdb_stdlog
,
423 "Reusing cached bfd %s for %s\n",
424 host_address_to_string (abfd
),
425 bfd_get_filename (abfd
));
431 abfd
= bfd_fopen (name
, target
, FOPEN_RB
, fd
);
436 fprintf_unfiltered (gdb_stdlog
,
437 "Creating new bfd %s for %s\n",
438 host_address_to_string (abfd
),
439 bfd_get_filename (abfd
));
443 slot
= htab_find_slot_with_hash (gdb_bfd_cache
, &search
, hash
, INSERT
);
452 /* A helper function that releases any section data attached to the
456 free_one_bfd_section (bfd
*abfd
, asection
*sectp
, void *ignore
)
458 struct gdb_bfd_section_data
*sect
= bfd_get_section_userdata (abfd
, sectp
);
460 if (sect
!= NULL
&& sect
->data
!= NULL
)
463 if (sect
->map_addr
!= NULL
)
467 res
= munmap (sect
->map_addr
, sect
->map_len
);
468 gdb_assert (res
== 0);
476 /* Close ABFD, and warn if that fails. */
479 gdb_bfd_close_or_warn (struct bfd
*abfd
)
482 char *name
= bfd_get_filename (abfd
);
484 bfd_map_over_sections (abfd
, free_one_bfd_section
, NULL
);
486 ret
= bfd_close (abfd
);
489 warning (_("cannot close \"%s\": %s"),
490 name
, bfd_errmsg (bfd_get_error ()));
498 gdb_bfd_ref (struct bfd
*abfd
)
501 struct gdb_bfd_data
*gdata
;
507 gdata
= bfd_usrdata (abfd
);
510 fprintf_unfiltered (gdb_stdlog
,
511 "Increase reference count on bfd %s (%s)\n",
512 host_address_to_string (abfd
),
513 bfd_get_filename (abfd
));
521 /* Ask BFD to decompress sections in bfd_get_full_section_contents. */
522 abfd
->flags
|= BFD_DECOMPRESS
;
524 gdata
= bfd_zalloc (abfd
, sizeof (struct gdb_bfd_data
));
526 gdata
->mtime
= bfd_get_mtime (abfd
);
527 gdata
->size
= bfd_get_size (abfd
);
528 gdata
->archive_bfd
= NULL
;
529 if (bfd_stat (abfd
, &buf
) == 0)
531 gdata
->inode
= buf
.st_ino
;
532 gdata
->device_id
= buf
.st_dev
;
536 /* The stat failed. */
538 gdata
->device_id
= 0;
540 bfd_usrdata (abfd
) = gdata
;
542 bfd_alloc_data (abfd
);
544 /* This is the first we've seen it, so add it to the hash table. */
545 slot
= htab_find_slot (all_bfds
, abfd
, INSERT
);
546 gdb_assert (slot
&& !*slot
);
553 gdb_bfd_unref (struct bfd
*abfd
)
556 struct gdb_bfd_data
*gdata
;
557 struct gdb_bfd_cache_search search
;
558 bfd
*archive_bfd
, *included_bfd
;
563 gdata
= bfd_usrdata (abfd
);
564 gdb_assert (gdata
->refc
>= 1);
570 fprintf_unfiltered (gdb_stdlog
,
571 "Decrease reference count on bfd %s (%s)\n",
572 host_address_to_string (abfd
),
573 bfd_get_filename (abfd
));
578 fprintf_unfiltered (gdb_stdlog
,
579 "Delete final reference count on bfd %s (%s)\n",
580 host_address_to_string (abfd
),
581 bfd_get_filename (abfd
));
583 archive_bfd
= gdata
->archive_bfd
;
584 search
.filename
= bfd_get_filename (abfd
);
586 if (gdb_bfd_cache
&& search
.filename
)
588 hashval_t hash
= htab_hash_string (search
.filename
);
591 search
.mtime
= gdata
->mtime
;
592 search
.size
= gdata
->size
;
593 search
.inode
= gdata
->inode
;
594 search
.device_id
= gdata
->device_id
;
595 slot
= htab_find_slot_with_hash (gdb_bfd_cache
, &search
, hash
,
599 htab_clear_slot (gdb_bfd_cache
, slot
);
603 VEC_iterate (bfdp
, gdata
->included_bfds
, ix
, included_bfd
);
605 gdb_bfd_unref (included_bfd
);
606 VEC_free (bfdp
, gdata
->included_bfds
);
608 bfd_free_data (abfd
);
609 bfd_usrdata (abfd
) = NULL
; /* Paranoia. */
611 htab_remove_elt (all_bfds
, abfd
);
613 gdb_bfd_close_or_warn (abfd
);
615 gdb_bfd_unref (archive_bfd
);
618 /* A helper function that returns the section data descriptor
619 associated with SECTION. If no such descriptor exists, a new one
620 is allocated and cleared. */
622 static struct gdb_bfd_section_data
*
623 get_section_descriptor (asection
*section
)
625 struct gdb_bfd_section_data
*result
;
627 result
= bfd_get_section_userdata (section
->owner
, section
);
631 result
= bfd_zalloc (section
->owner
, sizeof (*result
));
632 bfd_set_section_userdata (section
->owner
, section
, result
);
641 gdb_bfd_map_section (asection
*sectp
, bfd_size_type
*size
)
644 struct gdb_bfd_section_data
*descriptor
;
647 gdb_assert ((sectp
->flags
& SEC_RELOC
) == 0);
648 gdb_assert (size
!= NULL
);
652 descriptor
= get_section_descriptor (sectp
);
654 /* If the data was already read for this BFD, just reuse it. */
655 if (descriptor
->data
!= NULL
)
659 if (!bfd_is_section_compressed (abfd
, sectp
))
661 /* The page size, used when mmapping. */
665 pagesize
= getpagesize ();
667 /* Only try to mmap sections which are large enough: we don't want
668 to waste space due to fragmentation. */
670 if (bfd_get_section_size (sectp
) > 4 * pagesize
)
672 descriptor
->size
= bfd_get_section_size (sectp
);
673 descriptor
->data
= bfd_mmap (abfd
, 0, descriptor
->size
, PROT_READ
,
674 MAP_PRIVATE
, sectp
->filepos
,
675 &descriptor
->map_addr
,
676 &descriptor
->map_len
);
678 if ((caddr_t
)descriptor
->data
!= MAP_FAILED
)
680 #if HAVE_POSIX_MADVISE
681 posix_madvise (descriptor
->map_addr
, descriptor
->map_len
,
682 POSIX_MADV_WILLNEED
);
687 /* On failure, clear out the section data and try again. */
688 memset (descriptor
, 0, sizeof (*descriptor
));
691 #endif /* HAVE_MMAP */
693 /* Handle compressed sections, or ordinary uncompressed sections in
696 descriptor
->size
= bfd_get_section_size (sectp
);
697 descriptor
->data
= NULL
;
700 if (!bfd_get_full_section_contents (abfd
, sectp
, &data
))
701 error (_("Can't read data for section '%s' in file '%s'"),
702 bfd_get_section_name (abfd
, sectp
),
703 bfd_get_filename (abfd
));
704 descriptor
->data
= data
;
707 gdb_assert (descriptor
->data
!= NULL
);
708 *size
= descriptor
->size
;
709 return descriptor
->data
;
712 /* Return 32-bit CRC for ABFD. If successful store it to *FILE_CRC_RETURN and
713 return 1. Otherwise print a warning and return 0. ABFD seek position is
717 get_file_crc (bfd
*abfd
, unsigned long *file_crc_return
)
719 unsigned long file_crc
= 0;
721 if (bfd_seek (abfd
, 0, SEEK_SET
) != 0)
723 warning (_("Problem reading \"%s\" for CRC: %s"),
724 bfd_get_filename (abfd
), bfd_errmsg (bfd_get_error ()));
730 gdb_byte buffer
[8 * 1024];
733 count
= bfd_bread (buffer
, sizeof (buffer
), abfd
);
734 if (count
== (bfd_size_type
) -1)
736 warning (_("Problem reading \"%s\" for CRC: %s"),
737 bfd_get_filename (abfd
), bfd_errmsg (bfd_get_error ()));
742 file_crc
= bfd_calc_gnu_debuglink_crc32 (file_crc
, buffer
, count
);
745 *file_crc_return
= file_crc
;
752 gdb_bfd_crc (struct bfd
*abfd
, unsigned long *crc_out
)
754 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
756 if (!gdata
->crc_computed
)
757 gdata
->crc_computed
= get_file_crc (abfd
, &gdata
->crc
);
759 if (gdata
->crc_computed
)
760 *crc_out
= gdata
->crc
;
761 return gdata
->crc_computed
;
769 gdb_bfd_fopen (const char *filename
, const char *target
, const char *mode
,
772 bfd
*result
= bfd_fopen (filename
, target
, mode
, fd
);
775 gdb_bfd_ref (result
);
783 gdb_bfd_openr (const char *filename
, const char *target
)
785 bfd
*result
= bfd_openr (filename
, target
);
788 gdb_bfd_ref (result
);
796 gdb_bfd_openw (const char *filename
, const char *target
)
798 bfd
*result
= bfd_openw (filename
, target
);
801 gdb_bfd_ref (result
);
809 gdb_bfd_openr_iovec (const char *filename
, const char *target
,
810 void *(*open_func
) (struct bfd
*nbfd
,
813 file_ptr (*pread_func
) (struct bfd
*nbfd
,
818 int (*close_func
) (struct bfd
*nbfd
,
820 int (*stat_func
) (struct bfd
*abfd
,
824 bfd
*result
= bfd_openr_iovec (filename
, target
,
825 open_func
, open_closure
,
826 pread_func
, close_func
, stat_func
);
829 gdb_bfd_ref (result
);
837 gdb_bfd_mark_parent (bfd
*child
, bfd
*parent
)
839 struct gdb_bfd_data
*gdata
;
842 /* No need to stash the filename here, because we also keep a
843 reference on the parent archive. */
845 gdata
= bfd_usrdata (child
);
846 if (gdata
->archive_bfd
== NULL
)
848 gdata
->archive_bfd
= parent
;
849 gdb_bfd_ref (parent
);
852 gdb_assert (gdata
->archive_bfd
== parent
);
858 gdb_bfd_openr_next_archived_file (bfd
*archive
, bfd
*previous
)
860 bfd
*result
= bfd_openr_next_archived_file (archive
, previous
);
863 gdb_bfd_mark_parent (result
, archive
);
871 gdb_bfd_record_inclusion (bfd
*includer
, bfd
*includee
)
873 struct gdb_bfd_data
*gdata
;
875 gdb_bfd_ref (includee
);
876 gdata
= bfd_usrdata (includer
);
877 VEC_safe_push (bfdp
, gdata
->included_bfds
, includee
);
883 gdb_bfd_fdopenr (const char *filename
, const char *target
, int fd
)
885 bfd
*result
= bfd_fdopenr (filename
, target
, fd
);
888 gdb_bfd_ref (result
);
895 gdb_static_assert (ARRAY_SIZE (_bfd_std_section
) == 4);
900 gdb_bfd_section_index (bfd
*abfd
, asection
*section
)
904 else if (section
== bfd_com_section_ptr
)
905 return bfd_count_sections (abfd
);
906 else if (section
== bfd_und_section_ptr
)
907 return bfd_count_sections (abfd
) + 1;
908 else if (section
== bfd_abs_section_ptr
)
909 return bfd_count_sections (abfd
) + 2;
910 else if (section
== bfd_ind_section_ptr
)
911 return bfd_count_sections (abfd
) + 3;
912 return section
->index
;
918 gdb_bfd_count_sections (bfd
*abfd
)
920 return bfd_count_sections (abfd
) + 4;
926 gdb_bfd_requires_relocations (bfd
*abfd
)
928 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
930 if (gdata
->relocation_computed
== 0)
934 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
935 if ((sect
->flags
& SEC_RELOC
) != 0)
937 gdata
->needs_relocations
= 1;
941 gdata
->relocation_computed
= 1;
944 return gdata
->needs_relocations
;
949 /* A callback for htab_traverse that prints a single BFD. */
952 print_one_bfd (void **slot
, void *data
)
955 struct gdb_bfd_data
*gdata
= bfd_usrdata (abfd
);
956 struct ui_out
*uiout
= data
;
957 struct cleanup
*inner
;
959 inner
= make_cleanup_ui_out_tuple_begin_end (uiout
, NULL
);
960 ui_out_field_int (uiout
, "refcount", gdata
->refc
);
961 ui_out_field_string (uiout
, "addr", host_address_to_string (abfd
));
962 ui_out_field_string (uiout
, "filename", bfd_get_filename (abfd
));
963 ui_out_text (uiout
, "\n");
969 /* Implement the 'maint info bfd' command. */
972 maintenance_info_bfds (char *arg
, int from_tty
)
974 struct cleanup
*cleanup
;
975 struct ui_out
*uiout
= current_uiout
;
977 cleanup
= make_cleanup_ui_out_table_begin_end (uiout
, 3, -1, "bfds");
978 ui_out_table_header (uiout
, 10, ui_left
, "refcount", "Refcount");
979 ui_out_table_header (uiout
, 18, ui_left
, "addr", "Address");
980 ui_out_table_header (uiout
, 40, ui_left
, "filename", "Filename");
982 ui_out_table_body (uiout
);
983 htab_traverse (all_bfds
, print_one_bfd
, uiout
);
985 do_cleanups (cleanup
);
988 /* -Wmissing-prototypes */
989 extern initialize_file_ftype _initialize_gdb_bfd
;
992 _initialize_gdb_bfd (void)
994 all_bfds
= htab_create_alloc (10, htab_hash_pointer
, htab_eq_pointer
,
995 NULL
, xcalloc
, xfree
);
997 add_cmd ("bfds", class_maintenance
, maintenance_info_bfds
, _("\
998 List the BFDs that are currently open."),
999 &maintenanceinfolist
);
1001 add_setshow_boolean_cmd ("bfd-sharing", no_class
,
1003 Set whether gdb will share bfds that appear to be the same file."), _("\
1004 Show whether gdb will share bfds that appear to be the same file."), _("\
1005 When enabled gdb will reuse existing bfds rather than reopening the\n\
1006 same file. To decide if two files are the same then gdb compares the\n\
1007 filename, file size, file modification time, and file inode."),
1010 &maintenance_set_cmdlist
,
1011 &maintenance_show_cmdlist
);
1013 add_setshow_zuinteger_cmd ("bfd-cache", class_maintenance
,
1014 &debug_bfd_cache
, _("\
1015 Set bfd cache debugging."), _("\
1016 Show bfd cache debugging."), _("\
1017 When non-zero, bfd cache specific debugging is enabled."),
1019 &show_bfd_cache_debug
,
1020 &setdebuglist
, &showdebuglist
);