From c13719d2d03a452d0c8b9f00d2c135047a85d2a4 Mon Sep 17 00:00:00 2001 From: Amit Tomar Date: Thu, 30 Dec 2021 02:23:10 +0530 Subject: [PATCH] fix alignment exception for ullPortInterruptNesting. (#317) * fix alignment exception for ullPortInterruptNesting. While loading (LDR X5, ullPortInterruptNestingConst) the ullPortInterruptNesting variable, the program control seems to be stuck and there is no abort or stack trace observed (as there is no exception handler is installed to catch unaligned access exception). Program control moves forward, if one just declares this varible to be 2 bytes aligned but then varible is not updated properly. One of my colleague, pointed out that issue is due to the fact that ullPortInterruptNesting must be at 8 bytes aligned address but since "vApplicationIRQHandler" (that has 4 bytes of address) is sitting between two 8 bytes aligned addresses that forces ullPortInterruptNesting to be at 4 byte aligned address, causing all sort of mess. It works on QEMU (on ARM64) as it is, since there is no such check for unaligned access but on real hardware it is prohibited. Workaround to this problem is, either we skip 4 byets (using .align 4) after vApplicationIRQHandler declaration or declare it the end of all declarations. This commit does the latter one. Signed-off-by: Amit Singh Tomar * Update portASM.S Remove 1 tab = 4 spaces Co-authored-by: Amit Singh Tomar Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com> Co-authored-by: Joseph Julicher --- portable/GCC/ARM_CA53_64_BIT/portASM.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portable/GCC/ARM_CA53_64_BIT/portASM.S b/portable/GCC/ARM_CA53_64_BIT/portASM.S index a4c110e3c..8a7cf795e 100644 --- a/portable/GCC/ARM_CA53_64_BIT/portASM.S +++ b/portable/GCC/ARM_CA53_64_BIT/portASM.S @@ -416,11 +416,11 @@ ullPortTaskHasFPUContextConst: .dword ullPortTaskHasFPUContext ullICCPMRConst: .dword ullICCPMR ullMaxAPIPriorityMaskConst: .dword ullMaxAPIPriorityMask -vApplicationIRQHandlerConst: .word vApplicationIRQHandler ullPortInterruptNestingConst: .dword ullPortInterruptNesting ullPortYieldRequiredConst: .dword ullPortYieldRequired ullICCIARConst: .dword ullICCIAR ullICCEOIRConst: .dword ullICCEOIR +vApplicationIRQHandlerConst: .word vApplicationIRQHandler