| Too many problems poped up because of unnoticed misaligned memory access in | |
| kernel code lately. Therefore the alignment fixup is now unconditionally | |
| configured in for SA11x0 based targets. According to Alan Cox, this is a | |
| bad idea to configure it out, but Russell King has some good reasons for | |
| doing so on some f***ed up ARM architectures like the EBSA110. However | |
| this is not the case on many design I'm aware of, like all SA11x0 based | |
| ones. | |
| Of course this is a bad idea to rely on the alignment trap to perform | |
| unaligned memory access in general. If those access are predictable, you | |
| are better to use the macros provided by include/asm/unaligned.h. The | |
| alignment trap can fixup misaligned access for the exception cases, but at | |
| a high performance cost. It better be rare. | |
| Now for user space applications, it is possible to configure the alignment | |
| trap to SIGBUS any code performing unaligned access (good for debugging bad | |
| code), or even fixup the access by software like for kernel code. The later | |
| mode isn't recommended for performance reasons (just think about the | |
| floating point emulation that works about the same way). Fix your code | |
| instead! | |
| Please note that randomly changing the behaviour without good thought is | |
| real bad - it changes the behaviour of all unaligned instructions in user | |
| space, and might cause programs to fail unexpectedly. | |
| To change the alignment trap behavior, simply echo a number into | |
| /proc/cpu/alignment. The number is made up from various bits: | |
| bit behavior when set | |
| --- ----------------- | |
| 0 A user process performing an unaligned memory access | |
| will cause the kernel to print a message indicating | |
| process name, pid, pc, instruction, address, and the | |
| fault code. | |
| 1 The kernel will attempt to fix up the user process | |
| performing the unaligned access. This is of course | |
| slow (think about the floating point emulator) and | |
| not recommended for production use. | |
| 2 The kernel will send a SIGBUS signal to the user process | |
| performing the unaligned access. | |
| Note that not all combinations are supported - only values 0 through 5. | |
| (6 and 7 don't make sense). | |
| For example, the following will turn on the warnings, but without | |
| fixing up or sending SIGBUS signals: | |
| echo 1 > /proc/sys/debug/alignment | |
| You can also read the content of the same file to get statistical | |
| information on unaligned access occurrences plus the current mode of | |
| operation for user space code. | |
| Nicolas Pitre, Mar 13, 2001. Modified Russell King, Nov 30, 2001. |