X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fgdb_bfd.h;h=6845d6ccef561c95cdec8137ab86170cfae45e0f;hb=09cb5e2312e299bd3e362f8acb070560a06d156a;hp=9b1e292bf18f680bcbe0560871a4ed2cba3c69ec;hpb=b811d2c2920ddcb1adcd438da38e90912b31f45f;p=binutils-gdb.git diff --git a/gdb/gdb_bfd.h b/gdb/gdb_bfd.h index 9b1e292bf18..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. @@ -21,7 +21,10 @@ #define GDB_BFD_H #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); @@ -77,9 +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); +gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target, + 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 @@ -181,4 +187,47 @@ int gdb_bfd_count_sections (bfd *abfd); int gdb_bfd_requires_relocations (bfd *abfd); +/* Alternative to bfd_get_full_section_contents that returns the section + contents in *CONTENTS, instead of an allocated buffer. + + Return true on success, false otherwise. */ + +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 */