[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] grub-core/kern/arm/misc.S: fix unaligned grub_uint64_t local
From: |
Vladimir 'φ-coder/phcoder' Serbinenko |
Subject: |
Re: [PATCH] grub-core/kern/arm/misc.S: fix unaligned grub_uint64_t local variable |
Date: |
Fri, 28 Nov 2014 21:15:23 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.2.0 |
On 25.11.2014 13:43, Leif Lindholm wrote:
> On Thu, Nov 20, 2014 at 09:53:14PM +0100, David Kozub wrote:
>> The unaligned local in __aeabi_uidivmod leads to a store to a 64bit
>> value at an address that is not divisible by 8 (in grub_divmod64).
>> The compiler most likely generates a STRD instruction to store it and
>> this causes an exception.
>>
>> Fixes Savannah bug #43632.
>
> I agree with this patch - am I OK to push?
>
Go ahead.
> /
> Leif
>
>> This includes improvements done by Leif Lindholm.
>> ---
>> ChangeLog | 6 ++++++
>> grub-core/kern/arm/misc.S | 14 +++++++-------
>> 2 files changed, 13 insertions(+), 7 deletions(-)
>>
>> diff --git a/ChangeLog b/ChangeLog
>> index 6fbec06..8728c04 100644
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,3 +1,9 @@
>> +2014-11-21 David Kozub <address@hidden>
>> +
>> + * grub-core/kern/arm/misc.S: fix unaligned 64bit local variable
>> + in __aeabi_uidivmod
>> + Fixes Savannah bug #43632.
>> +
>> 2014-11-20 Andrei Borzenkov <address@hidden>
>>
>> * tests/util/grub-fs-tester.in: Consistently print output
>> diff --git a/grub-core/kern/arm/misc.S b/grub-core/kern/arm/misc.S
>> index 8943cc3..16b6f8e 100644
>> --- a/grub-core/kern/arm/misc.S
>> +++ b/grub-core/kern/arm/misc.S
>> @@ -60,17 +60,17 @@ FUNCTION(__aeabi_lmul)
>>
>> .macro division parent
>>
>> - stmfd sp!, {lr}
>> - sub sp, sp, #12
>> + sub sp, sp, #8 @ Allocate naturally aligned 64-bit space
>> + stmfd sp!, {r3,lr} @ Dummy r3 to maintain stack alignment
>> + add r3, sp, #8 @ Set r3 to address of 64-bit space
>> + str r3, [sp] @ Stack parameter, pointer to 64-bit space
>> mov r2, r1
>> - add r1, sp, #4
>> - str r1, [sp, #0]
>> mov r1, #0
>> mov r3, #0
>> bl \parent
>> - ldr r1, [sp, #4]
>> - add sp, sp, #12
>> - ldmfd sp!, {lr}
>> + ldr r1, [sp, #8] @ Extract remainder
>> + ldmfd sp!, {r3,lr} @ Pop into an unused arg/scratch register
>> + add sp, sp, #8
>> bx lr
>> .endm
>>
>> --
>> 2.1.1
>>
>>
>> _______________________________________________
>> Grub-devel mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/grub-devel
>
> _______________________________________________
> Grub-devel mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
signature.asc
Description: OpenPGP digital signature