]> begriffs open source - freertos/commit
fix alignment exception for ullPortInterruptNesting. (#317)
authorAmit Tomar <amittomer25@gmail.com>
Wed, 29 Dec 2021 20:53:10 +0000 (02:23 +0530)
committerGitHub <noreply@github.com>
Wed, 29 Dec 2021 20:53:10 +0000 (13:53 -0700)
commitc13719d2d03a452d0c8b9f00d2c135047a85d2a4
tree60612a28e61eb07b24f3763cd7d9923e75b09f7b
parent7b95420ad9e72253ddbf0cea45a0e17c9256b3ef
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 <atomar25opensource@gmail.com>
* Update portASM.S

Remove 1 tab = 4 spaces

Co-authored-by: Amit Singh Tomar <atomar25opensource@gmail.com>
Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
Co-authored-by: Joseph Julicher <jjulicher@mac.com>
portable/GCC/ARM_CA53_64_BIT/portASM.S