[PATCH v3 1/1] Fix IAT (Import Address Table) alignment on AArch64

Jan Beulich jbeulich@suse.com
Mon May 11 08:58:50 GMT 2026


On 08.05.2026 15:50, Alice Carlotti wrote:
> 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.

Oh, indeed. I failed to notice that Evgeny's email is now @arm.com (I'm pretty
sure it was different on earlier occasions), sorry.

Jan


More information about the Binutils mailing list