X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fgdb_bfd.h;h=6845d6ccef561c95cdec8137ab86170cfae45e0f;hb=09cb5e2312e299bd3e362f8acb070560a06d156a;hp=532520e0f7d29624cf3838c1d7a2a57e1fa431bf;hpb=ad80db5b9f7c95105c78d3ab439678184d1b7177;p=binutils-gdb.git diff --git a/gdb/gdb_bfd.h b/gdb/gdb_bfd.h index 532520e0f7d..6845d6ccef5 100644 --- a/gdb/gdb_bfd.h +++ b/gdb/gdb_bfd.h @@ -1,6 +1,6 @@ /* Definitions for BFD wrappers used by GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -23,6 +23,8 @@ #include "registry.h" #include "gdbsupport/byte-vector.h" #include "gdbsupport/gdb_ref_ptr.h" +#include "gdbsupport/iterator-range.h" +#include "gdbsupport/next-iterator.h" DECLARE_REGISTRY (bfd); @@ -78,10 +80,12 @@ typedef gdb::ref_ptr gdb_bfd_ref_ptr; If the BFD was not accessed using target fileio operations then the filename associated with the BFD and accessible with bfd_get_filename will not be exactly NAME but rather NAME with - TARGET_SYSROOT_PREFIX stripped. */ + TARGET_SYSROOT_PREFIX stripped. If WARN_IF_SLOW is true, print a + warning message if the file is being accessed over a link that may + be slow. */ gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target, - int fd = -1); + int fd = -1, bool warn_if_slow = true); /* Mark the CHILD BFD as being a member of PARENT. Also, increment the reference count of CHILD. Calling this function ensures that @@ -191,4 +195,39 @@ int gdb_bfd_requires_relocations (bfd *abfd); bool gdb_bfd_get_full_section_contents (bfd *abfd, asection *section, gdb::byte_vector *contents); +/* Create and initialize a BFD handle from a target in-memory range. */ + +gdb_bfd_ref_ptr gdb_bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, + const char *target, + const char *filename = nullptr); + +/* Range adapter for a BFD's sections. + + To be used as: + + for (asection *sect : gdb_bfd_all_sections (bfd)) + ... use SECT ... + */ + +using gdb_bfd_section_range = next_range; + +static inline gdb_bfd_section_range +gdb_bfd_sections (bfd *abfd) +{ + return gdb_bfd_section_range (abfd->sections); +} + +static inline gdb_bfd_section_range +gdb_bfd_sections (const gdb_bfd_ref_ptr &abfd) +{ + return gdb_bfd_section_range (abfd->sections); +}; + +/* A wrapper for bfd_errmsg to produce a more helpful error message + in the case of bfd_error_file_ambiguously recognized. + MATCHING, if non-NULL, is the corresponding argument to + bfd_check_format_matches, and will be freed. */ + +extern std::string gdb_bfd_errmsg (bfd_error_type error_tag, char **matching); + #endif /* GDB_BFD_H */