[PATCH v3 1/1] Fix IAT (Import Address Table) alignment on AArch64
Alice Carlotti
alice.carlotti@arm.com
Fri May 8 13:50:32 GMT 2026
On Fri, May 08, 2026 at 10:31:51AM +0200, Jan Beulich wrote:
> On 08.05.2026 10:28, Jan Beulich wrote:
> > On 05.05.2026 10:34, Evgeny Karpov wrote:
> >> The IAT should be aligned to 8 bytes in aarch64-w64-mingw32, otherwise, it might
> >> result in relocation issues.
> >>
> >> When a function is imported from DLL, it generates the following code:
> >>
> >> adrp x19, __imp_fn
> >> ldr x19, [x19, #:lo12:__imp_fn]
> >>
> >> 8 byte alignment is required for ldr relocation. Addresses are placed in IAT.
> >> The size of the chunk on AArch64 is 8 bytes.
> >> If IAT is not aligned to 8 bytes, the relocation issue appears.
> >> This patch fixes this issue by aligning IAT to 8 bytes for PE32+.
> >>
> >> binutils/ChangeLog:
> >>
> >> * dlltool.c (make_head): Apply alignment to IAT.
> >> (make_delay_head): Apply alignment to Delay IAT.
> >> (main): Adjust 8 byte alignment for PE32+.
> >
> > Okay, with ...
> >
> >> @@ -4013,6 +4017,14 @@ main (int ac, char **av)
> >> /* Check if we generated PE+. */
> >> create_for_pep = (strcmp (mname, "i386:x86-64") == 0
> >> || strcmp (mname, "arm64") == 0);
> >> + if (create_for_pep)
> >> + {
> >> + /* Update default 4 byte IAT (Import Address Table) alignemnt to 8 bytes
> >> + for PE32+.
> >
> > ... the typo here (alignment) corrected. I'll do that while committing.
>
> Except, wait: The patch is missing your S-o-b. Which we need unless you
> meanwhile have a copyright assignment in place with the FSF.
This should be already covered by Arm's copyright assignment.
Alice
>
> Jan
>
> > I guess I'll also replace AArch64 with PE32+ in the title.
> >
> > Jan
>
More information about the Binutils
mailing list