From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>, gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>,
Jon Turney <jon.turney@dronecode.org.uk>
Subject: Re: [PATCH 6/7] gdb: select "Cygwin" OS ABI for Cygwin binaries
Date: Thu, 2 Apr 2020 14:56:54 +0100 [thread overview]
Message-ID: <e6efb420-e8f2-41f4-5b09-a95ebebd71a3@redhat.com> (raw)
In-Reply-To: <e85f83d6-2bdf-4d8e-eba2-c31d935e7a02@polymtl.ca>
On 4/1/20 10:53 PM, Simon Marchi via Gdb-patches wrote:
> On 2020-04-01 5:36 p.m., Pedro Alves wrote:
>> On 3/16/20 5:08 PM, Simon Marchi via Gdb-patches wrote:
>>> +bool
>>> +is_linked_with_cygwin_dll (bfd *abfd)
>>> +{
>>> + /* The list of DLLs a PE is linked to is in the .idata section. See:
>>> +
>>> + https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section
>>> + */
>>> + asection *idata_section = bfd_get_section_by_name (abfd, ".idata");
>>> + if (idata_section == nullptr)
>>> + return false;
>>> +
>>> + /* Find the virtual address of the .idata section. We must subtract this
>>> + from the RVAs (relative virtual addresses) to obtain an offset in the
>>> + section. */
>>> + bfd_vma idata_addr =
>>> + pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].VirtualAddress;
>>
>> = on next line. Unless it doesn't fit, then let's ignore.
>
> Yes it fits.
>>> +
>>> + /* 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)
>>> + {
>>> + warning (_("Failed to get content of .idata section."));
>>> + return false;
>>> + }
>>> +
>>> + const gdb_byte *iter = idata_contents;
>>> + const gdb_byte *end = idata_contents + idata_size;
>>> + const pe_import_directory_entry null_dir_entry = { 0 };
>>> +
>>> + /* Iterate through all directory entries. */
>>> + while (true)
>>> + {
>>> + /* Is there enough space left in the section for another entry? */
>>> + if (iter + sizeof (pe_import_directory_entry) > end)
>>> + {
>>> + warning (_("Failed to parse .idata section: unexpected end of "
>>> + ".idata section."));
>>> + break;
>>> + }
>>> +
>>> + pe_import_directory_entry *dir_entry = (pe_import_directory_entry *) iter;
>>
>> Is 'iter' guaranteed to be sufficiently aligned? Recall that this is
>> host-independent code.
>
> I admit I haven't thought about that. Within the PE file, the data of sections is
> aligned on at least 512 bytes. See "FileAlignment" here:
>
> https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#optional-header-windows-specific-fields-image-only
Ah, good. Sounds like the data structures were designed for
memory mapping. Which isn't that surprising.
>
> However, when BFD maps the file/section data in memory for GDB to read, is that mapping
> guaranteed to be sufficiently aligned as well?
I think so. If bfd heap allocates, then memory will be aligned to the word size at
least. If bfd mmaps, then memory will be aligned to page size. And then if the
data structures are aligned, we should be good.
Thanks,
Pedro Alves
next prev parent reply other threads:[~2020-04-02 13:57 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-16 17:08 [PATCH 0/7] Add "Windows" OS ABI Simon Marchi
2020-03-16 17:08 ` [PATCH 1/7] gdb: recognize 64 bits Windows executables as Cygwin osabi Simon Marchi
2020-03-16 17:08 ` [PATCH 2/7] gdb: move enum gdb_osabi to osabi.h Simon Marchi
2020-03-16 17:08 ` [PATCH 3/7] gdb: add Windows OS ABI Simon Marchi
2020-03-16 17:08 ` [PATCH 4/7] gdb: rename i386-cygwin-tdep.c to i386-windows-tdep.c Simon Marchi
2020-03-16 17:08 ` [PATCH 5/7] gdb: rename content of i386-windows-tdep.c, cygwin to windows Simon Marchi
2020-03-16 17:08 ` [PATCH 6/7] gdb: select "Cygwin" OS ABI for Cygwin binaries Simon Marchi
2020-03-16 18:16 ` Christian Biesinger
2020-03-16 18:18 ` Simon Marchi
2020-03-16 19:03 ` Jon Turney
2020-03-16 21:00 ` Simon Marchi
2020-04-01 19:05 ` Tom Tromey
2020-04-01 19:25 ` Simon Marchi
2020-04-01 21:36 ` Pedro Alves
2020-04-01 21:53 ` Simon Marchi
2020-04-02 13:56 ` Pedro Alves [this message]
2020-04-02 14:01 ` Simon Marchi
2020-04-02 14:03 ` Pedro Alves
2020-04-02 14:08 ` Simon Marchi
2020-04-02 14:17 ` Simon Marchi
2020-04-02 13:22 ` Tom Tromey
2020-04-02 14:55 ` [PATCH] gdb: use bfd_get_section_contents to read section contents in, is_linked_with_cygwin_dll (was: Re: [PATCH 6/7] gdb: select "Cygwin" OS ABI for Cygwin binaries) Simon Marchi
2020-04-02 14:57 ` [PATCH] gdb: use bfd_get_section_contents to read section contents in, is_linked_with_cygwin_dll Simon Marchi
2020-04-02 19:01 ` Tom Tromey
2020-04-02 19:42 ` Simon Marchi
2020-04-02 19:45 ` Tom Tromey
2020-04-02 19:47 ` Simon Marchi
2020-03-16 17:08 ` [PATCH 7/7] gdb: define builtin long type to be 64 bits on amd64 Cygwin Simon Marchi
2020-03-16 17:46 ` [PATCH 0/7] Add "Windows" OS ABI Eli Zaretskii
2020-03-16 17:48 ` Simon Marchi
2020-03-16 19:04 ` Jon Turney
2020-04-01 21:42 ` Pedro Alves
2020-04-01 21:56 ` Simon Marchi
2020-04-02 3:06 ` [PATCH] gdb: stop using host-dependent signal numbers in, windows-tdep.c (was: Re: [PATCH 0/7] Add "Windows" OS ABI) Simon Marchi
2020-04-02 14:00 ` [PATCH] gdb: stop using host-dependent signal numbers in, windows-tdep.c Pedro Alves
2020-04-02 14:02 ` Simon Marchi
2020-04-02 15:12 ` Eli Zaretskii
2020-04-08 12:45 ` Jon Turney
2020-04-08 18:16 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e6efb420-e8f2-41f4-5b09-a95ebebd71a3@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=jon.turney@dronecode.org.uk \
--cc=simon.marchi@efficios.com \
--cc=simon.marchi@polymtl.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox