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? / 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 <zub....@gmail.com> > + > + * grub-core/kern/arm/misc.S: fix unaligned 64bit local variable > + in __aeabi_uidivmod > + Fixes Savannah bug #43632. > + > 2014-11-20 Andrei Borzenkov <arvidj...@gmail.com> > > * 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 > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel