/* Definitions for BFD wrappers used by GDB.
- Copyright (C) 2011-2019 Free Software Foundation, Inc.
+ Copyright (C) 2011-2021 Free Software Foundation, Inc.
This file is part of GDB.
#define GDB_BFD_H
#include "registry.h"
+#include "gdbsupport/byte-vector.h"
#include "gdbsupport/gdb_ref_ptr.h"
+#include "gdbsupport/next-iterator.h"
DECLARE_REGISTRY (bfd);
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
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_iterator = next_iterator<asection>;
+using gdb_bfd_section_range = next_adapter<asection, gdb_bfd_section_iterator>;
+
+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);
+};
+
#endif /* GDB_BFD_H */