[PATCH v4 1/2] bfd: fill in PE load config directory entry.
Jan Beulich
jbeulich@suse.com
Wed Apr 2 08:00:51 GMT 2025
On 01.04.2025 22:17, Jeremy Drake wrote:
> On Tue, 1 Apr 2025, Jeremy Drake wrote:
>> I can either: add a remark "If anyone cares about such versions, the size
>> would need to be overridden for them." Or, if you can point out the
>> proper incantation to identify i386 here I can do that. I confirmed on
>> Windows 11 that for i386 modules it will accept either 0x40 or the 32-bit
>> value at the VirtualAddress as the Size, while for x86_64 modules it will
>> only accept the 32-bit value at the VirtualAddress.
>
> This is what I came up with. I'll wait to send a new patch series to hear
> if that's right, to hopefully avoid yet another 24-hour roundtrip.
>
> diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
> index 0dec04fcc3e..0b43ed2ee15 100644
> --- a/bfd/peXXigen.c
> +++ b/bfd/peXXigen.c
> @@ -4601,21 +4601,22 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
> result = false;
> }
>
> - /* The size is stored as the first 4 bytes at _load_config_used.
> - The Microsoft PE format documentation says for compatibility with
> - Windows XP and earlier, the size must be 64 for x86 images. If
> - anyone cares about those versions, the size should be overridden
> - for i386. */
> + /* The size is stored as the first 4 bytes at _load_config_used. */
> if (bfd_get_section_contents (abfd,
> h1->root.u.def.section->output_section, data,
> h1->root.u.def.section->output_offset + h1->root.u.def.value,
> 4))
> {
> + uint32_t size = bfd_get_32 (abfd, data);
> + /* The Microsoft PE format documentation says for compatibility
> + with Windows XP and earlier, the size must be 64 for x86
> + images. */
> pe_data (abfd)->pe_opthdr.DataDirectory[PE_LOAD_CONFIG_TABLE].Size =
> - bfd_get_32 (abfd, data);
> + (bfd_get_arch (abfd) == bfd_arch_i386 &&
> + (bfd_get_mach (abfd) & ~bfd_mach_i386_intel_syntax) ==
> + bfd_mach_i386_i386) ? 64 : size;
As per the other reply, I think we're okay to not fiddle with the field,
until someone actually complains (with a good reason to still require
XP compatibility). As said there, just the comment wants to reflect that.
Jan
More information about the Binutils
mailing list