diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2020-04-02 15:49:06 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2020-04-02 15:49:06 -0400 |
commit | e0fc5c3fcbf0d9e425483c20dc14cf9cedeac3f4 (patch) | |
tree | a67587eb388735ad67659c1903f6118dacdc963d /gdb/windows-tdep.c | |
parent | e2ff18a0a54f98c38f8d9b80c36faa7aacacf6d6 (diff) | |
download | gdb-e0fc5c3fcbf0d9e425483c20dc14cf9cedeac3f4.zip gdb-e0fc5c3fcbf0d9e425483c20dc14cf9cedeac3f4.tar.gz gdb-e0fc5c3fcbf0d9e425483c20dc14cf9cedeac3f4.tar.bz2 |
gdb: use bfd_get_section_contents to read section contents in is_linked_with_cygwin_dll
The function is_linked_with_cygwin_dll currently uses
gdb_bfd_map_section to get some section contents. This is not ideal
because that memory, which is only used in this function, can't be
released. Instead, it was suggested to use
bfd_get_full_section_contents.
However, bfd_get_full_section_contents returns a newly allocated buffer,
which is not very practical to use with C++ automatic memory management
constructs. I decided to make gdb_bfd_get_full_section_contents, a
small alternative to bfd_get_full_section_contents. It is a small
wrapper around bfd_get_section_contents which returns the full contents
of the section in a gdb::byte_vector.
gdb_bfd_get_full_section_contents could be used at many places that
already allocate a vector of the size of the section and then call
bfd_get_section_contents. I think these call sites can be updated over
time.
gdb/ChangeLog:
* gdb_bfd.h: Include gdbsupport/byte-vector.h.
(gdb_bfd_get_full_section_contents): New declaration.
* gdb_bfd.c (gdb_bfd_get_full_section_contents): New function.
* windows-tdep.c (is_linked_with_cygwin_dll): Use
gdb_bfd_get_full_section_contents.
Diffstat (limited to 'gdb/windows-tdep.c')
-rw-r--r-- | gdb/windows-tdep.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index 0042ea3..662a46f 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -935,18 +935,17 @@ is_linked_with_cygwin_dll (bfd *abfd) bfd_vma idata_addr = pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].VirtualAddress; - /* Map the section's data. */ - bfd_size_type idata_size; - const gdb_byte *const idata_contents - = gdb_bfd_map_section (idata_section, &idata_size); - if (idata_contents == nullptr) + /* Get the section's data. */ + gdb::byte_vector idata_contents; + if (!gdb_bfd_get_full_section_contents (abfd, idata_section, &idata_contents)) { warning (_("Failed to get content of .idata section.")); return false; } - const gdb_byte *iter = idata_contents; - const gdb_byte *end = idata_contents + idata_size; + size_t idata_size = idata_contents.size (); + const gdb_byte *iter = idata_contents.data (); + const gdb_byte *end = idata_contents.data () + idata_size; const pe_import_directory_entry null_dir_entry = { 0 }; /* Iterate through all directory entries. */ |