blob: c7c7a114c78c795c702f8543c57c7558466a9a4b [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001Too many problems poped up because of unnoticed misaligned memory access in
2kernel code lately. Therefore the alignment fixup is now unconditionally
3configured in for SA11x0 based targets. According to Alan Cox, this is a
4bad idea to configure it out, but Russell King has some good reasons for
5doing so on some f***ed up ARM architectures like the EBSA110. However
6this is not the case on many design I'm aware of, like all SA11x0 based
7ones.
8
9Of course this is a bad idea to rely on the alignment trap to perform
10unaligned memory access in general. If those access are predictable, you
11are better to use the macros provided by include/asm/unaligned.h. The
12alignment trap can fixup misaligned access for the exception cases, but at
13a high performance cost. It better be rare.
14
15Now for user space applications, it is possible to configure the alignment
16trap to SIGBUS any code performing unaligned access (good for debugging bad
17code), or even fixup the access by software like for kernel code. The later
18mode isn't recommended for performance reasons (just think about the
19floating point emulation that works about the same way). Fix your code
20instead!
21
22Please note that randomly changing the behaviour without good thought is
23real bad - it changes the behaviour of all unaligned instructions in user
24space, and might cause programs to fail unexpectedly.
25
26To change the alignment trap behavior, simply echo a number into
Nicolas Pitre1ada1442008-12-15 03:09:15 +010027/proc/cpu/alignment. The number is made up from various bits:
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
29bit behavior when set
30--- -----------------
31
320 A user process performing an unaligned memory access
33 will cause the kernel to print a message indicating
34 process name, pid, pc, instruction, address, and the
35 fault code.
36
371 The kernel will attempt to fix up the user process
38 performing the unaligned access. This is of course
39 slow (think about the floating point emulator) and
40 not recommended for production use.
41
422 The kernel will send a SIGBUS signal to the user process
43 performing the unaligned access.
44
45Note that not all combinations are supported - only values 0 through 5.
46(6 and 7 don't make sense).
47
48For example, the following will turn on the warnings, but without
49fixing up or sending SIGBUS signals:
50
51 echo 1 > /proc/sys/debug/alignment
52
53You can also read the content of the same file to get statistical
54information on unaligned access occurrences plus the current mode of
55operation for user space code.
56
57
58Nicolas Pitre, Mar 13, 2001. Modified Russell King, Nov 30, 2001.